diff -r 2f659ff51c75 -r bef7196f7682 tests/test_treeparse.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test_treeparse.py Mon Feb 16 19:02:59 2009 +0200 @@ -0,0 +1,78 @@ +# :set encoding=utf8 + +""" + Unit tests for qmsk.web.tree_parse +""" + +import unittest +import tree_parse + +class TestTreeParse (unittest.TestCase) : + VALID = """\ +foo + bar + quux + + asdf + further + still + + and back +""".split('\n') + + def test_read_lines_valid (self) : + self.assertEquals(list(tree_parse._read_lines(self.VALID)), [ + (1, 0, "foo"), + (2, 2, "bar"), + (3, 3, "quux"), + (5, 2, "asdf"), + (6, 8, "further"), + (7, 9, "still"), + (9, 2, "and back"), + ]) + + def _parse (self, *lines, **args) : + return list(tree_parse._read_lines(lines, **args)) + + def test_read_lines_decode (self) : + data_unicode = u'föö' + data_raw = 'föö' + + self.assertEquals(self._parse(data_unicode.encode('utf8'), charset='utf8'), [(1, 0, data_unicode)]) + self.assertEquals(self._parse(data_unicode, charset=None), [(1, 0, data_unicode)]) + self.assertEquals(self._parse(data_raw, charset=None), [(1, 0, data_raw)]) + self.assertRaises(UnicodeDecodeError, self._parse, data_raw, charset='ascii') + + def test_read_lines_stop (self) : + self.assertEquals(self._parse(" : foo"), [(1, 1, ": foo")]) + self.assertEquals(self._parse(" : foo", stop_tokens=':'), [(1, 0, ": foo")]) + + def test_read_lines_empty (self) : + self.assertEquals(self._parse(*("foo\n\n bar".split('\n'))), [(1, 0, "foo"), (3, 2, "bar")]) + + def test_read_lines_strip (self) : + self.assertEquals(self._parse(" foo "), [(1, 1, "foo")]) + + def _do (self, *lines, **args) : + return tree_parse.parse(lines, **args) + + def test_parse_valid (self) : + self.assertEquals(self._do(*self.VALID), + (1, "foo", [ + (2, "bar", [ + (3, "quux", []), + ]), + (5, "asdf", [ + (6, "further", [ + (7, "still", []), + ]), + ]), + (9, "and back", []) + ]) + ) + + def test_parse_invalid (self) : + self.assertRaises(tree_parse.TreeParseError, self._do, "foo", " bar", " quux") + + # XXX: don't test root, as that's known-broken still +