def test_parse_dates_and_times(self):
     assert fred.loads('2000-10-30') == date(2000, 10, 30)
     assert fred.loads('12:52:21.123') == time(12, 52, 21, 123000)
     assert fred.loads('12:32:21.123456') == time(12, 32, 21, 123456)
     assert fred.loads('2001-12-21_12:32:21.123456') == datetime(
         2001, 12, 21, 12, 32, 21, 123456)
     assert fred.loads('2001-12-21T12:32:21.123456') == datetime(
         2001, 12, 21, 12, 32, 21, 123456)
     assert fred.loads('12:32:21.123456Z') == time(12, 32, 21, 123456,
                                                   timezone.utc)
     assert fred.loads('12:32:21.123+03:00') == time(
         12, 32, 21, 123000, timezone(timedelta(hours=3)))
    def test_enclosed_tag_parsing(self):
        src = '(tag)'
        assert list(lex(src)) == ['(', 'tag', ')']
        assert fred.loads(src) == Tag('tag')

        src = '(tag attr="value")'
        assert list(lex(src)) == ['(', 'tag', 'attr', '=', '"value"', ')']
        assert fred.loads(src) == Tag('tag', attr='value')

        src = '(tag $value)'
        assert list(lex(src)) == ['(', 'tag', '$value', ')']
        assert fred.loads(src) == Tag('tag', Symbol('value'))
        assert fred.loads('(tag "string")') == Tag('tag', 'string')

        src = '(tag attr="attr" $value)'
        assert list(
            lex(src)) == ['(', 'tag', 'attr', '=', '"attr"', '$value', ')']
        assert fred.loads(src) == Tag('tag', Symbol('value'), attr='attr')

        src = '(tag attr="attr" "value")'
        assert list(
            lex(src)) == ['(', 'tag', 'attr', '=', '"attr"', '"value"', ')']
        assert fred.loads(src) == Tag('tag', 'value', attr='attr')
Exemple #3
0
 def test_can_load_from_bytes(self):
     assert loads(b'42') == 42
     assert load(io.BytesIO(b'42')) == 42
Exemple #4
0
    def test_detect_invalid_encoding_in_documents(self):
        with pytest.raises(ValueError):
            loads('\ufeff[1 2 3]')

        with pytest.raises(TypeError):
            loads(Symbol('42'))
Exemple #5
0
 def test_round_trips_random_fred(self, data):
     src = dumps(data)
     assert loads(src) == data
Exemple #6
0
 def test_encoder_produces_valid_fred_syntax(self, src):
     assert isinstance(loads(src), fred.decoder.FREDTypes)
Exemple #7
0
 def test_round_trip_strings(self, data):
     src = dumps(data)
     print(repr(src))
     assert loads(src) == data, src
 def test_string_lexing(self):
     assert fred.loads('""') == ''
     assert fred.loads('"abc"') == 'abc'
     assert fred.loads('"abc def"') == 'abc def'
     assert fred.loads(r'"abc\bdef"') == 'abc\bdef'
     assert fred.loads(r'"abc\fdef"') == 'abc\fdef'
     assert fred.loads(r'"abc\ndef"') == 'abc\ndef'
     assert fred.loads(r'"abc\rdef"') == 'abc\rdef'
     assert fred.loads(r'"abc\tdef"') == 'abc\tdef'
     assert fred.loads(r'"abc\"def"') == 'abc"def'
     assert fred.loads(r'"abc\\def"') == 'abc\\def'
     assert fred.loads(r'"abc\/def"') == 'abc/def'
     assert fred.loads(r'"\u00E1"') == 'á'
     assert fred.loads(r'"\u{E1}"') == 'á'
     assert fred.loads(r'"\uD801\uDC37"') == '\U00010437'
     assert fred.loads(r'"\uD834\uDD1E"') == '\U0001D11E'
     assert fred.loads(r'"\u{000000E1}"') == 'á'
 def test_byte_string_lexing(self):
     assert fred.loads('``') == b''
     assert fred.loads('`abc`') == b'abc'
     assert fred.loads('`abc def`') == b'abc def'
     assert fred.loads(r'`abc\bdef`') == b'abc\bdef'
     assert fred.loads(r'`abc\fdef`') == b'abc\fdef'
     assert fred.loads(r'`abc\ndef`') == b'abc\ndef'
     assert fred.loads(r'`abc\rdef`') == b'abc\rdef'
     assert fred.loads(r'`abc\tdef`') == b'abc\tdef'
     assert fred.loads(r'`abc\`def`') == b'abc`def'
     assert fred.loads(r'`abc\\def`') == b'abc\\def'
     assert fred.loads(r'`abc\/def`') == b'abc/def'
     assert fred.loads(r'`\x61`') == b'a'
    def test_atomic(self):
        # Constants
        assert fred.loads('true') is True
        assert fred.loads('false') is False
        assert fred.loads('null') is None

        # Integers
        assert fred.loads('10') == 10
        assert fred.loads('-11') == -11
        assert fred.loads('0b10') == 2
        assert fred.loads('-0b11') == -3
        assert fred.loads('0o10') == 8
        assert fred.loads('-0o11') == -9
        assert fred.loads('0x10') == 16
        assert fred.loads('-0x11') == -17

        # Floats
        nan = fred.loads('nan')
        assert isinstance(nan, float) and nan != nan
        assert fred.loads('inf') == float('inf')
        assert fred.loads('-inf') == float('-inf')
        assert fred.loads('10.0') == 10.0
        assert fred.loads('-11.0') == -11.0
        assert fred.loads('1e1') == 10.0
        assert fred.loads('-1e1') == -10.0
        assert fred.loads('1.25e2') == 125.0
        assert fred.loads('1.25e-2') == 0.0125

        # Strings
        assert fred.loads('"abc"') == 'abc'
        assert fred.loads('"abc def"') == 'abc def'
 def test_invalid_syntax(self, invalid):
     with pytest.raises(FREDDecodeError):
         fred.loads(invalid)
 def test_invalid_dates_and_times(self, invalid):
     with pytest.raises(FREDDecodeError):
         fred.loads(invalid)
 def test_invalid_byte_strings(self, invalid):
     with pytest.raises(FREDDecodeError):
         fred.loads(invalid)
 def test_can_load_schema_example(self, schema_src, person_decl):
     fred: Tag = loads(schema_src)
     parsed = parse_schema(fred)
     assert parsed.id == 'tests'
     assert parsed.exported == ['Person']
     assert parsed.declarations == {'Person': person_decl}