def test_check_pure_no_returns(): checker = CheckMarkers() text = """ @deal.pure def test(a): a + 3 """ text = dedent(text).strip() funcs1 = Func.from_ast(ast.parse(text)) funcs2 = Func.from_astroid(astroid.parse(text)) for func in (funcs1[0], funcs2[0]): actual = [tuple(err) for err in checker(func)] assert len(actual) == 1 expected = 'DEAL043 missed marker (io)' assert actual[0][2] == expected
def test_check_prints(): checker = CheckMarkers() text = """ @deal.pure def test(a): print(1) return 1 """ text = dedent(text).strip() funcs1 = Func.from_ast(ast.parse(text)) funcs2 = Func.from_astroid(astroid.parse(text)) for func in (funcs1[0], funcs2[0]): actual = [tuple(err) for err in checker(func)] expected = [(3, 4, 'DEAL046 missed marker (stdout)')] assert actual == expected
def test_check_has_no_has(): checker = CheckMarkers() text = """ @deal.pre(lambda a: len(a) > 2) @deal.post(lambda result: result is not None) @deal.raises(ValueError) def test(a): import sys sys.stdout.write(a) """ text = dedent(text).strip() funcs1 = Func.from_ast(ast.parse(text)) funcs2 = Func.from_astroid(astroid.parse(text)) for func in (funcs1[0], funcs2[0]): actual = [tuple(err) for err in checker(func)] assert actual == []
def test_check_pure(): checker = CheckMarkers() text = """ @deal.pure @deal.post(lambda x: x) # skip other contracts def test(a): global b return b """ text = dedent(text).strip() funcs1 = Func.from_ast(ast.parse(text)) funcs2 = Func.from_astroid(astroid.parse(text)) for func in (funcs1[0], funcs2[0]): actual = [tuple(err) for err in checker(func)] expected = [(4, 4, 'DEAL041 missed marker (global)')] assert actual == expected
def test_check_has_io(): checker = CheckMarkers() text = """ @deal.pre(lambda a: len(a) > 2) @deal.has('io') @deal.post(lambda result: result is not None) def test(a): import sys sys.stdout.write(a) """ text = dedent(text).strip() funcs1 = Func.from_ast(ast.parse(text)) funcs2 = Func.from_astroid(astroid.parse(text)) for func in (funcs1[0], funcs2[0]): actual = [tuple(err) for err in checker(func)] assert len(actual) == 1 expected = 'DEAL042 missed marker (import)' assert actual[0][2] == expected
def test_check_has_custom_markers(): checker = CheckMarkers() text = """ import deal @deal.has('database') def inner(): return 1 @deal.has() def outer(): return inner() """ text = dedent(text).strip() funcs = Func.from_astroid(astroid.parse(text)) func = funcs[-1] actual = [tuple(err) for err in checker(func)] assert len(actual) == 1 expected = 'DEAL040 missed marker (database)' assert actual[0][2] == expected