raise
+class GetArgumentHandler(RequestHandler):
+ def get(self):
+ self.write(self.get_argument("foo", "default"))
+
+
# This test is shared with wsgi_test.py
class WSGISafeWebTest(AsyncHTTPTestCase):
COOKIE_SECRET = "WebTest.COOKIE_SECRET"
url("/multi_header", MultiHeaderHandler),
url("/redirect", RedirectHandler),
url("/header_injection", HeaderInjectionHandler),
+ url("/get_argument", GetArgumentHandler),
]
return urls
response = self.fetch("/header_injection")
self.assertEqual(response.body, b("ok"))
+ def test_get_argument(self):
+ response = self.fetch("/get_argument?foo=bar")
+ self.assertEqual(response.body, b("bar"))
+ response = self.fetch("/get_argument?foo=")
+ self.assertEqual(response.body, b(""))
+ response = self.fetch("/get_argument")
+ self.assertEqual(response.body, b("default"))
+
class NonWSGIWebTests(AsyncHTTPTestCase):
def get_app(self):
self.query = environ.get("QUERY_STRING", "")
if self.query:
self.uri += "?" + self.query
- arguments = parse_qs_bytes(native_str(self.query))
- for name, values in arguments.iteritems():
- values = [v for v in values if v]
- if values:
- self.arguments[name] = values
+ self.arguments = parse_qs_bytes(native_str(self.query),
+ keep_blank_values=True)
self.version = "HTTP/1.1"
self.headers = httputil.HTTPHeaders()
if environ.get("CONTENT_TYPE"):
* The command-line interface to `tornado.testing.main` now supports
additional arguments from the underlying `unittest` module:
``verbose``, ``quiet``, ``failfast``, ``catch``, ``buffer``.
+* Empty HTTP request arguments are no longer ignored. This applies to
+ ``HTTPRequest.arguments`` and ``RequestHandler.get_argument[s]``
+ in WSGI and non-WSGI modes.