Major Refactoring on plyxproto
- Reorganized code and removed copy of ply
- Reformatted code to be closer to PEP8
- Updated to Python3 compatibility
- Added tox test runner and created test cases
diff --git a/tests/test_logicparser.py b/tests/test_logicparser.py
new file mode 100644
index 0000000..bb3107d
--- /dev/null
+++ b/tests/test_logicparser.py
@@ -0,0 +1,72 @@
+# Copyright 2017-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from __future__ import print_function
+import unittest
+
+import ply.lex as lex
+import ply.yacc as yacc
+from plyxproto.logicparser import FOLLexer, FOLParser
+
+
+class TestFOL(unittest.TestCase):
+
+ @classmethod
+ def setUpClass(self):
+
+ self.DEBUG = 0
+ self.lexer = lex.lex(module=FOLLexer(), debug=self.DEBUG)
+ self.parser = yacc.yacc(module=FOLParser(), start='goal', debug=self.DEBUG)
+
+ def test_true(self):
+ '''verify basic truth statement'''
+
+ t_in = "<true>"
+ p_out = self.parser.parse(t_in, lexer=self.lexer, debug=self.DEBUG)
+ self.assertEqual(p_out, "true")
+
+ def test_or(self):
+ '''verify or statement'''
+
+ t_in = "<a | b>"
+ p_out = self.parser.parse(t_in, lexer=self.lexer, debug=self.DEBUG)
+ self.assertEqual(p_out, {'|': ['a', 'b']})
+
+ def test_exists(self):
+ '''verify exists statement'''
+
+ t_in = "<exists a: x=y>"
+ p_out = self.parser.parse(t_in, lexer=self.lexer, debug=self.DEBUG)
+ self.assertEqual(p_out, {'exists': ['a', {'=': ('x', 'y')}]})
+
+ def test_forall(self):
+ '''verify forall statement'''
+
+ t_in = "<forall a: exists b: x.b=y.b>"
+ p_out = self.parser.parse(t_in, lexer=self.lexer, debug=self.DEBUG)
+ self.assertEqual(p_out, {'forall': ['a', {'exists': ['b', {'=': ('x.b', 'y.b')}]}]})
+
+ def test_endswith(self):
+ '''verify endswith statement'''
+
+ t_in = "<forall a: {{ a.endswith('good') }}>"
+ p_out = self.parser.parse(t_in, lexer=self.lexer, debug=self.DEBUG)
+ self.assertEqual(p_out, {'forall': ['a', {'python': "a.endswith('good')"}]})
+
+ def test_function(self):
+ '''verify policy function calls'''
+
+ t_in = "< *doit(foo) >"
+ p_out = self.parser.parse(t_in, lexer=self.lexer, debug=self.DEBUG)
+ self.assertEqual(p_out, {'policy': ['doit', 'foo']})