@@ -30,25 +30,10 @@ def validate_schema_object(base_schema, schema_name):
3030 validation_issues .append (error_message )
3131 return validation_issues
3232
33- mediawiki_string = base_schema .get_as_mediawiki_string (save_merged = True )
34- reloaded_schema = from_string (mediawiki_string , schema_format = ".mediawiki" )
35-
36- validation_issues += _get_schema_comparison (base_schema , reloaded_schema , schema_name , "mediawiki" )
37-
38- xml_string = base_schema .get_as_xml_string (save_merged = True )
39- reloaded_schema = from_string (xml_string , schema_format = ".xml" )
40-
41- validation_issues += _get_schema_comparison (base_schema , reloaded_schema , schema_name , "xml" )
42-
43- json_string = base_schema .get_as_json_string (save_merged = True )
44- reloaded_schema = from_string (json_string , schema_format = ".json" )
45-
46- validation_issues += _get_schema_comparison (base_schema , reloaded_schema , schema_name , "json" )
47-
48- tsv_dataframes = base_schema .get_as_dataframes (save_merged = True )
49- reloaded_schema = from_dataframes (tsv_dataframes )
50-
51- validation_issues += _get_schema_comparison (base_schema , reloaded_schema , schema_name , "tsv" )
33+ for save_merged in (True , False ):
34+ label = "merged" if save_merged else "unmerged"
35+ tagged_name = f"{ schema_name } ({ label } )"
36+ validation_issues += _roundtrip_all_formats (base_schema , tagged_name , save_merged = save_merged )
5237 except HedFileError as e :
5338 print (f"Saving/loading error: { schema_name } { e .message } " )
5439 error_text = e .message
@@ -306,6 +291,42 @@ def get_prerelease_path(repo_path, schema_name, schema_version):
306291 return os .path .join (base_path , "hedtsv" , schema_filename )
307292
308293
294+ def _roundtrip_all_formats (base_schema , schema_name , save_merged = True ):
295+ """Roundtrip a schema through all four formats and compare to the original.
296+
297+ Serializes the schema to mediawiki, XML, JSON, and TSV, reloads each, and
298+ verifies the reloaded schema matches the original.
299+
300+ Parameters:
301+ base_schema (HedSchema): The schema object to roundtrip.
302+ schema_name (str): Label for error reporting (should include merge context).
303+ save_merged (bool): If True, save the merged (with-standard) form.
304+ If False, save only the library-specific content.
305+
306+ Returns:
307+ list: A list of validation issue strings. Empty if no issues found.
308+ """
309+ issues = []
310+
311+ mediawiki_string = base_schema .get_as_mediawiki_string (save_merged = save_merged )
312+ reloaded_schema = from_string (mediawiki_string , schema_format = ".mediawiki" )
313+ issues += _get_schema_comparison (base_schema , reloaded_schema , schema_name , "mediawiki" )
314+
315+ xml_string = base_schema .get_as_xml_string (save_merged = save_merged )
316+ reloaded_schema = from_string (xml_string , schema_format = ".xml" )
317+ issues += _get_schema_comparison (base_schema , reloaded_schema , schema_name , "xml" )
318+
319+ json_string = base_schema .get_as_json_string (save_merged = save_merged )
320+ reloaded_schema = from_string (json_string , schema_format = ".json" )
321+ issues += _get_schema_comparison (base_schema , reloaded_schema , schema_name , "json" )
322+
323+ tsv_dataframes = base_schema .get_as_dataframes (save_merged = save_merged )
324+ reloaded_schema = from_dataframes (tsv_dataframes )
325+ issues += _get_schema_comparison (base_schema , reloaded_schema , schema_name , "tsv" )
326+
327+ return issues
328+
329+
309330def _get_schema_comparison (schema , schema_reload , file_path , file_format ):
310331 """Compare two schema objects and generate error message if they differ.
311332
0 commit comments