@@ -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-
220221class 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. "
0 commit comments