httpie-cli/tests/test_output.py

187 lines
4.5 KiB
Python

from unittest import TestCase
from httpie import ExitStatus
from tests import (
TestEnvironment,
http, httpbin,
HTTP_OK, COLOR, CRLF
)
class VerboseFlagTest(TestCase):
def test_verbose(self):
r = http(
'--verbose',
'GET',
httpbin('/get'),
'test-header:__test__'
)
assert HTTP_OK in r
assert r.count('__test__') == 2
def test_verbose_form(self):
# https://github.com/jkbr/httpie/issues/53
r = http(
'--verbose',
'--form',
'POST',
httpbin('/post'),
'foo=bar',
'baz=bar'
)
assert HTTP_OK in r
assert 'foo=bar&baz=bar' in r
def test_verbose_json(self):
r = http(
'--verbose',
'POST',
httpbin('/post'),
'foo=bar',
'baz=bar'
)
assert HTTP_OK in r
assert '"baz": "bar"' in r # request
assert r'\"baz\": \"bar\"' in r # response
class PrettyOptionsTest(TestCase):
"""Test the --pretty flag handling."""
def test_pretty_enabled_by_default(self):
r = http(
'GET',
httpbin('/get'),
env=TestEnvironment(colors=256),
)
assert COLOR in r
def test_pretty_enabled_by_default_unless_stdout_redirected(self):
r = http(
'GET',
httpbin('/get')
)
assert COLOR not in r
def test_force_pretty(self):
r = http(
'--pretty=all',
'GET',
httpbin('/get'),
env=TestEnvironment(stdout_isatty=False, colors=256),
)
assert COLOR in r
def test_force_ugly(self):
r = http(
'--pretty=none',
'GET',
httpbin('/get'),
)
assert COLOR not in r
def test_subtype_based_pygments_lexer_match(self):
"""Test that media subtype is used if type/subtype doesn't
match any lexer.
"""
r = http(
'--print=B',
'--pretty=all',
httpbin('/post'),
'Content-Type:text/foo+json',
'a=b',
env=TestEnvironment(colors=256)
)
assert COLOR in r
def test_colors_option(self):
r = http(
'--print=B',
'--pretty=colors',
'GET',
httpbin('/get'),
'a=b',
env=TestEnvironment(colors=256),
)
#noinspection PyUnresolvedReferences
# Tests that the JSON data isn't formatted.
assert not r.strip().count('\n')
assert COLOR in r
def test_format_option(self):
r = http(
'--print=B',
'--pretty=format',
'GET',
httpbin('/get'),
'a=b',
env=TestEnvironment(colors=256),
)
#noinspection PyUnresolvedReferences
# Tests that the JSON data is formatted.
assert r.strip().count('\n') == 2
assert COLOR not in r
class LineEndingsTest(TestCase):
"""Test that CRLF is properly used in headers and
as the headers/body separator."""
def _validate_crlf(self, msg):
lines = iter(msg.splitlines(True))
for header in lines:
if header == CRLF:
break
assert header.endswith(CRLF), repr(header)
else:
self.fail('CRLF between headers and body not found in %r' % msg)
body = ''.join(lines)
assert CRLF not in body
return body
def test_CRLF_headers_only(self):
r = http(
'--headers',
'GET',
httpbin('/get')
)
body = self._validate_crlf(r)
assert not body, 'Garbage after headers: %r' % r
def test_CRLF_ugly_response(self):
r = http(
'--pretty=none',
'GET',
httpbin('/get')
)
self._validate_crlf(r)
def test_CRLF_formatted_response(self):
r = http(
'--pretty=format',
'GET',
httpbin('/get')
)
assert r.exit_status == ExitStatus.OK
self._validate_crlf(r)
def test_CRLF_ugly_request(self):
r = http(
'--pretty=none',
'--print=HB',
'GET',
httpbin('/get')
)
self._validate_crlf(r)
def test_CRLF_formatted_request(self):
r = http(
'--pretty=format',
'--print=HB',
'GET',
httpbin('/get')
)
self._validate_crlf(r)