-#! /usr/bin/env python
+#! /usr/bin/env python3
import unittest
-from lark import ParseError
+from lark import LexError, ParseError
from parser import parse
+
class TestParser(unittest.TestCase):
def _parse(self, input):
return parse(input)
self.assertEqual(self._parse('xxx'), ('NAME', 'xxx'))
def test_03_bad_tag(self):
- self.assertRaises(ParseError, self._parse, 'XXX')
+ self.assertRaises(LexError, self._parse, 'XXX')
def test_04_expression(self):
- self.assertEqual(self._parse('!(xxx&yyy)'),
+ self.assertEqual(
+ self._parse('!(xxx&yyy)'),
('NOT', ('PARENS', ('AND', ('NAME', 'xxx'), ('NAME', 'yyy'))))
)
- self.assertEqual(self._parse('!(xxx & yyy)'),
+ self.assertEqual(
+ self._parse('!(xxx & yyy)'),
('NOT', ('PARENS', ('AND', ('NAME', 'xxx'), ('NAME', 'yyy'))))
)
- self.assertEqual(self._parse('!xxx&yyy&zzz|ooo'),
+ self.assertEqual(
+ self._parse('!xxx&yyy&zzz|ooo'),
('OR', ('AND',
- ('NOT', ('NAME', 'xxx')),
- ('AND', ('NAME', 'yyy'), ('NAME', 'zzz'))),
- ('NAME', 'ooo'))
+ ('NOT', ('NAME', 'xxx')),
+ ('AND', ('NAME', 'yyy'), ('NAME', 'zzz'))),
+ ('NAME', 'ooo'))
)
- self.assertEqual(self._parse('!(xxx && yyy)'),
+ self.assertEqual(
+ self._parse('!(xxx && yyy)'),
('NOT', ('PARENS', ('AND', ('NAME', 'xxx'), ('NAME', 'yyy'))))
)
- self.assertEqual(self._parse('!(xxx || yyy)'),
+ self.assertEqual(
+ self._parse('!(xxx || yyy)'),
('NOT', ('PARENS', ('OR', ('NAME', 'xxx'), ('NAME', 'yyy'))))
)
- self.assertEqual(self._parse('xxx and yyy'),
+ self.assertEqual(
+ self._parse('xxx and yyy'),
('AND', ('NAME', 'xxx'), ('NAME', 'yyy'))
)
- self.assertEqual(self._parse('xxx or yyy'),
+ self.assertEqual(
+ self._parse('xxx or yyy'),
('OR', ('NAME', 'xxx'), ('NAME', 'yyy'))
)
- self.assertEqual(self._parse('xxx OR yyy'),
+ self.assertEqual(
+ self._parse('xxx OR yyy'),
('OR', ('NAME', 'xxx'), ('NAME', 'yyy'))
)
- self.assertEqual(self._parse('not xxx'),
+ self.assertEqual(
+ self._parse('not xxx'),
('NOT', ('NAME', 'xxx'))
)
- self.assertEqual(self._parse('NOT xxx'),
+ self.assertEqual(
+ self._parse('NOT xxx'),
('NOT', ('NAME', 'xxx'))
)
- self.assertEqual(self._parse('NOT (xxx & yyy) AND zzz | ooo'),
+ self.assertEqual(
+ self._parse('NOT (xxx & yyy) AND zzz | ooo'),
('OR',
('AND',
('NOT',
('PARENS',
('AND', ('NAME', 'xxx'), ('NAME', 'yyy'))
- )
- ),
+ )
+ ),
('NAME', 'zzz')
- ),
+ ),
('NAME', 'ooo')
- )
+ )
)
def test_05_bad_expression(self):
self.assertRaises(ParseError, self._parse, '!(xxx&yyy')
+
if __name__ == "__main__":
unittest.main()