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_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_invalid_contains_argument_types(self): a = ast.ForbidConvention(ast.Node(descriptor=ast.NodeTypeDescriptor(type_='property'), constraint=ast.ContainsExpr(ast.VariableExpr.DEFAULT, 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_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_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_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_valid_is_argument_types(self): a = ast.ForbidConvention(ast.Node(descriptor=ast.NodeTypeDescriptor(type_='property'), constraint=ast.IsExpr(ast.VariableExpr(''), ast.NodeTypeExpr('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_list_argument_types(self): a = ast.ForbidConvention(ast.Node(descriptor=ast.NodeTypeDescriptor(type_='property'), constraint=ast.InExpr(ast.StringExpr('t'), ast.ListExpr([ast.StringExpr('p')]))), '') convention_set = self.wrap_convention_in_set(a) error_log = checker.TypeChecker.check(convention_set) assert not error_log.contain_errors()
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_valid_contains_all_argument_types(self): a = ast.ForbidConvention(ast.Node(descriptor=ast.NodeTypeDescriptor(type_='property'), constraint=ast.ContainsAllExpr( ast.VariableExpr.DEFAULT, ast.ListExpr([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_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 visitConvention(self, context): message = self.visit_message(context) target = self.visitPattern(context.target) if self.is_forbid_convention(context): return ast.ForbidConvention(target, message) if context.find: self.push_identifiers(target) if context.where: constraint = self.visitLogic_expr(context.where) target = ast.PatternConstraintDescriptor(target.root, target.nodes, target.relations, constraint) constraint = self.visitLogic_expr(context.requirement) self.pop_identifiers() if self.is_require_convention(context): return ast.FindRequireConvention(target, description=message, constraint=constraint) return ast.FindForbidConvention(target, description=message, constraint=constraint) raise ValueError('Unknown convention type')