[wwwsearch-commits] r21731 - wwwsearch/mechanize/trunk
jjlee at codespeak.net
jjlee at codespeak.net
Fri Jan 6 01:12:55 CET 2006
Author: jjlee
Date: Fri Jan 6 01:12:54 2006
New Revision: 21731
Modified:
wwwsearch/mechanize/trunk/README.html.in
wwwsearch/mechanize/trunk/test.py
Log:
Fix tests and docs re response identity
Modified: wwwsearch/mechanize/trunk/README.html.in
==============================================================================
--- wwwsearch/mechanize/trunk/README.html.in (original)
+++ wwwsearch/mechanize/trunk/README.html.in Fri Jan 6 01:12:54 2006
@@ -72,13 +72,13 @@
br = Browser()
br.open("http://www.example.com/")
# follow second link with element text matching regular expression
-response = br.follow_link(text_regex=re.compile(r"cheese\s*shop"), nr=1)
+response1 = br.follow_link(text_regex=re.compile(r"cheese\s*shop"), nr=1)
assert br.viewing_html()
print br.title()
-print response.geturl()
-print response.info() # headers
-print response.read() # body
-response.close()
+print response1.geturl()
+print response1.info() # headers
+print response1.read() # body
+response1.close() # (shown for clarity; in fact Browser does this for you)
br.select_form(name="order")
# Browser passes through unknown attributes (including methods)
@@ -86,14 +86,12 @@
br["cheeses"] = ["mozzarella", "caerphilly"] # (the method here is __setitem__)
response2 = br.submit() # submit current form
-response3 = br.back() # back to cheese shop
-# the history mechanism uses cached requests and responses
-assert response3 is response
+response3 = br.back() # back to cheese shop (same data as response1)
+# the history mechanism returns cached response objects
# we can still use the response, even though we closed it:
response3.seek(0)
response3.read()
-response4 = br.reload()
-assert response4 is not response3
+response4 = br.reload() # fetches from server
for form in br.forms():
print form
Modified: wwwsearch/mechanize/trunk/test.py
==============================================================================
--- wwwsearch/mechanize/trunk/test.py (original)
+++ wwwsearch/mechanize/trunk/test.py Fri Jan 6 01:12:54 2006
@@ -1,5 +1,6 @@
#!/usr/bin/env python
+import sys, random
from unittest import TestCase
import StringIO, re, UserDict, urllib2
@@ -63,6 +64,7 @@
self._f = StringIO.StringIO(data)
if info is None: info = {}
self._info = MockHeaders(info)
+ self.source = "%d%d" % (id(self), random.randint(0, sys.maxint))
def info(self): return self._info
def geturl(self): return self.url
def read(self, size=-1): return self._f.read(size)
@@ -70,6 +72,12 @@
assert whence == 0
self._f.seek(0)
def close(self): pass
+ def __getstate__(self):
+ state = self.__dict__
+ state['source'] = self.source
+ return state
+ def __setstate__(self, state):
+ self.__dict__ = state
class MockHandler:
processor_order = 500
@@ -195,21 +203,25 @@
def test_history(self):
import mechanize
+
+ def same_response(ra, rb):
+ return ra.source == rb.source
+
b = TestBrowser()
b.add_handler(MockHandler([("http_open", None)]))
self.assertRaises(mechanize.BrowserStateError, b.back)
r1 = b.open("http://example.com/")
self.assertRaises(mechanize.BrowserStateError, b.back)
r2 = b.open("http://example.com/foo")
- self.assert_(b.back() is r1)
+ self.assert_(same_response(b.back(), r1))
r3 = b.open("http://example.com/bar")
r4 = b.open("http://example.com/spam")
- self.assert_(b.back() is r3)
- self.assert_(b.back() is r1)
+ self.assert_(same_response(b.back(), r3))
+ self.assert_(same_response(b.back(), r1))
self.assertRaises(mechanize.BrowserStateError, b.back)
# reloading does a real HTTP fetch rather than using history cache
r5 = b.reload()
- self.assert_(r5 is not r1)
+ self.assert_(not same_response(r5, r1))
# .geturl() gets fed through to b.response
self.assertEquals(b.geturl(), "http://example.com/")
# can go back n times
@@ -217,15 +229,15 @@
self.assertEquals(b.geturl(), "http://example.com/spam")
r7 = b.open("/spam")
self.assertEquals(b.geturl(), "http://example.com/spam")
- self.assert_(b.back(2) is r5)
+ self.assert_(same_response(b.back(2), r5))
self.assertEquals(b.geturl(), "http://example.com/")
self.assertRaises(mechanize.BrowserStateError, b.back, 2)
b.close() # history should work after close
r8 = b.open("http://example.com/")
r9 = b.open("http://example.com/foo")
- self.assert_(b.back() is r8)
+ self.assert_(same_response(b.back(), r8))
- self.assert_(b.response() is r8)
+ self.assert_(same_response(b.response(), r8))
# even if we get a URLError, history and .response() should still get updated
error = urllib2.HTTPError("http://example.com/bad", 503, "Oops",
@@ -233,7 +245,7 @@
b.add_handler(MockHandler([("https_open", error)]))
self.assertRaises(urllib2.HTTPError, b.open, "https://example.com/")
self.assertEqual(b.response().geturl(), error.geturl())
- self.assert_(b.back() is r8)
+ self.assert_(same_response(b.back(), r8))
def test_viewing_html(self):
# XXX not testing multiple Content-Type headers
More information about the wwwsearch-commits
mailing list