Commit ee0f9802 authored by Stefan Behnel's avatar Stefan Behnel

PEP-8-ified the decorator names for parse tree assertions, added a test case

parent 3a712b6e
...@@ -71,8 +71,8 @@ option_defaults = { ...@@ -71,8 +71,8 @@ option_defaults = {
'doctesthack': False, 'doctesthack': False,
# test support # test support
'testAssertPathExists' : [], 'test_assert_path_exists' : [],
'testFailIfPathExists' : [], 'test_fail_if_path_exists' : [],
} }
# Override types possibilities above, if needed # Override types possibilities above, if needed
...@@ -85,8 +85,8 @@ for key, val in option_defaults.items(): ...@@ -85,8 +85,8 @@ for key, val in option_defaults.items():
option_scopes = { # defaults to available everywhere option_scopes = { # defaults to available everywhere
# 'module', 'function', 'class', 'with statement' # 'module', 'function', 'class', 'with statement'
'doctesthack' : ('module',), 'doctesthack' : ('module',),
'testAssertPathExists' : ('function',), 'test_assert_path_exists' : ('function',),
'testFailIfPathExists' : ('function',), 'test_fail_if_path_exists' : ('function',),
} }
def parse_option_value(name, value): def parse_option_value(name, value):
......
...@@ -148,20 +148,18 @@ class TreeAssertVisitor(VisitorTransform): ...@@ -148,20 +148,18 @@ class TreeAssertVisitor(VisitorTransform):
def visit_CompilerDirectivesNode(self, node): def visit_CompilerDirectivesNode(self, node):
directives = node.directives directives = node.directives
if 'testAssertPathExists' in directives: if 'test_assert_path_exists' in directives:
for path in directives['testAssertPathExists']: for path in directives['test_assert_path_exists']:
if TreePath.find_first(node, path) is None: if TreePath.find_first(node, path) is None:
Errors.error( Errors.error(
node.pos, node.pos,
"Expected path '%s' not found in result tree of node %r" % ( "Expected path '%s' not found in result tree" % path)
path, node.body)) if 'test_fail_if_path_exists' in directives:
if 'testFailIfPathExists' in directives: for path in directives['test_fail_if_path_exists']:
for path in directives['testFailIfPathExists']:
if TreePath.find_first(node, path) is not None: if TreePath.find_first(node, path) is not None:
Errors.error( Errors.error(
node.pos, node.pos,
"Unexpected path '%s' found in result tree of node %r" % ( "Unexpected path '%s' found in result tree" % path)
path, node.body))
self.visitchildren(node) self.visitchildren(node)
return node return node
......
cimport cython
@cython.test_fail_if_path_exists("//SimpleCallNode",
"//NameNode")
@cython.test_assert_path_exists("//ComprehensionNode",
"//ComprehensionNode//FuncDefNode")
def test():
object()
_ERRORS = u"""
8:0: Expected path '//ComprehensionNode' not found in result tree
8:0: Expected path '//ComprehensionNode//FuncDefNode' not found in result tree
8:0: Unexpected path '//NameNode' found in result tree
8:0: Unexpected path '//SimpleCallNode' found in result tree
"""
...@@ -22,10 +22,12 @@ def smoketest_dict(): ...@@ -22,10 +22,12 @@ def smoketest_dict():
for x in range(5) for x in range(5)
if x % 2 == 0 } if x % 2 == 0 }
@cython.testFailIfPathExists("//ComprehensionNode//ComprehensionAppendNode", @cython.test_fail_if_path_exists(
"//SimpleCallNode//ComprehensionNode") "//ComprehensionNode//ComprehensionAppendNode",
@cython.testAssertPathExists("//ComprehensionNode", "//SimpleCallNode//ComprehensionNode")
"//ComprehensionNode//DictComprehensionAppendNode") @cython.test_assert_path_exists(
"//ComprehensionNode",
"//ComprehensionNode//DictComprehensionAppendNode")
def smoketest_list(): def smoketest_list():
return dict([ (x+2,x*2) return dict([ (x+2,x*2)
for x in range(5) for x in range(5)
......
...@@ -65,24 +65,24 @@ __doc__ = u""" ...@@ -65,24 +65,24 @@ __doc__ = u"""
cimport cython cimport cython
@cython.testFailIfPathExists("//SimpleCallNode//NameNode[@name = 'enumerate']") @cython.test_fail_if_path_exists("//SimpleCallNode//NameNode[@name = 'enumerate']")
def go_py_enumerate(): def go_py_enumerate():
for i,k in enumerate(range(1,5)): for i,k in enumerate(range(1,5)):
print i, k print i, k
@cython.testFailIfPathExists("//SimpleCallNode//NameNode[@name = 'enumerate']") @cython.test_fail_if_path_exists("//SimpleCallNode//NameNode[@name = 'enumerate']")
def go_c_enumerate(): def go_c_enumerate():
cdef int i,k cdef int i,k
for i,k in enumerate(range(1,5)): for i,k in enumerate(range(1,5)):
print i, k print i, k
@cython.testFailIfPathExists("//SimpleCallNode//NameNode[@name = 'enumerate']") @cython.test_fail_if_path_exists("//SimpleCallNode//NameNode[@name = 'enumerate']")
def go_c_enumerate_step(): def go_c_enumerate_step():
cdef int i,k cdef int i,k
for i,k in enumerate(range(1,7,2)): for i,k in enumerate(range(1,7,2)):
print i, k print i, k
@cython.testFailIfPathExists("//SimpleCallNode//NameNode[@name = 'enumerate']") @cython.test_fail_if_path_exists("//SimpleCallNode//NameNode[@name = 'enumerate']")
def py_enumerate_dict(dict d): def py_enumerate_dict(dict d):
cdef int i = 55 cdef int i = 55
k = 99 k = 99
...@@ -90,7 +90,7 @@ def py_enumerate_dict(dict d): ...@@ -90,7 +90,7 @@ def py_enumerate_dict(dict d):
print i, k print i, k
print u"::", i, k print u"::", i, k
@cython.testFailIfPathExists("//SimpleCallNode") @cython.test_fail_if_path_exists("//SimpleCallNode")
def py_enumerate_break(*t): def py_enumerate_break(*t):
i,k = 55,99 i,k = 55,99
for i,k in enumerate(t): for i,k in enumerate(t):
...@@ -98,7 +98,7 @@ def py_enumerate_break(*t): ...@@ -98,7 +98,7 @@ def py_enumerate_break(*t):
break break
print u"::", i, k print u"::", i, k
@cython.testFailIfPathExists("//SimpleCallNode") @cython.test_fail_if_path_exists("//SimpleCallNode")
def py_enumerate_return(*t): def py_enumerate_return(*t):
i,k = 55,99 i,k = 55,99
for i,k in enumerate(t): for i,k in enumerate(t):
...@@ -106,7 +106,7 @@ def py_enumerate_return(*t): ...@@ -106,7 +106,7 @@ def py_enumerate_return(*t):
return return
print u"::", i, k print u"::", i, k
@cython.testFailIfPathExists("//SimpleCallNode") @cython.test_fail_if_path_exists("//SimpleCallNode")
def py_enumerate_continue(*t): def py_enumerate_continue(*t):
i,k = 55,99 i,k = 55,99
for i,k in enumerate(t): for i,k in enumerate(t):
...@@ -114,7 +114,7 @@ def py_enumerate_continue(*t): ...@@ -114,7 +114,7 @@ def py_enumerate_continue(*t):
continue continue
print u"::", i, k print u"::", i, k
@cython.testFailIfPathExists("//SimpleCallNode//NameNode[@name = 'enumerate']") @cython.test_fail_if_path_exists("//SimpleCallNode//NameNode[@name = 'enumerate']")
def empty_c_enumerate(): def empty_c_enumerate():
cdef int i = 55, k = 99 cdef int i = 55, k = 99
for i,k in enumerate(range(0)): for i,k in enumerate(range(0)):
...@@ -126,12 +126,12 @@ def single_target_enumerate(): ...@@ -126,12 +126,12 @@ def single_target_enumerate():
for t in enumerate(range(1,5)): for t in enumerate(range(1,5)):
print t[0], t[1] print t[0], t[1]
@cython.testFailIfPathExists("//SimpleCallNode//NameNode[@name = 'enumerate']") @cython.test_fail_if_path_exists("//SimpleCallNode//NameNode[@name = 'enumerate']")
def multi_enumerate(): def multi_enumerate():
for a,(b,(c,d)) in enumerate(enumerate(enumerate(range(1,5)))): for a,(b,(c,d)) in enumerate(enumerate(enumerate(range(1,5)))):
print a,b,c,d print a,b,c,d
@cython.testFailIfPathExists("//SimpleCallNode") @cython.test_fail_if_path_exists("//SimpleCallNode")
def multi_c_enumerate(): def multi_c_enumerate():
cdef int a,b,c,d cdef int a,b,c,d
for a,(b,(c,d)) in enumerate(enumerate(enumerate(range(1,5)))): for a,(b,(c,d)) in enumerate(enumerate(enumerate(range(1,5)))):
......
...@@ -15,8 +15,8 @@ __doc__ = u""" ...@@ -15,8 +15,8 @@ __doc__ = u"""
cimport cython cimport cython
@cython.testAssertPathExists("//ForFromStatNode") @cython.test_assert_path_exists("//ForFromStatNode")
@cython.testFailIfPathExists("//ForInStatNode") @cython.test_fail_if_path_exists("//ForInStatNode")
def test_modify(): def test_modify():
cdef int i, n = 5 cdef int i, n = 5
for i in range(n): for i in range(n):
...@@ -25,8 +25,8 @@ def test_modify(): ...@@ -25,8 +25,8 @@ def test_modify():
print print
return i,n return i,n
@cython.testAssertPathExists("//ForFromStatNode") @cython.test_assert_path_exists("//ForFromStatNode")
@cython.testFailIfPathExists("//ForInStatNode") @cython.test_fail_if_path_exists("//ForInStatNode")
def test_fix(): def test_fix():
cdef int i cdef int i
for i in range(5): for i in range(5):
...@@ -34,8 +34,8 @@ def test_fix(): ...@@ -34,8 +34,8 @@ def test_fix():
print print
return i return i
@cython.testAssertPathExists("//ForFromStatNode") @cython.test_assert_path_exists("//ForFromStatNode")
@cython.testFailIfPathExists("//ForInStatNode") @cython.test_fail_if_path_exists("//ForInStatNode")
def test_break(): def test_break():
cdef int i, n = 5 cdef int i, n = 5
for i in range(n): for i in range(n):
...@@ -46,8 +46,8 @@ def test_break(): ...@@ -46,8 +46,8 @@ def test_break():
print print
return i,n return i,n
@cython.testAssertPathExists("//ForFromStatNode") @cython.test_assert_path_exists("//ForFromStatNode")
@cython.testFailIfPathExists("//ForInStatNode") @cython.test_fail_if_path_exists("//ForInStatNode")
def test_return(): def test_return():
cdef int i, n = 5 cdef int i, n = 5
for i in range(n): for i in range(n):
......
...@@ -27,9 +27,9 @@ def smoketest_set(): ...@@ -27,9 +27,9 @@ def smoketest_set():
for x in range(5) for x in range(5)
if x % 2 == 0 } if x % 2 == 0 }
@cython.testFailIfPathExists("//SimpleCallNode//ComprehensionNode") @cython.test_fail_if_path_exists("//SimpleCallNode//ComprehensionNode")
@cython.testAssertPathExists("//ComprehensionNode", @cython.test_assert_path_exists("//ComprehensionNode",
"//ComprehensionNode//ComprehensionAppendNode") "//ComprehensionNode//ComprehensionAppendNode")
def smoketest_list(): def smoketest_list():
return set([ x*2 return set([ x*2
for x in range(5) for x in range(5)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment