From ab5d6b71817a0e8c8f515d8e13dc08ff7c609d51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=ADle=20Ekaterin=20Liszka?= Date: Fri, 12 Jan 2024 22:44:43 -0800 Subject: [PATCH] tests: add more tests and organise --- tests/test_bare.py | 49 ++++++++++++++++++++++++++++++++++ tests/test_basic.py | 62 ------------------------------------------- tests/test_block.py | 24 +++++++++++++++++ tests/test_invalid.py | 29 ++++++++++++++++++++ 4 files changed, 102 insertions(+), 62 deletions(-) create mode 100644 tests/test_bare.py delete mode 100644 tests/test_basic.py create mode 100644 tests/test_block.py create mode 100644 tests/test_invalid.py diff --git a/tests/test_bare.py b/tests/test_bare.py new file mode 100644 index 0000000..74234dc --- /dev/null +++ b/tests/test_bare.py @@ -0,0 +1,49 @@ +import pytest + +from xbc import loads_xbc, ParseError + + +def test_key(): + assert loads_xbc('a') == {'a': True} + +def test_dot_key(): + assert loads_xbc('a.a') == {'a.a': True} + +def test_key_eq(): + assert loads_xbc('a =') == {'a': True} + +def test_keyvalue(): + assert loads_xbc('a = 1') == {'a': '1'} + +def test_keyvalue_space(): + assert loads_xbc('a = a b') == {'a': 'a b'} + +def test_dot_keyvalue(): + assert loads_xbc('a.a = 1') == {'a.a': '1'} + +def test_keys(): + assert loads_xbc('a;b') == {'a': True, 'b': True} + +def test_dot_keys(): + assert loads_xbc('a.a;a.b') == {'a.a': True, 'a.b': True} + +def test_quoted(): + assert loads_xbc('a = "b"') == {'a': 'b'} + +def test_quoted_space(): + assert loads_xbc('a = "b "') == {'a': 'b '} + +def test_array(): + assert loads_xbc('a = 1, 2') == {'a': ['1', '2']} + +def test_reassignment(): + with pytest.raises(ParseError): + loads_xbc('a = 1\na = 2') + +def test_reassignment_colon(): + with pytest.raises(ParseError): + loads_xbc('a = 1;a = 2') + +def test_ovewrite_nonexistent(): + with pytest.raises(ParseError): + loads_xbc('a := 1') diff --git a/tests/test_basic.py b/tests/test_basic.py deleted file mode 100644 index 8744cc7..0000000 --- a/tests/test_basic.py +++ /dev/null @@ -1,62 +0,0 @@ - -import pytest - -from xbc import loads_xbc, ParseError - -class TestBareLoad: - def test_key(self): - assert loads_xbc('a') == {'a': True} - - def test_dot_key(self): - assert loads_xbc('a.a') == {'a.a': True} - - def test_key_eq(self): - assert loads_xbc('a =') == {'a': True} - - def test_keyvalue(self): - assert loads_xbc('a = 1') == {'a': '1'} - - def test_dot_keyvalue(self): - assert loads_xbc('a.a = 1') == {'a.a': '1'} - - def test_keys(self): - assert loads_xbc('a;b') == {'a': True, 'b': True} - - def test_dot_keys(self): - assert loads_xbc('a.a;a.b') == {'a.a': True, 'a.b': True} - - def test_string(self): - assert loads_xbc('a = "b"') == {'a': 'b'} - - def test_array(self): - assert loads_xbc('a = 1, 2') == {'a': ['1', '2']} - - def test_reassignment(self): - with pytest.raises(ParseError): - loads_xbc('a = 1\na = 2') - - 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 TestBlockLoad: - 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') diff --git a/tests/test_block.py b/tests/test_block.py new file mode 100644 index 0000000..4980cd2 --- /dev/null +++ b/tests/test_block.py @@ -0,0 +1,24 @@ + +import pytest + +from xbc import loads_xbc, ParseError + +def test_empty(): + assert loads_xbc('a {}') == {'a': True} + +def test_keyvalue(): + assert loads_xbc('a { a = 1 }') == {'a': False, 'a.a': '1'} + +def test_nested_block(): + assert loads_xbc('a { b { c = 1 } }') == {'a.b.c': '1', 'a': False, 'a.b': False} + +def test_keyvalue_and_block(): + assert loads_xbc('a = 1\na { a = 1 }') == {'a': '1', 'a.a': '1'} + +def test_reassign_colon(): + with pytest.raises(ParseError): + loads_xbc('a { a = 1; a = 2 }') + +def test_assign_after_block(): + with pytest.raises(ParseError): + loads_xbc('a { a = 1 }\na = 1') diff --git a/tests/test_invalid.py b/tests/test_invalid.py new file mode 100644 index 0000000..a31443b --- /dev/null +++ b/tests/test_invalid.py @@ -0,0 +1,29 @@ + +import pytest + +from pyparsing.exceptions import ParseException +from xbc import loads_xbc, ParseError + +# this should fail but does not. +@pytest.mark.xfail +def test_whitespace_vc(): + with pytest.raises(ParseError): + loads_xbc('x = a\n, b') + +# this should fail but does not. +@pytest.mark.xfail +def test_extra_quote(): + with pytest.raises(ParseException): + loads_xbc("x = '''") + +def test_lone_plus(): + with pytest.raises(ParseException): + loads_xbc('+') + +def test_lone_rbrace(): + with pytest.raises(ParseException): + loads_xbc('}') + +def test_lone_lbrace(): + with pytest.raises(ParseException): + loads_xbc('{')