def test_known_type_in_wsc_raises_error(): class Foo: ... f = Foo() model = loads('{foo: "bar"}', loader=ModelLoader()) model.value.key_value_pairs[0].key.wsc_before.append(f) with pytest.raises(ValueError): ModelDumper().dump(model) model = loads('{foo: "bar"}', loader=ModelLoader()) model.value.key_value_pairs[0].key.wsc_after.append(f) with pytest.raises(ValueError): ModelDumper().dump(model)
def test_number_literals_inf_nan(): json_string = """{ "positiveInfinity": Infinity, "negativeInfinity": -Infinity, "notANumber": NaN,}""" assert dumps(loads(json_string, loader=ModelLoader()), dumper=ModelDumper()) == json_string
def test_hexadecimal_load(): json_string = """ { positiveHex: 0xdecaf, negativeHex: -0xC0FFEE,}""" assert dumps(loads(json_string, loader=ModelLoader()), dumper=ModelDumper()) == json_string
def test_escape_sequences(): json_string = r"""{ "foo": "foo\nbar\nbaz", "bar": "foo\\bar\\baz", "baz": "foo\tbar\tbaz"}""" assert dumps(loads(json_string, loader=ModelLoader()), dumper=ModelDumper()) == json_string
def test_load_object_with_additional_comments(): json_string = """{ "foo": /* comment */ "bar", // another comment bacon /* breakfast */: "eggs" // better than spam } """ assert loads(json_string) == {'foo': 'bar', 'bacon': 'eggs'}
def test_number_literals(): json_string = """{ "integer": 123, "withFractionPart": 123.456, "onlyFractionPart": .456, "withExponent": 123e-2}""" assert dumps(loads(json_string, loader=ModelLoader()), dumper=ModelDumper()) == json_string
def test_escape_unicode(): json_string = """ { sig\\u03A3ma: "\\u03A3 is the sum of all things" } """ assert loads(json_string) == { "sig\u03A3ma": "\u03A3 is the sum of all things" }
def test_hexadecimal_load(): json_string = """ { positiveHex: 0xdecaf, negativeHex: -0xC0FFEE ,}""" assert loads(json_string) == { "positiveHex": 0xDECAF, "negativeHex": -0xC0FFEE }
def test_escape_sequences(): json_string = r"""{ "foo": "foo\nbar\nbaz", "bar": "foo\\bar\\baz", "baz": "foo\tbar\tbaz"}""" assert loads(json_string) == { "foo": "foo\nbar\nbaz", "bar": "foo\\bar\\baz", "baz": "foo\tbar\tbaz", }
def test_number_literals_inf_nan(): json_string = """{ "positiveInfinity": Infinity, "negativeInfinity": -Infinity, "notANumber": NaN,}""" assert loads(json_string) == { "positiveInfinity": math.inf, "negativeInfinity": -math.inf, "notANumber": math.nan, }
def test_number_literals(): json_string = """{ "integer": 123, "withFractionPart": 123.456, "onlyFractionPart": .456, "withExponent": 123e-2}""" assert loads(json_string) == { "integer": 123, "withFractionPart": 123.456, "onlyFractionPart": 0.456, "withExponent": 123e-2, }
def test_illegal_line_terminator_error_message(json_string): with pytest.raises(JSON5DecodeError) as exc_info: loads(json_string) exc_message = str(exc_info.value) exc_lineno_match = re.search('line (\d+)', exc_message) if exc_lineno_match: exc_lineno = int(exc_lineno_match.groups()[0]) else: exc_lineno = None exc_col_match = re.search('column (\d+)', exc_message) if exc_col_match: exc_col = int(exc_col_match.groups()[0]) else: exc_col = None exc_index_match = re.search('char (\d+)', exc_message) if exc_index_match: exc_index = int(exc_index_match.groups()[0]) else: exc_index = None assert (3, 7, 23) == (exc_lineno, exc_col, exc_index)
def test_single_quote_with_escape_single_quote(): json_string = r"""{'fo\'o': 'bar'}""" assert dumps(loads(json_string, loader=ModelLoader()), dumper=ModelDumper()) == json_string
def test_nested_object(): json_string = """{"foo": {"bacon": "eggs"}}""" assert dumps(loads(json_string, loader=ModelLoader()), dumper=ModelDumper()) == json_string
def test_array_with_multiline_comment(): json_string = """[ /* foo bar */ "foo", "bar" ]""" assert dumps(loads(json_string, loader=ModelLoader()), dumper=ModelDumper()) == json_string
def test_array_load_with_line_comment(): json_string = """[ // line comment "foo", "bar" ]""" assert dumps(loads(json_string, loader=ModelLoader()), dumper=ModelDumper()) == json_string
def test_object_with_multiline_comment(): json_string = """{ /* foo bar */ "foo": "bar" // Foobar }""" assert dumps(loads(json_string, loader=ModelLoader()), dumper=ModelDumper()) == json_string
def test_object_load_with_line_comment(): json_string = """{ // line comment "foo": "bar" }""" assert dumps(loads(json_string, loader=ModelLoader()), dumper=ModelDumper()) == json_string
def test_round_trip_model_load_dump(json_string): assert dumps(loads(json_string, loader=ModelLoader()), dumper=ModelDumper()) == json_string
def test_load_empty_array_with_comments(): json_string = "[ // foo \n]" assert dumps(loads(json_string, loader=ModelLoader()), dumper=ModelDumper()) == json_string
def test_modelize_nan(): obj = math.nan assert loads(dumps(modelize(obj), dumper=ModelDumper())) is obj
def test_line_continuations(): json_string = r"""'Hello \ world!'""" assert dumps(loads(json_string, loader=ModelLoader()), dumper=ModelDumper()) == json_string
def test_double_quote_with_escape_double_quote(): json_string = r"""{"fo\"o": "bar"}""" assert dumps(loads(json_string, loader=ModelLoader()), dumper=ModelDumper()) == json_string
def test_empty_array(): json_string = "[]" assert dumps(loads(json_string, loader=ModelLoader()), dumper=ModelDumper()) == json_string
def test_escape_sequence_strings(): json_string = r"""'\A\C\/\D\C'""" assert dumps(loads(json_string, loader=ModelLoader()), dumper=ModelDumper()) == json_string
def test_load_empty_array_with_whitespace(): json_string = "{ }" assert dumps(loads(json_string, loader=ModelLoader()), dumper=ModelDumper()) == json_string
def test_modelize_objects(obj): assert loads(dumps(modelize(obj), dumper=ModelDumper())) == obj
def test_load_empty_object_wtih_whitespace(): json_string = "[ ]" assert dumps(loads(json_string, loader=ModelLoader()), dumper=ModelDumper()) == json_string
def test_modelize_double_quote_string(): s = "'" assert loads(dumps(modelize(s), dumper=ModelDumper())) == s
def test_load_empty_object_with_comments(): json_string = "{ // foo \n}" assert dumps(loads(json_string, loader=ModelLoader()), dumper=ModelDumper()) == json_string