def test_comments(self): document = dedent(""" # Top level comment. { # Nested comment "hobbies": [1, 2, 3] } """) results = parsers.parse_json(document) self.assertEqual(1, len(results)) self.assertEqual([dict(hobbies=[1, 2, 3])], parsers.parse_json(parsers.encode_json(results[0])))
def test_single(self): document = dedent(""" # An simple example with a single Bob. { "typename": "pants_test.engine.exp.test_parsers.Bob", "hobbies": [1, 2, 3] } """) results = parsers.parse_json(document) self.assertEqual(1, len(results)) self.assertEqual([Bob(hobbies=[1, 2, 3])], parsers.parse_json(parsers.encode_json(results[0]))) self.assertEqual('pants_test.engine.exp.test_parsers.Bob', results[0]._asdict()['typename'])
def test_shallow_encoding(self): expected_json = dedent(""" { "name": "bob", "type_alias": "pants_test.engine.exp.test_parsers.Bob", "friend": { "name": "bill", "type_alias": "pants_test.engine.exp.test_parsers.Bob" }, "relative": "::an opaque address::" } """).strip() self.assertEqual(json.dumps(json.loads(expected_json)), parsers.encode_json(self.bob, inline=False))
def test_symbol_table(self): symbol_table = {'bob': Bob} document = dedent(""" # An simple example with a single Bob. { "typename": "bob", "hobbies": [1, 2, 3] } """) results = parsers.parse_json(document, symbol_table=symbol_table) self.assertEqual(1, len(results)) self.assertEqual([Bob(hobbies=[1, 2, 3])], parsers.parse_json(parsers.encode_json(results[0]), symbol_table=symbol_table)) self.assertEqual('bob', results[0]._asdict()['typename'])
def test_nested_single(self): document = dedent(""" # An example with nested Bobs. { "typename": "pants_test.engine.exp.test_parsers.Bob", "uncle": { "typename": "pants_test.engine.exp.test_parsers.Bob", "age": 42 }, "hobbies": [1, 2, 3] } """) results = parsers.parse_json(document) self.assertEqual(1, len(results)) self.assertEqual([Bob(uncle=Bob(age=42), hobbies=[1, 2, 3])], parsers.parse_json(parsers.encode_json(results[0])))
def test_nested_deep(self): document = dedent(""" # An example with deeply nested Bobs. { "typename": "pants_test.engine.exp.test_parsers.Bob", "configs": [ { "mappings": { "uncle": { "typename": "pants_test.engine.exp.test_parsers.Bob", "age": 42 } } } ] } """) results = parsers.parse_json(document) self.assertEqual(1, len(results)) self.assertEqual([Bob(configs=[dict(mappings=dict(uncle=Bob(age=42)))])], parsers.parse_json(parsers.encode_json(results[0])))
def test_nested_many(self): document = dedent(""" # An example with many nested Bobs. { "typename": "pants_test.engine.exp.test_parsers.Bob", "cousins": [ { "typename": "pants_test.engine.exp.test_parsers.Bob", "name": "Jake", "age": 42 }, { "typename": "pants_test.engine.exp.test_parsers.Bob", "name": "Jane", "age": 37 } ] } """) results = parsers.parse_json(document) self.assertEqual(1, len(results)) self.assertEqual([Bob(cousins=[Bob(name='Jake', age=42), Bob(name='Jane', age=37)])], parsers.parse_json(parsers.encode_json(results[0])))
def round_trip(self, obj, symbol_table_cls=None): document = parsers.encode_json(obj, inline=True) return self.parse(document, symbol_table_cls=symbol_table_cls)
def round_trip(self, obj, symbol_table=None): document = parsers.encode_json(obj, inline=True) return self.parse(document, symbol_table=symbol_table)