aboutsummaryrefslogtreecommitdiff
path: root/ql/test/expression_evaluation/test_expression_evaluation.py
diff options
context:
space:
mode:
authorBicker <bickerkards@tuta.io>2019-05-22 17:45:37 +0200
committerBicker <bickerkards@tuta.io>2019-05-22 17:45:37 +0200
commit25314fd2aed81aa5281bc3d93dbcc7919368ebe1 (patch)
tree1995521ee652e419926de5fced0f2e3b655e70fb /ql/test/expression_evaluation/test_expression_evaluation.py
Initial commitHEADmaster
Diffstat (limited to 'ql/test/expression_evaluation/test_expression_evaluation.py')
-rw-r--r--ql/test/expression_evaluation/test_expression_evaluation.py49
1 files changed, 49 insertions, 0 deletions
diff --git a/ql/test/expression_evaluation/test_expression_evaluation.py b/ql/test/expression_evaluation/test_expression_evaluation.py
new file mode 100644
index 0000000..067ebda
--- /dev/null
+++ b/ql/test/expression_evaluation/test_expression_evaluation.py
@@ -0,0 +1,49 @@
+from json import loads
+
+from ql.ast.extractors.extractor import extract_gui_model
+from ql.ast.extractors.extractor import extract_identifier_types
+from ql.ast.visitors.expression_evaluator import ExpressionEvaluator
+from ql.ast.visitors.type_visitor import TypeVisitor
+from ql.types.boolean import QLBoolean
+from ql.types.date import QLDate
+from ql.types.decimal import QLDecimal
+from ql.types.integer import QLInteger
+from ql.types.money import QLMoney
+from ql.types.string import QLString
+from ql.test.test import Test
+
+
+class TestExpressionEvaluation(Test):
+ def __init__(self, directory, lexer, parser):
+ super(TestExpressionEvaluation, self).__init__('expression evaluation', directory)
+ self.__lexer = lexer
+ self.__parser = parser
+
+ def test_file(self, file):
+ ast = self.__parser.parse(file, self.__lexer.lexer)
+
+ if not self.__parser.errors:
+ TypeVisitor(extract_identifier_types(ast)).visit(ast)
+ model = extract_gui_model(ast)
+ result_type, result_value = file.split('\n')[0].split()[-2:]
+ correct_result = None
+
+ if result_type == 'QLBoolean' and result_value == 'True':
+ correct_result = QLBoolean(True)
+ elif result_type == 'QLBoolean':
+ correct_result = QLBoolean()
+ elif result_type == 'QLDate':
+ day, month, year = loads(result_value)
+ correct_result = QLDate(day, month, year)
+ elif result_type == 'QLDecimal':
+ correct_result = QLDecimal(result_value)
+ elif result_type == 'QLInteger':
+ correct_result = QLInteger(result_value)
+ elif result_type == 'QLMoney':
+ correct_result = QLMoney(result_value)
+ elif result_type == 'QLString':
+ correct_result = QLString(result_value)
+
+ expression_evaluator = ExpressionEvaluator(model)
+ expression_evaluator.visit(ast.block[0].answer)
+ return bool(expression_evaluator.result == correct_result)