From 43bc6d0c98bdaa08cb2a158c770fbaa641417ccc Mon Sep 17 00:00:00 2001 From: Jakub Roztocil Date: Sat, 26 Apr 2014 20:10:15 +0200 Subject: [PATCH] Fixed and added tests for --verbose with unicode headers. --- httpie/models.py | 6 +++++- tests/test_unicode.py | 38 +++++++++++++++++++++++++++++++++++--- 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/httpie/models.py b/httpie/models.py index a91fd696..5334e55a 100644 --- a/httpie/models.py +++ b/httpie/models.py @@ -180,8 +180,12 @@ class HTTPRequest(HTTPMessage): for name, value in headers.items()] headers.insert(0, request_line) + headers = '\r\n'.join(headers).strip() - return '\r\n'.join(headers).strip() + if isinstance(headers, bytes): + # Python < 3 + headers = headers.decode('utf8') + return headers @property def encoding(self): diff --git a/tests/test_unicode.py b/tests/test_unicode.py index 58c39a7b..d5a267ab 100644 --- a/tests/test_unicode.py +++ b/tests/test_unicode.py @@ -10,36 +10,68 @@ from tests.fixtures import UNICODE class TestUnicode: def test_unicode_headers(self): - r = http('GET', httpbin('/headers'), u'Test:%s' % UNICODE) + r = http('--verbose', httpbin('/headers'), u'Test:%s' % UNICODE) assert HTTP_OK in r assert r.json['headers']['Test'] == UNICODE + def test_unicode_headers_verbose(self): + r = http('--verbose', httpbin('/headers'), u'Test:%s' % UNICODE) + assert HTTP_OK in r + assert UNICODE in r + def test_unicode_form_item(self): r = http('--form', 'POST', httpbin('/post'), u'test=%s' % UNICODE) assert HTTP_OK in r assert r.json['form'] == {'test': UNICODE} + def test_unicode_form_item_verbose(self): + r = http('--verbose', '--form', + 'POST', httpbin('/post'), u'test=%s' % UNICODE) + assert HTTP_OK in r + assert UNICODE in r + def test_unicode_json_item(self): r = http('--json', 'POST', httpbin('/post'), u'test=%s' % UNICODE) assert HTTP_OK in r assert r.json['json'] == {'test': UNICODE} + def test_unicode_json_item_verbose(self): + r = http('--verbose', '--json', + 'POST', httpbin('/post'), u'test=%s' % UNICODE) + assert HTTP_OK in r + assert UNICODE in r + def test_unicode_raw_json_item(self): - r = http('--json', 'POST', httpbin('/post'), + r = http('--verbose', + '--json', 'POST', httpbin('/post'), + u'test:={ "%s" : [ "%s" ] }' % (UNICODE, UNICODE)) + + def test_unicode_raw_json_item_verbose(self): + r = http('--verbose', + '--json', 'POST', httpbin('/post'), u'test:={ "%s" : [ "%s" ] }' % (UNICODE, UNICODE)) assert HTTP_OK in r - assert r.json['json'] == {'test': {UNICODE: [UNICODE]}} + assert UNICODE in r def test_unicode_url_query_arg_item(self): r = http(httpbin('/get'), u'test==%s' % UNICODE) assert HTTP_OK in r assert r.json['args'] == {'test': UNICODE}, r + def test_unicode_url_query_arg_item_verbose(self): + r = http('--verbose', httpbin('/get'), u'test==%s' % UNICODE) + assert HTTP_OK in r + assert UNICODE in r + def test_unicode_url(self): r = http(httpbin(u'/get?test=' + UNICODE)) assert HTTP_OK in r assert r.json['args'] == {'test': UNICODE} + # def test_unicode_url_verbose(self): + # r = http(httpbin('--verbose', u'/get?test=' + UNICODE)) + # assert HTTP_OK in r + def test_unicode_basic_auth(self): # it doesn't really authenticate us because httpbin # doesn't interpret the utf8-encoded auth