diff --git a/tests/test_basic.py b/tests/test_basic.py index 1d9ee50..81430f8 100644 --- a/tests/test_basic.py +++ b/tests/test_basic.py @@ -3,35 +3,63 @@ import pytest from xbc import loads_xbc, ParseError -def test_key(): - assert loads_xbc('a') == {'a': True} +class TestBare: + def test_key(self): + assert loads_xbc('a') == {'a': True} -def test_keyvalue(): - assert loads_xbc('a = 1') == {'a': '1'} + def test_dot_key(self): + assert loads_xbc('a.a') == {'a.a': True} -def test_keys(): - assert loads_xbc('a;b') == {'a': True, 'b': True} + def test_key_eq(self): + assert loads_xbc('a =') == {'a': True} -def test_string(): - assert loads_xbc('a = "b"') == {'a': '"b"'} + def test_keyvalue(self): + assert loads_xbc('a = 1') == {'a': '1'} -def test_array(): - assert loads_xbc('a = 1, 2') == {'a': ['1', '2']} + def test_dot_keyvalue(self): + assert loads_xbc('a.a = 1') == {'a.a': '1'} -def test_block(): - assert loads_xbc('a { a = 1 }') == {'a': False, 'a.a': '1'} + def test_keys(self): + assert loads_xbc('a;b') == {'a': True, 'b': True} -def test_block2(): - assert loads_xbc('a = 1\na { a = 1 }') == {'a': '1', 'a.a': '1'} + def test_dot_keys(self): + assert loads_xbc('a.a;a.b') == {'a.a': True, 'a.b': True} -def test_reassignment(): - with pytest.raises(ParseError): - loads_xbc('a = 1\na = 2') + def test_string(self): + assert loads_xbc('a = "b"') == {'a': '"b"'} -def test_ovewrite_nonexistent(): - with pytest.raises(ParseError): - loads_xbc('a := 1') + def test_array(self): + assert loads_xbc('a = 1, 2') == {'a': ['1', '2']} -def test_assign_after_block(): - with pytest.raises(ParseError): - loads_xbc('a { a = 1 }\na = 1') + def test_reassignment(self): + with pytest.raises(ParseError): + loads_xbc('a = 1\na = 2') + + # currently the lexer doesn't correctly parse keyvalues with semis + # outside of blocks. no idea why. + @pytest.mark.xfail + def test_reassignment_colon(self): + with pytest.raises(ParseError): + loads_xbc('a = 1;a = 2') + + def test_ovewrite_nonexistent(self): + with pytest.raises(ParseError): + loads_xbc('a := 1') + +class TestBlock: + def test_keyvalue(self): + assert loads_xbc('a { a = 1 }') == {'a': False, 'a.a': '1'} + + def test_nested_block(self): + assert loads_xbc('a { b { c = 1 } }') == {'a.b.c': '1', 'a': False, 'a.b': False} + + def test_keyvalue_and_block(self): + assert loads_xbc('a = 1\na { a = 1 }') == {'a': '1', 'a.a': '1'} + + def test_reassign_colon(self): + with pytest.raises(ParseError): + loads_xbc('a { a = 1; a = 2 }') + + def test_assign_after_block(self): + with pytest.raises(ParseError): + loads_xbc('a { a = 1 }\na = 1')