def test_render_dict_abc_obj(self): class Dict(MutableMapping): def __init__(self): self._dict = {} def __getitem__(self, key): return self._dict.__getitem__(key) def __setitem__(self, key, value): return self._dict.__setitem__(key, value) def __delitem__(self, key): return self._dict.__delitem__(key) def __iter__(self): return self._dict.__iter__() def __len__(self): return self._dict.__len__() def keys(self): return self._dict.keys() x = Dict() x['key'] = 'string value' x[2] = 3 ret = JSONRenderer().render(x) data = json.loads(ret.decode('utf-8')) self.assertEqual(data, {'key': 'string value', '2': 3})
def test_compact(self): renderer = JSONRenderer() data = OrderedDict([('a', 1), ('b', 2)]) context = {'indent': 4} assert (renderer.render( data, renderer_context=context) == b'{\n "a": 1,\n "b": 2\n}')
def test_proper_encoding(self): obj = {'countries': ['United Kingdom', 'France', 'España']} renderer = JSONRenderer() content = renderer.render(obj, 'application/json') self.assertEqual( content, '{"countries":["United Kingdom","France","España"]}'.encode( 'utf-8'))
def test_u2028_u2029(self): # The \u2028 and \u2029 characters should be escaped, # even when the non-escaping unicode representation is used. # Regression test for #2169 obj = {'should_escape': '\u2028\u2029'} renderer = JSONRenderer() content = renderer.render(obj, 'application/json') self.assertEqual(content, '{"should_escape":"\\u2028\\u2029"}'.encode('utf-8'))
def test_with_content_type_args(self): """ Test JSON rendering with additional content type arguments supplied. """ obj = {'foo': ['bar', 'baz']} renderer = JSONRenderer() content = renderer.render(obj, 'application/json; indent=2') self.assertEqual(strip_trailing_whitespace(content.decode('utf-8')), _indented_repr)
def test_without_content_type_args(self): """ Test basic JSON rendering. """ obj = {'foo': ['bar', 'baz']} renderer = JSONRenderer() content = renderer.render(obj, 'application/json') # Fix failing test case which depends on version of JSON library. self.assertEqual(content.decode('utf-8'), _flat_repr)
def test_float_strictness(self): renderer = JSONRenderer() # Default to strict for value in [float('inf'), float('-inf'), float('nan')]: with pytest.raises(ValueError): renderer.render(value) renderer.strict = False assert renderer.render(float('inf')) == b'Infinity' assert renderer.render(float('-inf')) == b'-Infinity' assert renderer.render(float('nan')) == b'NaN'
def test_render_obj_with_getitem(self): class DictLike(object): def __init__(self): self._dict = {} def set(self, value): self._dict = dict(value) def __getitem__(self, key): return self._dict[key] x = DictLike() x.set({'a': 1, 'b': 'string'}) with self.assertRaises(TypeError): JSONRenderer().render(x)
def test_long_form(self): renderer = JSONRenderer() renderer.compact = False data = OrderedDict([('a', 1), ('b', 2)]) assert renderer.render(data) == b'{"a": 1, "b": 2}'
def test_indented(self): renderer = JSONRenderer() data = OrderedDict([('a', 1), ('b', 2)]) assert renderer.render(data) == b'{"a":1,"b":2}'
def test_render_queryset_values_list(self): o = DummyTestModel.objects.create(name='dummy') qs = DummyTestModel.objects.values_list('id', 'name') ret = JSONRenderer().render(qs) data = json.loads(ret.decode('utf-8')) self.assertEqual(data, [[o.id, o.name]])
def test_render_lazy_strings(self): """ JSONRenderer should deal with lazy translated strings. """ ret = JSONRenderer().render(_('test')) self.assertEqual(ret, b'"test"')