@@ -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 ()
0 commit comments