def test_valid_contains_argument_types(self): a = ast.ForbidConvention(ast.Node(descriptor=ast.NodeTypeDescriptor(type_='property'), constraint=ast.ContainsExpr(ast.VariableExpr.DEFAULT, ast.Node(ast.NodeTypeDescriptor(type_='a')))), '') convention_set = self.wrap_convention_in_set(a) error_log = checker.TypeChecker.check(convention_set) assert not error_log.contain_errors()
def test_undefined_variable_in_method_expr(self): a = ast.FindRequireConvention(ast.Node(descriptor=ast.NodeTypeDescriptor(type_='property'), identifier='a'), '', constraint=ast.MethodExpr(ast.VariableExpr('b'), 'child', ast.IntegerExpr(5))) convention_set = self.wrap_convention_in_set(a) error_log = checker.TypeChecker.check(convention_set) assert error_log.contain_errors() assert len(error_log.get_errors()) == 1
def test_invalid_minus_argument_types(self): a = ast.ForbidConvention(ast.Node(descriptor=ast.NodeTypeDescriptor(type_='property'), constraint=ast.UnaryMinusExpr(ast.StringExpr(''))), '') convention_set = self.wrap_convention_in_set(a) error_log = checker.TypeChecker.check(convention_set) assert error_log.contain_errors() assert len(error_log.get_errors()) == 1
def test_valid_minus_argument_types(self): a = ast.ForbidConvention(ast.Node(descriptor=ast.NodeTypeDescriptor(type_='property'), constraint=ast.EqualExpr(ast.UnaryMinusExpr(ast.IntegerExpr(1)), ast.IntegerExpr(2))), '') convention_set = self.wrap_convention_in_set(a) error_log = checker.TypeChecker.check(convention_set) assert not error_log.contain_errors()
def test_valid_match_argument_types(self): a = ast.ForbidConvention(ast.Node(descriptor=ast.NodeTypeDescriptor(type_='property'), constraint=ast.MatchExpr(ast.StringExpr('t'), ast.StringExpr('m'))), '') convention_set = self.wrap_convention_in_set(a) error_log = checker.TypeChecker.check(convention_set) assert not error_log.contain_errors()
def test_valid_or_argument_types(self): a = ast.ForbidConvention(ast.Node(descriptor=ast.NodeTypeDescriptor(type_='property'), constraint=ast.OrExpr(ast.BooleanExpr(True), ast.BooleanExpr(False))), '') convention_set = self.wrap_convention_in_set(a) error_log = checker.TypeChecker.check(convention_set) assert not error_log.contain_errors()
def test_undefined_variable_in_node_query(self): a = ast.FindRequireConvention(ast.Node(descriptor=ast.NodeTypeDescriptor(type_='property'), identifier='a'), '', constraint=ast.NextSiblingExpr(ast.VariableExpr('b'))) convention_set = self.wrap_convention_in_set(a) error_log = checker.TypeChecker.check(convention_set) assert error_log.contain_errors() assert len(error_log.get_errors()) == 1
def test_diff_ineq_argument_types(self): a = ast.ForbidConvention(ast.Node(descriptor=ast.NodeTypeDescriptor(type_='property'), constraint=ast.NotEqualExpr(ast.StringExpr('t'), ast.IntegerExpr(5), 3)), '') convention_set = self.wrap_convention_in_set(a) error_log = checker.TypeChecker.check(convention_set) assert error_log.contain_errors() assert len(error_log.get_errors_for_convention(a)) == 1
def test_same_gr_eq_argument_types_integer(self): a = ast.ForbidConvention(ast.Node(descriptor=ast.NodeTypeDescriptor(type_='property'), constraint=ast.GreaterThanOrEqualExpr(ast.IntegerExpr(2), ast.IntegerExpr(2), 3)), '') convention_set = self.wrap_convention_in_set(a) error_log = checker.TypeChecker.check(convention_set) assert not error_log.contain_errors()
def test_same_eq_argument_types_list(self): a = ast.ForbidConvention(ast.Node(descriptor=ast.NodeTypeDescriptor(type_='property'), constraint=ast.EqualExpr(ast.ListExpr([]), ast.ListExpr([]), 3)), '') convention_set = self.wrap_convention_in_set(a) error_log = checker.TypeChecker.check(convention_set) assert not error_log.contain_errors()
def test_invalid_boolean_constraint(self): a = ast.ForbidConvention(ast.Node(descriptor=ast.NodeTypeDescriptor(type_='property'), constraint=ast.IntegerExpr(1)), '') convention_set = self.wrap_convention_in_set(a) error_log = checker.TypeChecker.check(convention_set) assert error_log.contain_errors() assert len(error_log.get_errors()) == 1
def test_list_with_diff_elements(self): a = ast.ForbidConvention(ast.Node(descriptor=ast.NodeTypeDescriptor(type_='property'), constraint=ast.EqualExpr(ast.ListExpr([ast.IntegerExpr(1), ast.StringExpr('')]), ast.IntegerExpr(2))), '') convention_set = self.wrap_convention_in_set(a) error_log = checker.TypeChecker.check(convention_set) assert error_log.contain_errors() assert len(error_log.get_errors()) == 1
def test_invalid_lt_argument_types(self): a = ast.ForbidConvention(ast.Node(descriptor=ast.NodeTypeDescriptor(type_='property'), constraint=ast.LessThanExpr(ast.NodeTypeExpr('t'), ast.IntegerExpr(5), 3)), '') convention_set = self.wrap_convention_in_set(a) error_log = checker.TypeChecker.check(convention_set) assert error_log.contain_errors() assert len(error_log.get_errors()) == 1
def test_invalid_contains_all_argument_types(self): a = ast.ForbidConvention(ast.Node(descriptor=ast.NodeTypeDescriptor(type_='property'), constraint=ast.ContainsAllExpr( ast.VariableExpr.DEFAULT, ast.ListExpr([ast.IntegerExpr(2)]))), '') convention_set = self.wrap_convention_in_set(a) error_log = checker.TypeChecker.check(convention_set) assert error_log.contain_errors() assert len(error_log.get_errors()) == 1
def build_node_desc(type_): return ast.Node(ast.NodeTypeDescriptor(type_=type_))
def build_seq_desc_type(type_, repeater): return ast.WhitespaceNode(ast.NodeTypeDescriptor(type_=type_), repeater)
def get_node_descriptor(self, ctx): if ctx.primary: return ast.NodeTypeDescriptor(type_=ctx.primary.text) lambda_string = self.get_type_expression_string(ctx) lambda_ = eval('lambda n: ' + lambda_string) return ast.NodeTypeDescriptor(func=lambda_)
def get_ws_node_descriptor(self, text): return ast.NodeTypeDescriptor(type_=text)
def build_seq_desc(repeater): return ast.WhitespaceNode(ast.NodeTypeDescriptor(), repeater)