diff options
| author | Bicker <bickerkards@tuta.io> | 2019-05-22 17:45:37 +0200 |
|---|---|---|
| committer | Bicker <bickerkards@tuta.io> | 2019-05-22 17:45:37 +0200 |
| commit | 25314fd2aed81aa5281bc3d93dbcc7919368ebe1 (patch) | |
| tree | 1995521ee652e419926de5fced0f2e3b655e70fb /ql/test/semantic_analysis/test_semantic_analysis.py | |
Diffstat (limited to 'ql/test/semantic_analysis/test_semantic_analysis.py')
| -rw-r--r-- | ql/test/semantic_analysis/test_semantic_analysis.py | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/ql/test/semantic_analysis/test_semantic_analysis.py b/ql/test/semantic_analysis/test_semantic_analysis.py new file mode 100644 index 0000000..ca01231 --- /dev/null +++ b/ql/test/semantic_analysis/test_semantic_analysis.py @@ -0,0 +1,39 @@ +from ql.ast.checkers.dependency_checker import DependencyChecker +from ql.ast.checkers.question_checker import QuestionChecker +from ql.ast.checkers.reference_checker import ReferenceChecker +from ql.ast.extractors.extractor import extract_identifier_dependencies +from ql.ast.extractors.extractor import extract_identifier_scopes +from ql.ast.extractors.extractor import extract_identifier_types +from ql.ast.extractors.extractor import extract_questions +from ql.ast.visitors.type_visitor import TypeVisitor +from ql.test.test import Test + + +class TestSemanticAnalysis(Test): + def __init__(self, directory, lexer, parser): + super(TestSemanticAnalysis, self).__init__('semantic analysis', directory) + self.__lexer = lexer + self.__parser = parser + + def test_file(self, file): + ast = self.__parser.parse(file, self.__lexer.lexer) + + reference_errors = ReferenceChecker(extract_identifier_scopes(ast)).errors + if reference_errors: + return False + + dependency_errors = DependencyChecker(extract_identifier_dependencies(ast)).errors + if dependency_errors: + return False + + question_errors = QuestionChecker(extract_questions(ast)).errors + if question_errors: + return False + + type_visitor = TypeVisitor(extract_identifier_types(ast)) + type_visitor.visit(ast) + type_errors = type_visitor.errors + if type_errors: + return False + + return True |