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_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_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_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_lt_or_eq_argument_types(self): a = ast.ForbidConvention(ast.Node(descriptor=ast.NodeTypeDescriptor(type_='property'), constraint=ast.LessThanOrEqualExpr(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_match_argument_types(self): a = ast.ForbidConvention(ast.Node(descriptor=ast.NodeTypeDescriptor(type_='property'), constraint=ast.MatchExpr(ast.IntegerExpr(4), ast.StringExpr('t'), '')), '') 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 visitList_element(self, ctx): if ctx.element_dec: return ast.DecimalExpr(float(ctx.element_dec.text)) if ctx.element_int: return ast.IntegerExpr(int(ctx.element_int.text)) if ctx.element_str: return ast.StringExpr(self.unescape_quotes(ctx.element_str.text)) if ctx.element_desc: return self.visitSemantic_node(ctx.element_desc) raise ValueError('Unknown list element')
def visitElement(self, context): if context.primary_bool: return ast.BooleanExpr(bool(context.primary_bool.text.lower() != 'false'), context.primary_bool.line) if context.primary_dec: return ast.DecimalExpr(float(context.primary_dec.text), context.primary_dec.line) if context.primary_int: return ast.IntegerExpr(int(context.primary_int.text), context.primary_int.line) if context.primary_str: return ast.StringExpr(self.unescape_quotes(context.primary_str.text), context.primary_str.line) if context.primary_list: return self.visitList_(context.primary_list) raise ValueError('Unknown element')
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