forked from robotframework/robotframework
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_jsonwriter.py
More file actions
99 lines (76 loc) · 3 KB
/
test_jsonwriter.py
File metadata and controls
99 lines (76 loc) · 3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
try:
import json
except ImportError:
try:
import simplejson as json
except ImportError:
json = None
import unittest
from robot.utils import StringIO, PY3
from robot.utils.asserts import assert_equal, assert_raises
from robot.htmldata.jsonwriter import JsonDumper
if PY3:
long = int
class TestJsonDumper(unittest.TestCase):
def _dump(self, data):
output = StringIO()
JsonDumper(output).dump(data)
return output.getvalue()
def _test(self, data, expected):
assert_equal(self._dump(data), expected)
def test_dump_string(self):
self._test('', '""')
self._test('hello world', '"hello world"')
self._test('123', '"123"')
def test_dump_non_ascii_string(self):
self._test(u'hyv\xe4', u'"hyv\xe4"')
def test_escape_string(self):
self._test('"-\\-\n-\t-\r', '"\\"-\\\\-\\n-\\t-\\r"')
def test_escape_closing_tags(self):
self._test('<script><></script>', '"<script><>\\x3c/script>"')
def test_dump_boolean(self):
self._test(True, 'true')
self._test(False, 'false')
def test_dump_integer(self):
self._test(12, '12')
self._test(-12312, '-12312')
self._test(0, '0')
self._test(1, '1')
def test_dump_long(self):
self._test(long(12345678901234567890), '12345678901234567890')
self._test(long(0), '0')
def test_dump_list(self):
self._test([1, 2, True, 'hello', 'world'], '[1,2,true,"hello","world"]')
self._test(['*nes"ted', [1, 2, [4]]], '["*nes\\"ted",[1,2,[4]]]')
def test_dump_tuple(self):
self._test(('hello', '*world'), '["hello","*world"]')
self._test((1, 2, (3, 4)), '[1,2,[3,4]]')
def test_dump_dictionary(self):
self._test({'key': 1}, '{"key":1}')
self._test({'nested': [-1, {42: None}]}, '{"nested":[-1,{42:null}]}')
def test_dictionaries_are_sorted(self):
self._test({'key': 1, 'hello': ['wor', 'ld'], 'z': 'a', 'a': 'z'},
'{"a":"z","hello":["wor","ld"],"key":1,"z":"a"}')
def test_dump_none(self):
self._test(None, 'null')
def test_json_dump_mapping(self):
output = StringIO()
dumper = JsonDumper(output)
mapped1 = object()
mapped2 = 'string'
dumper.dump([mapped1, [mapped2, {mapped2: mapped1}]],
mapping={mapped1: '1', mapped2: 'a'})
assert_equal(output.getvalue(), '[1,[a,{a:1}]]')
assert_raises(ValueError, dumper.dump, [mapped1])
if json:
def test_against_standard_json(self):
data = ['\\\'\"\r\t\n' + ''.join(chr(i) for i in range(32, 127)),
{'A': 1, 'b': 2, 'C': ()}, None, (1, 2, 3)]
try:
expected = json.dumps(data, sort_keys=True,
separators=(',', ':'))
except UnicodeError:
return # http://ironpython.codeplex.com/workitem/32331
self._test(data, expected)
if __name__ == '__main__':
unittest.main()