t = self._build_tree()
self.assertEquals(2, len(find_all(t, "//NameNode[@name]")))
+ def test_node_path_attribute_exists_not(self):
+ t = self._build_tree()
+ self.assertEquals(0, len(find_all(t, "//NameNode[not(@name)]")))
+ self.assertEquals(2, len(find_all(t, "//NameNode[not(@honking)]")))
+
def test_node_path_attribute_string_predicate(self):
t = self._build_tree()
self.assertEquals(1, len(find_all(t, "//NameNode[@name = 'decorator']")))
token = next()
if token[0] != '(':
raise ValueError("Expected '(' after function name '%s'" % name)
- predicate = handle_predicate(next, token, end_marker=')')
+ predicate = handle_predicate(next, token)
return name, predicate
def handle_func_not(next, token):
def select(result):
for node in result:
- if _get_first_or_none(predicate(node)) is not None:
+ if _get_first_or_none(predicate([node])) is None:
yield node
return select
raise ValueError("Invalid attribute predicate: '%s'" % value)
return value
-def handle_predicate(next, token, end_marker=']'):
+def handle_predicate(next, token):
token = next()
selector = []
- while token[0] != end_marker:
+ while token[0] != ']':
selector.append( operations[token[0]](next, token) )
try:
token = next()