[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