-
-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathtest_strictness.py
More file actions
107 lines (74 loc) · 2.87 KB
/
test_strictness.py
File metadata and controls
107 lines (74 loc) · 2.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import pytest
from jsonpath import JSONPathEnvironment
from jsonpath import JSONPathNameError
@pytest.fixture()
def env() -> JSONPathEnvironment:
return JSONPathEnvironment(strict=False)
def test_leading_whitespace(env: JSONPathEnvironment) -> None:
query = " $.a"
data = {"a": 1}
assert env.findall(query, data) == [1]
def test_trailing_whitespace(env: JSONPathEnvironment) -> None:
query = "$.a "
data = {"a": 1}
assert env.findall(query, data) == [1]
def test_index_as_object_name(env: JSONPathEnvironment) -> None:
query = "$.a[0]"
data = {"a": {"0": 1}}
assert env.findall(query, data) == [1]
def test_alternative_and(env: JSONPathEnvironment) -> None:
query = "$[?@.a and @.b]"
data = [{"a": True, "b": False}]
assert env.findall(query, data) == [{"a": True, "b": False}]
def test_alternative_or(env: JSONPathEnvironment) -> None:
query = "$[?@.a or @.c]"
data = [{"a": True, "b": False}, {"c": 99}]
assert env.findall(query, data) == [{"a": True, "b": False}, {"c": 99}]
def test_alternative_null(env: JSONPathEnvironment) -> None:
query = "$[?@.a==Null]"
data = [{"a": None, "d": "e"}, {"a": "c", "d": "f"}]
assert env.findall(query, data) == [{"a": None, "d": "e"}]
def test_none(env: JSONPathEnvironment) -> None:
query = "$[?@.a==None]"
data = [{"a": None, "d": "e"}, {"a": "c", "d": "f"}]
assert env.findall(query, data) == [{"a": None, "d": "e"}]
def test_implicit_root_identifier(
env: JSONPathEnvironment,
) -> None:
query = "a['p']"
data = {
"a": {"j": [1, 2, 3], "p": {"q": [4, 5, 6]}},
"b": ["j", "p", "q"],
}
assert env.findall(query, data) == [{"q": [4, 5, 6]}]
def test_singular_path_selector_without_root_identifier(
env: JSONPathEnvironment,
) -> None:
query = "$.a[b[1]]"
data = {
"a": {"j": [1, 2, 3], "p": {"q": [4, 5, 6]}},
"b": ["j", "p", "q"],
"c d": {"x": {"y": 1}},
}
assert env.findall(query, data) == [{"q": [4, 5, 6]}]
def test_isinstance_is_disabled_in_strict_mode() -> None:
env = JSONPathEnvironment(strict=True)
query = "$.some[?is(@.thing, 'string')]"
with pytest.raises(JSONPathNameError):
env.compile(query)
query = "$.some[?isinstance(@.thing, 'string')]"
with pytest.raises(JSONPathNameError):
env.compile(query)
def test_typeof_is_disabled_in_strict_mode() -> None:
env = JSONPathEnvironment(strict=True)
query = "$.some[?type(@.thing) == 'string']"
with pytest.raises(JSONPathNameError):
env.compile(query)
query = "$.some[?typeof(@.thing) == 'string']"
with pytest.raises(JSONPathNameError):
env.compile(query)
def test_startswith_is_disabled_in_strict_mode() -> None:
env = JSONPathEnvironment(strict=True)
query = "$[?startswith(@, 'ab')]"
with pytest.raises(JSONPathNameError):
env.compile(query)