import py from exmlparser import exmlparser def test_single_element(): p = exmlparser('[book]\n') doc = p.parse() assert len(doc.children) == 1 assert doc.children[0].name == 'book' def test_nested_element(): p = exmlparser('[book]\n [chapter]\n') doc = p.parse() assert len(doc.children) == 1 assert doc.children[0].name == 'book' assert len(doc.children[0].children) == 1 assert doc.children[0].children[0].name == 'chapter' def test_element_deeper_level(): p = exmlparser('[book]\n [chapter]\n [para]\n') doc = p.parse() assert len(doc.children) == 1 assert len(doc.children[0].children) == 1 assert len(doc.children[0].children[0].children) == 1 assert doc.children[0].children[0].children[0].name == 'para' def test_text(): p = exmlparser('[chapter]\n "foo"\n') doc = p.parse() assert doc.children[0].children[0].value == 'foo' def test_text_concat(): p = exmlparser('[chapter]\n "foo "\n "bar"\n') doc = p.parse() assert doc.children[0].children[0].value == 'foo bar' def test_text_no_concat_deeper_level(): p = exmlparser('[chapter]\n [para]\n "bar"\n "baz"\n') doc = p.parse() assert len(doc.children[0].children) == 2 assert len(doc.children[0].children[0].children) == 1 assert doc.children[0].children[0].name == 'para' assert doc.children[0].children[0].children[0].value == 'bar' assert doc.children[0].children[1].value == 'baz' def test_multiline_string(): p = exmlparser('[chapter]\n """\nfoo\nbar\n"""\n') doc = p.parse() assert doc.children[0].children[0].value == '\nfoo\nbar\n' def test_multiline_string_backslash(): p = exmlparser('[chapter]\n """\\\nfoo\n"""\n') doc = p.parse() assert doc.children[0].children[0].value == 'foo\n' def test_comment(): p = exmlparser('# test\n') doc = p.parse() assert len(doc.children) == 0 def test_attributes(): p = exmlparser('[foo bar="baz" qux="quux"]') doc = p.parse() a = doc.children[0].attributes assert len(a) == 2 assert a[0].name == 'bar' assert a[0].value == 'baz' assert a[1].name == 'qux' assert a[1].value == 'quux'