Skip to content

Commit e3c31ac

Browse files
committed
Simplify checking of args inside visitor tests
Replicates graphql/graphql-js@5d69735
1 parent bde83af commit e3c31ac

File tree

1 file changed

+29
-25
lines changed

1 file changed

+29
-25
lines changed

tests/language/test_visitor.py

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -26,26 +26,6 @@
2626
from ..fixtures import kitchen_sink_query # noqa: F401
2727

2828

29-
def get_node_by_path(ast, path):
30-
result = ast
31-
for key in path:
32-
if isinstance(key, int):
33-
assert isinstance(result, list)
34-
try:
35-
result = result[key]
36-
except IndexError:
37-
fail(f"invalid index {key} in node list {result}")
38-
elif isinstance(key, str):
39-
assert isinstance(result, Node)
40-
try:
41-
result = getattr(result, key)
42-
except AttributeError:
43-
fail(f"invalid key {key} in node {result}")
44-
else:
45-
fail(f"invalid key {key!r} in path {path}")
46-
return result
47-
48-
4929
def check_visitor_fn_args(ast, node, key, parent, path, ancestors, is_edited=False):
5030
assert isinstance(node, Node)
5131

@@ -59,18 +39,42 @@ def check_visitor_fn_args(ast, node, key, parent, path, ancestors, is_edited=Fal
5939
return
6040

6141
assert isinstance(key, (int, str))
62-
assert get_node_by_path(parent, [key]) is not None
42+
43+
if isinstance(key, int):
44+
assert isinstance(parent, list)
45+
assert 0 <= key <= len(parent)
46+
else:
47+
assert isinstance(parent, Node)
48+
assert hasattr(parent, key)
49+
6350
assert isinstance(path, list)
6451
assert path[-1] == key
52+
6553
assert isinstance(ancestors, list)
6654
assert len(ancestors) == len(path) - 1
6755

6856
if not is_edited:
69-
assert get_node_by_path(parent, [key]) is node
70-
assert get_node_by_path(ast, path) is node
57+
current_node = ast
58+
7159
for i, ancestor in enumerate(ancestors):
72-
ancestor_path = path[:i]
73-
assert ancestor == get_node_by_path(ast, ancestor_path)
60+
assert ancestor is current_node
61+
k = path[i]
62+
assert isinstance(k, (int, str))
63+
if isinstance(k, int):
64+
assert isinstance(current_node, list)
65+
assert 0 <= k <= len(current_node)
66+
current_node = current_node[k]
67+
else:
68+
assert isinstance(current_node, Node)
69+
assert hasattr(current_node, k)
70+
current_node = getattr(current_node, k)
71+
assert current_node is not None
72+
73+
assert parent is current_node
74+
if isinstance(key, int):
75+
assert parent[key] is node
76+
else:
77+
assert getattr(parent, key) is node
7478

7579

7680
def describe_visitor():

0 commit comments

Comments
 (0)