Skip to content

Commit e52ef3e

Browse files
committed
Fix global definition of programming language
1 parent b705a9f commit e52ef3e

File tree

2 files changed

+38
-16
lines changed

2 files changed

+38
-16
lines changed

tested/dsl/translate_parser.py

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -187,19 +187,23 @@ def is_expression(_checker: TypeChecker, instance: Any) -> bool:
187187
return isinstance(instance, ExpressionString)
188188

189189

190-
def test(value: object) -> bool:
191-
if not isinstance(value, str):
192-
return False
193-
import ast
194-
195-
ast.parse(value)
196-
return True
197-
198-
199-
def load_schema_validator(file: str = "schema-strict.json") -> Validator:
190+
def load_schema_validator(dsl_object: YamlObject = None, file: str = "schema-strict.json") -> Validator:
200191
"""
201192
Load the JSON Schema validator used to check DSL test suites.
202193
"""
194+
# if the programming language is set in the root, tested_dsl_expressions don't need to be parseable
195+
language_present = dsl_object is not None and "language" in dsl_object
196+
197+
def validate_tested_dsl_expression(value: object) -> bool:
198+
if not isinstance(value, str):
199+
return False
200+
if language_present:
201+
return True
202+
import ast
203+
204+
ast.parse(value)
205+
return True
206+
203207
path_to_schema = Path(__file__).parent / file
204208
with open(path_to_schema, "r") as schema_file:
205209
schema_object = json.load(schema_file)
@@ -209,14 +213,11 @@ def load_schema_validator(file: str = "schema-strict.json") -> Validator:
209213
"oracle", is_oracle
210214
).redefine("expression", is_expression)
211215
format_checker = original_validator.FORMAT_CHECKER
212-
format_checker.checks("tested-dsl-expression", SyntaxError)(test)
216+
format_checker.checks("tested-dsl-expression", SyntaxError)(validate_tested_dsl_expression)
213217
tested_validator = extend_validator(original_validator, type_checker=type_checker)
214218
return tested_validator(schema_object, format_checker=format_checker)
215219

216220

217-
_SCHEMA_VALIDATOR = load_schema_validator()
218-
219-
220221
class DslValidationError(ValueError):
221222
pass
222223

@@ -310,7 +311,7 @@ def _validate_dsl(dsl_object: YamlObject):
310311
:param dsl_object: The object to validate.
311312
:return: True if valid, False otherwise.
312313
"""
313-
errors = list(_SCHEMA_VALIDATOR.iter_errors(dsl_object))
314+
errors = list(load_schema_validator(dsl_object).iter_errors(dsl_object))
314315
if len(errors) == 1:
315316
message = (
316317
"Validating the DSL resulted in an error. "

tests/test_dsl_yaml.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1303,6 +1303,27 @@ def test_empty_text_data_newlines():
13031303
actual_stderr = suite.tabs[0].contexts[0].testcases[0].output.stderr.data
13041304
assert actual_stderr == ""
13051305

1306+
def test_programming_language_can_be_globally_configured():
1307+
yaml_str = """
1308+
namespace: "Numbers"
1309+
language: "java"
1310+
tabs:
1311+
- tab: "Numbers.oddValues"
1312+
testcases:
1313+
- expression: "Numbers.oddValues(new int[]{1, 2, 3, 4, 5, 6, 7, 8})"
1314+
return: [1, 3, 5, 7]
1315+
"""
1316+
json_str = translate_to_test_suite(yaml_str)
1317+
suite = parse_test_suite(json_str)
1318+
assert len(suite.tabs) == 1
1319+
tab = suite.tabs[0]
1320+
assert len(tab.contexts) == 1
1321+
context = tab.contexts[0]
1322+
assert len(context.testcases) == 1
1323+
testcase = context.testcases[0]
1324+
assert isinstance(testcase.input, LanguageLiterals)
1325+
assert testcase.input.type == "expression"
1326+
assert testcase.input.literals.keys() == {"java"}
13061327

13071328
def test_strict_json_schema_is_valid():
13081329
path_to_schema = Path(__file__).parent / "tested-draft7.json"
@@ -1316,6 +1337,6 @@ def test_strict_json_schema_is_valid():
13161337

13171338

13181339
def test_editor_json_schema_is_valid():
1319-
validator = load_schema_validator("schema.json")
1340+
validator = load_schema_validator(file= "schema.json")
13201341
assert isinstance(validator.schema, dict)
13211342
validator.check_schema(validator.schema)

0 commit comments

Comments
 (0)