@@ -187,19 +187,29 @@ 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 (
191+ dsl_object : YamlObject = None , file : str = "schema-strict.json"
192+ ) -> Validator :
200193 """
201194 Load the JSON Schema validator used to check DSL test suites.
202195 """
196+ # if the programming language is set in the root, tested_dsl_expressions don't need to be parseable
197+ language_present = (
198+ dsl_object is not None
199+ and isinstance (dsl_object , dict )
200+ and "language" in dsl_object
201+ )
202+
203+ def validate_tested_dsl_expression (value : object ) -> bool :
204+ if not isinstance (value , str ):
205+ return False
206+ if language_present :
207+ return True
208+ import ast
209+
210+ ast .parse (value )
211+ return True
212+
203213 path_to_schema = Path (__file__ ).parent / file
204214 with open (path_to_schema , "r" ) as schema_file :
205215 schema_object = json .load (schema_file )
@@ -209,14 +219,13 @@ def load_schema_validator(file: str = "schema-strict.json") -> Validator:
209219 "oracle" , is_oracle
210220 ).redefine ("expression" , is_expression )
211221 format_checker = original_validator .FORMAT_CHECKER
212- format_checker .checks ("tested-dsl-expression" , SyntaxError )(test )
222+ format_checker .checks ("tested-dsl-expression" , SyntaxError )(
223+ validate_tested_dsl_expression
224+ )
213225 tested_validator = extend_validator (original_validator , type_checker = type_checker )
214226 return tested_validator (schema_object , format_checker = format_checker )
215227
216228
217- _SCHEMA_VALIDATOR = load_schema_validator ()
218-
219-
220229class DslValidationError (ValueError ):
221230 pass
222231
@@ -310,7 +319,7 @@ def _validate_dsl(dsl_object: YamlObject):
310319 :param dsl_object: The object to validate.
311320 :return: True if valid, False otherwise.
312321 """
313- errors = list (_SCHEMA_VALIDATOR .iter_errors (dsl_object ))
322+ errors = list (load_schema_validator ( dsl_object ) .iter_errors (dsl_object ))
314323 if len (errors ) == 1 :
315324 message = (
316325 "Validating the DSL resulted in an error. "
0 commit comments