Example #1
0
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)
Example #2
0
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
Example #3
0
def test_hexadecimal_load():
    json_string = """
    {
    positiveHex: 0xdecaf,
    negativeHex: -0xC0FFEE,}"""
    assert dumps(loads(json_string, loader=ModelLoader()),
                 dumper=ModelDumper()) == json_string
Example #4
0
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
Example #5
0
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'}
Example #6
0
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
Example #7
0
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"
    }
Example #8
0
def test_hexadecimal_load():
    json_string = """
    {
    positiveHex: 0xdecaf,
    negativeHex: -0xC0FFEE ,}"""
    assert loads(json_string) == {
        "positiveHex": 0xDECAF,
        "negativeHex": -0xC0FFEE
    }
Example #9
0
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",
    }
Example #10
0
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,
    }
Example #11
0
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,
    }
Example #12
0
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)
Example #13
0
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
Example #14
0
def test_nested_object():
    json_string = """{"foo": {"bacon": "eggs"}}"""
    assert dumps(loads(json_string, loader=ModelLoader()),
                 dumper=ModelDumper()) == json_string
Example #15
0
def test_array_with_multiline_comment():
    json_string = """[ /* foo bar
    */ "foo", "bar"
    ]"""
    assert dumps(loads(json_string, loader=ModelLoader()),
                 dumper=ModelDumper()) == json_string
Example #16
0
def test_array_load_with_line_comment():
    json_string = """[ // line comment
    "foo", "bar"
    ]"""
    assert dumps(loads(json_string, loader=ModelLoader()),
                 dumper=ModelDumper()) == json_string
Example #17
0
def test_object_with_multiline_comment():
    json_string = """{ /* foo bar
    */ "foo": "bar" // Foobar
    }"""
    assert dumps(loads(json_string, loader=ModelLoader()),
                 dumper=ModelDumper()) == json_string
Example #18
0
def test_object_load_with_line_comment():
    json_string = """{ // line comment
    "foo": "bar"
    }"""
    assert dumps(loads(json_string, loader=ModelLoader()),
                 dumper=ModelDumper()) == json_string
Example #19
0
def test_round_trip_model_load_dump(json_string):
    assert dumps(loads(json_string, loader=ModelLoader()),
                 dumper=ModelDumper()) == json_string
Example #20
0
def test_load_empty_array_with_comments():
    json_string = "[ // foo \n]"
    assert dumps(loads(json_string, loader=ModelLoader()),
                 dumper=ModelDumper()) == json_string
Example #21
0
def test_modelize_nan():
    obj = math.nan
    assert loads(dumps(modelize(obj), dumper=ModelDumper())) is obj
Example #22
0
def test_line_continuations():
    json_string = r"""'Hello \
world!'"""
    assert dumps(loads(json_string, loader=ModelLoader()),
                 dumper=ModelDumper()) == json_string
Example #23
0
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
Example #24
0
def test_empty_array():
    json_string = "[]"
    assert dumps(loads(json_string, loader=ModelLoader()),
                 dumper=ModelDumper()) == json_string
Example #25
0
def test_escape_sequence_strings():
    json_string = r"""'\A\C\/\D\C'"""
    assert dumps(loads(json_string, loader=ModelLoader()),
                 dumper=ModelDumper()) == json_string
Example #26
0
def test_load_empty_array_with_whitespace():
    json_string = "{   }"
    assert dumps(loads(json_string, loader=ModelLoader()),
                 dumper=ModelDumper()) == json_string
Example #27
0
def test_modelize_objects(obj):
    assert loads(dumps(modelize(obj), dumper=ModelDumper())) == obj
Example #28
0
def test_load_empty_object_wtih_whitespace():
    json_string = "[   ]"
    assert dumps(loads(json_string, loader=ModelLoader()),
                 dumper=ModelDumper()) == json_string
Example #29
0
def test_modelize_double_quote_string():
    s = "'"
    assert loads(dumps(modelize(s), dumper=ModelDumper())) == s
Example #30
0
def test_load_empty_object_with_comments():
    json_string = "{ // foo \n}"
    assert dumps(loads(json_string, loader=ModelLoader()),
                 dumper=ModelDumper()) == json_string