[wwwsearch-commits] r28678 - in wwwsearch/mechanize/trunk: mechanize test

jjlee at codespeak.net jjlee at codespeak.net
Sun Jun 11 19:25:23 CEST 2006


Author: jjlee
Date: Sun Jun 11 19:25:22 2006
New Revision: 28678

Modified:
   wwwsearch/mechanize/trunk/mechanize/_mechanize.py
   wwwsearch/mechanize/trunk/test/test_mechanize.py
Log:
Add a .set_cookie() method to Browser

Modified: wwwsearch/mechanize/trunk/mechanize/_mechanize.py
==============================================================================
--- wwwsearch/mechanize/trunk/mechanize/_mechanize.py	(original)
+++ wwwsearch/mechanize/trunk/mechanize/_mechanize.py	Sun Jun 11 19:25:22 2006
@@ -275,6 +275,20 @@
     def clear_history(self):
         self._history.clear()
 
+    def set_cookie(self, cookie_string):
+        if self._response is None:
+            raise BrowserStateError("not viewing any document")
+        if self.request.get_type() not in ["http", "https"]:
+            raise BrowserStateError("can't set cookie for non-HTTP/HTTPS "
+                                    "transactions")
+        cookiejar = self._ua_handlers["_cookies"].cookiejar
+        response = self.response()  # copy
+        headers = response.info()
+        if "Set-cookie" in headers:
+            del headers["Set-cookie"]
+        headers["Set-cookie"] = cookie_string
+        cookiejar.extract_cookies(response, self.request)
+
     def links(self, **kwds):
         """Return iterable over links (mechanize.Link objects)."""
         if not self.viewing_html():

Modified: wwwsearch/mechanize/trunk/test/test_mechanize.py
==============================================================================
--- wwwsearch/mechanize/trunk/test/test_mechanize.py	(original)
+++ wwwsearch/mechanize/trunk/test/test_mechanize.py	Sun Jun 11 19:25:22 2006
@@ -633,6 +633,51 @@
             r = b.open(url)
             self.assertEqual([link.absolute_url for link in b.links()], urls)
 
+    def test_set_cookie(self):
+        class CookieTestBrowser(TestBrowser):
+            default_features = list(TestBrowser.default_features)+["_cookies"]
+
+        # have to be visiting HTTP/HTTPS URL
+        url = "ftp://example.com/"
+        br = CookieTestBrowser()
+        r = mechanize.make_response(
+            "<html><head><title>Title</title></head><body></body></html>",
+            [("content-type", "text/html")],
+            url,
+            200, "OK",
+            )
+        br.add_handler(make_mock_handler()([("http_open", r)]))
+        handler = br._ua_handlers["_cookies"]
+        cj = handler.cookiejar
+        self.assertRaises(mechanize.BrowserStateError,
+                          br.set_cookie, "foo=bar")
+        self.assertEqual(len(cj), 0)
+
+
+        url = "http://example.com/"
+        br = CookieTestBrowser()
+        r = mechanize.make_response(
+            "<html><head><title>Title</title></head><body></body></html>",
+            [("content-type", "text/html")],
+            url,
+            200, "OK",
+            )
+        br.add_handler(make_mock_handler()([("http_open", r)]))
+        handler = br._ua_handlers["_cookies"]
+        cj = handler.cookiejar
+
+        # have to be visiting a URL
+        self.assertRaises(mechanize.BrowserStateError,
+                          br.set_cookie, "foo=bar")
+        self.assertEqual(len(cj), 0)
+
+
+        # normal case
+        br.open(url)
+        br.set_cookie("foo=bar")
+        self.assertEqual(len(cj), 1)
+        self.assertEqual(cj._cookies["example.com"]["/"]["foo"].value, "bar")
+
 
 class ResponseTests(TestCase):
     def test_set_response(self):


More information about the wwwsearch-commits mailing list