@@ -37,17 +37,7 @@ class Case:
3737
3838
3939SKIP = {
40- "functions, match, dot matcher on \\ u2028" : "standard library re policy" ,
41- "functions, match, dot matcher on \\ u2029" : "standard library re policy" ,
42- "functions, search, dot matcher on \\ u2028" : "standard library re policy" ,
43- "functions, search, dot matcher on \\ u2029" : "standard library re policy" ,
44- "functions, match, filter, match function, unicode char class, uppercase" : "\\ p not supported" , # noqa: E501
45- "functions, match, filter, match function, unicode char class negated, uppercase" : "\\ P not supported" , # noqa: E501
46- "functions, search, filter, search function, unicode char class, uppercase" : "\\ p not supported" , # noqa: E501
47- "functions, search, filter, search function, unicode char class negated, uppercase" : "\\ P not supported" , # noqa: E501
48- "filter, equals number, decimal fraction, no fractional digit" : "expected behavior policy" , # noqa: E501
49- "filter, equals number, decimal fraction, no int digit" : "expected behavior policy" ,
50- "filter, equals number, invalid no int digit" : "expected behavior policy" ,
40+ # "filter, equals number, invalid no int digit": "expected behavior policy",
5141 "filter, equals number, invalid 00" : "expected behavior policy" ,
5242 "filter, equals number, invalid leading 0" : "expected behavior policy" ,
5343 "filter, equals number, invalid no fractional digit" : "expected behavior policy" ,
@@ -63,9 +53,9 @@ class Case:
6353 "slice selector, step, minus space" : "expected behavior policy" ,
6454 "slice selector, step, -0" : "expected behavior policy" ,
6555 "slice selector, step, leading -0" : "expected behavior policy" ,
66- "filter, true, incorrectly capitalized" : "flexible literal policy" ,
67- "filter, false, incorrectly capitalized" : "flexible literal policy" ,
68- "filter, null, incorrectly capitalized" : "flexible literal policy" ,
56+ # "filter, true, incorrectly capitalized": "flexible literal policy",
57+ # "filter, false, incorrectly capitalized": "flexible literal policy",
58+ # "filter, null, incorrectly capitalized": "flexible literal policy",
6959 "name selector, double quotes, single high surrogate" : "expected behavior policy" ,
7060 "name selector, double quotes, single low surrogate" : "expected behavior policy" ,
7161 "name selector, double quotes, high high surrogate" : "expected behavior policy" ,
@@ -76,6 +66,17 @@ class Case:
7666 "name selector, double quotes, supplementary surrogate" : "expected behavior policy" ,
7767}
7868
69+ # CTS test that will only pass if the third party `regex` package is installed.
70+ REGEX_ONLY = {
71+ "functions, match, filter, match function, unicode char class, uppercase" ,
72+ "functions, match, filter, match function, unicode char class negated, uppercase" ,
73+ "functions, search, filter, search function, unicode char class, uppercase" ,
74+ "functions, search, filter, search function, unicode char class negated, uppercase" ,
75+ }
76+
77+ # TODO: Test compliance without strict mode. Assert expected failures.
78+ # TODO: Test runner in `no-regexp` env
79+
7980
8081def cases () -> List [Case ]:
8182 with open ("tests/cts/cts.json" , encoding = "utf8" ) as fd :
@@ -98,6 +99,9 @@ def env() -> JSONPathEnvironment:
9899
99100@pytest .mark .parametrize ("case" , valid_cases (), ids = operator .attrgetter ("name" ))
100101def test_compliance (env : JSONPathEnvironment , case : Case ) -> None :
102+ if not env .regex_available and case .name in REGEX_ONLY :
103+ pytest .skip (reason = "requires regex package" )
104+
101105 if case .name in SKIP :
102106 pytest .skip (reason = SKIP [case .name ])
103107
@@ -116,6 +120,9 @@ def test_compliance(env: JSONPathEnvironment, case: Case) -> None:
116120
117121@pytest .mark .parametrize ("case" , valid_cases (), ids = operator .attrgetter ("name" ))
118122def test_compliance_async (env : JSONPathEnvironment , case : Case ) -> None :
123+ if not env .regex_available and case .name in REGEX_ONLY :
124+ pytest .skip (reason = "requires regex package" )
125+
119126 if case .name in SKIP :
120127 pytest .skip (reason = SKIP [case .name ])
121128
0 commit comments