Skip to content

Commit 3791893

Browse files
committed
feat: separate tests
1 parent cc3d35f commit 3791893

2 files changed

Lines changed: 113 additions & 112 deletions

File tree

streamyjson/_json_parse.py

Lines changed: 0 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -150,115 +150,3 @@ def parse_json(s: str, strict_mode=False) -> dict:
150150
.consume(s)
151151
.get()
152152
)
153-
154-
def run_tests():
155-
def test_streaming_json_parser():
156-
parser = StreamingJsonParser()
157-
parser.consume('{"foo": \n "bar"}asd')
158-
assert parser.get() == {"foo": "bar"}
159-
160-
def test_streaming_json_parser2():
161-
parser = StreamingJsonParser()
162-
for c in '{"foo": "bar"}':
163-
parser.consume(c)
164-
assert parser.get() == {"foo": "bar"}
165-
166-
def test_chunked_streaming_json_parser():
167-
parser = StreamingJsonParser()
168-
parser.consume('{"foo":')
169-
parser.consume('"bar')
170-
assert parser.get() == {"foo": "bar"}
171-
172-
def test_partial_streaming_json_parser():
173-
parser = StreamingJsonParser()
174-
parser.consume('{"fo\\o": "bar')
175-
assert parser.get() == {"fo\\o": "bar"}
176-
177-
def test3():
178-
parser = StreamingJsonParser()
179-
parser.consume('{}')
180-
assert parser.get() == {}
181-
182-
def test4():
183-
parser = StreamingJsonParser()
184-
parser.consume('{"foo": {"bar":"')
185-
assert parser.get() == {"foo": {"bar":""}}
186-
187-
def test5():
188-
parser = StreamingJsonParser()
189-
parser.consume('{"foo": {"ba')
190-
assert parser.get() == {"foo": {}}
191-
192-
def test6():
193-
parser = StreamingJsonParser()
194-
parser.consume('{"foo": {"bar":"lol", "bar2":"tr')
195-
assert parser.get() == {"foo": {"bar": "lol", "bar2":"tr"}}
196-
197-
def test_deep_nesting():
198-
"""Test parsing JSON with deep (3-level) nesting."""
199-
parser = StreamingJsonParser()
200-
parser.consume('{"level1": {"level2": {"level3": "deep value"}}}')
201-
assert parser.get() == {"level1": {"level2": {"level3": "deep value"}}}
202-
203-
def test_partial_deep_nesting():
204-
"""Test parsing a partially complete JSON with deep nesting."""
205-
parser = StreamingJsonParser()
206-
parser.consume('{"level1": {"level2": {"level3": "partial val')
207-
assert parser.get() == {"level1": {"level2": {"level3": "partial val"}}}
208-
209-
def test_multiple_nested_objects():
210-
"""Test parsing JSON with multiple nested objects at the same level."""
211-
parser = StreamingJsonParser()
212-
parser.consume('{"obj1": { "nested1": "value1"}, "obj2": {"nested2": "value2"}, "obj3": {"nested3": "value3"}}')
213-
expected = {
214-
"obj1": {"nested1": "value1"},
215-
"obj2": {"nested2": "value2"},
216-
"obj3": {"nested3": "value3"}
217-
}
218-
assert parser.get() == expected
219-
220-
def test_mixed_complete_partial_objects():
221-
"""Test parsing JSON with both complete and partial nested objects."""
222-
parser = StreamingJsonParser()
223-
parser.consume('{"complete": {"key1": "val1", "key2": "val2"}, "partial": {"key3": "val3", "key4": "incomplete')
224-
expected = {
225-
"complete": {"key1": "val1", "key2": "val2"},
226-
"partial": {"key3": "val3", "key4": "incomplete"}
227-
}
228-
assert parser.get() == expected
229-
230-
def test_complex_incremental_parsing():
231-
parser = StreamingJsonParser()
232-
parser.consume('{')
233-
assert parser.get() == {}, parser.get()
234-
235-
# Add first key and start nested object
236-
parser.consume('"outer1": {')
237-
assert parser.get() == {"outer1": {}}, parser.get()
238-
239-
# Add key-value inside first nested object
240-
parser.consume('"inner1": "value1"')
241-
assert parser.get() == {"outer1": {"inner1": "value1"}}, parser.get()
242-
243-
# Close first nested object, start second key and nested object
244-
parser.consume('}, "outer2": {')
245-
assert parser.get() == {"outer1": {"inner1": "value1"}, "outer2": {}}, parser.get()
246-
247-
# Start deep nesting in second object
248-
parser.consume('"inner2": {"deepkey": "')
249-
assert parser.get() == {"outer1": {"inner1": "value1"}, "outer2": {"inner2": {"deepkey": ""}}}, parser.get()
250-
251-
# Partially complete deep nested value
252-
parser.consume('deepvalue')
253-
assert parser.get() == {"outer1": {"inner1": "value1"}, "outer2": {"inner2": {"deepkey": "deepvalue"}}}, parser.get()
254-
255-
# Complete all objects
256-
parser.consume('"}}}')
257-
assert parser.get() == {"outer1": {"inner1": "value1"}, "outer2": {"inner2": {"deepkey": "deepvalue"}}}, parser.get()
258-
259-
for name, f in locals().items():
260-
f()
261-
print(f'[v] {name}')
262-
263-
if __name__ == '__main__':
264-
run_tests()

tests/test.py

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
from streamyjson import StreamingJsonParser
2+
3+
def run_tests():
4+
def test_streaming_json_parser():
5+
parser = StreamingJsonParser()
6+
parser.consume('{"foo": \n "bar"}asd')
7+
assert parser.get() == {"foo": "bar"}
8+
9+
def test_streaming_json_parser2():
10+
parser = StreamingJsonParser()
11+
for c in '{"foo": "bar"}':
12+
parser.consume(c)
13+
assert parser.get() == {"foo": "bar"}
14+
15+
def test_chunked_streaming_json_parser():
16+
parser = StreamingJsonParser()
17+
parser.consume('{"foo":')
18+
parser.consume('"bar')
19+
assert parser.get() == {"foo": "bar"}
20+
21+
def test_partial_streaming_json_parser():
22+
parser = StreamingJsonParser()
23+
parser.consume('{"fo\\o": "bar')
24+
assert parser.get() == {"fo\\o": "bar"}
25+
26+
def test3():
27+
parser = StreamingJsonParser()
28+
parser.consume('{}')
29+
assert parser.get() == {}
30+
31+
def test4():
32+
parser = StreamingJsonParser()
33+
parser.consume('{"foo": {"bar":"')
34+
assert parser.get() == {"foo": {"bar":""}}
35+
36+
def test5():
37+
parser = StreamingJsonParser()
38+
parser.consume('{"foo": {"ba')
39+
assert parser.get() == {"foo": {}}
40+
41+
def test6():
42+
parser = StreamingJsonParser()
43+
parser.consume('{"foo": {"bar":"lol", "bar2":"tr')
44+
assert parser.get() == {"foo": {"bar": "lol", "bar2":"tr"}}
45+
46+
def test_deep_nesting():
47+
"""Test parsing JSON with deep (3-level) nesting."""
48+
parser = StreamingJsonParser()
49+
parser.consume('{"level1": {"level2": {"level3": "deep value"}}}')
50+
assert parser.get() == {"level1": {"level2": {"level3": "deep value"}}}
51+
52+
def test_partial_deep_nesting():
53+
"""Test parsing a partially complete JSON with deep nesting."""
54+
parser = StreamingJsonParser()
55+
parser.consume('{"level1": {"level2": {"level3": "partial val')
56+
assert parser.get() == {"level1": {"level2": {"level3": "partial val"}}}
57+
58+
def test_multiple_nested_objects():
59+
"""Test parsing JSON with multiple nested objects at the same level."""
60+
parser = StreamingJsonParser()
61+
parser.consume('{"obj1": { "nested1": "value1"}, "obj2": {"nested2": "value2"}, "obj3": {"nested3": "value3"}}')
62+
expected = {
63+
"obj1": {"nested1": "value1"},
64+
"obj2": {"nested2": "value2"},
65+
"obj3": {"nested3": "value3"}
66+
}
67+
assert parser.get() == expected
68+
69+
def test_mixed_complete_partial_objects():
70+
"""Test parsing JSON with both complete and partial nested objects."""
71+
parser = StreamingJsonParser()
72+
parser.consume('{"complete": {"key1": "val1", "key2": "val2"}, "partial": {"key3": "val3", "key4": "incomplete')
73+
expected = {
74+
"complete": {"key1": "val1", "key2": "val2"},
75+
"partial": {"key3": "val3", "key4": "incomplete"}
76+
}
77+
assert parser.get() == expected
78+
79+
def test_complex_incremental_parsing():
80+
parser = StreamingJsonParser()
81+
parser.consume('{')
82+
assert parser.get() == {}, parser.get()
83+
84+
# Add first key and start nested object
85+
parser.consume('"outer1": {')
86+
assert parser.get() == {"outer1": {}}, parser.get()
87+
88+
# Add key-value inside first nested object
89+
parser.consume('"inner1": "value1"')
90+
assert parser.get() == {"outer1": {"inner1": "value1"}}, parser.get()
91+
92+
# Close first nested object, start second key and nested object
93+
parser.consume('}, "outer2": {')
94+
assert parser.get() == {"outer1": {"inner1": "value1"}, "outer2": {}}, parser.get()
95+
96+
# Start deep nesting in second object
97+
parser.consume('"inner2": {"deepkey": "')
98+
assert parser.get() == {"outer1": {"inner1": "value1"}, "outer2": {"inner2": {"deepkey": ""}}}, parser.get()
99+
100+
# Partially complete deep nested value
101+
parser.consume('deepvalue')
102+
assert parser.get() == {"outer1": {"inner1": "value1"}, "outer2": {"inner2": {"deepkey": "deepvalue"}}}, parser.get()
103+
104+
# Complete all objects
105+
parser.consume('"}}}')
106+
assert parser.get() == {"outer1": {"inner1": "value1"}, "outer2": {"inner2": {"deepkey": "deepvalue"}}}, parser.get()
107+
108+
for name, f in locals().items():
109+
f()
110+
print(f'[v] {name}')
111+
112+
if __name__ == '__main__':
113+
run_tests()

0 commit comments

Comments
 (0)