@@ -63,6 +63,10 @@ def local_data_load(path: str):
6363 return local_load (f"{ os .path .join ('data' , path )} " )
6464
6565
66+ def local_json_load (path : str ):
67+ return local_load (f"{ os .path .join ('json' , path )} " )
68+
69+
6670def example_data_load (path : str ):
6771 try :
6872 return xml_load_data (local_load (f"data/{ path } .xml" ))
@@ -86,42 +90,12 @@ def test_filter_data():
8690 ]
8791
8892
89- @pytest .mark .sasdata
90- @pytest .mark .parametrize ("f" , test_xml_file_names )
91- def test_json_serialise (f ):
92- data = example_data_load (f )
93-
94- with open (local_load (f"json/{ f } .json" ), encoding = "utf-8" ) as infile :
95- expected = json .loads ("" .join (infile .readlines ()))
96- assert json .loads (SasDataEncoder ().encode (data )) == expected
97-
98-
99- @pytest .mark .sasdata
100- @pytest .mark .parametrize ("f" , test_xml_file_names )
101- def test_json_deserialise (f ):
102- expected = example_data_load (f )
103-
104- with open (local_load (f"json/{ f } .json" ), encoding = "utf-8" ) as infile :
105- raw = json .loads ("" .join (infile .readlines ()))
106- parsed = {}
107- for k in raw :
108- parsed [k ] = SasData .from_json (raw [k ])
109-
110- for k in expected :
111- expect = expected [k ]
112- pars = parsed [k ]
113- assert pars .name == expect .name
114- # assert pars._data_contents == expect._data_contents
115- assert pars .dataset_type == expect .dataset_type
116- assert pars .mask == expect .mask
117- assert pars .model_requirements == expect .model_requirements
118-
119-
12093@dataclass (kw_only = True )
12194class BaseTestCase :
12295 expected_values : dict [int , dict [str , float ]]
12396 expected_metadata : dict [str , Any ] = field (default_factory = dict )
12497 metadata_file : None | str = None
98+ json_file : None | str = None
12599 round_trip : bool = False
126100
127101
@@ -269,7 +243,6 @@ class SesansTestCase(BaseTestCase):
269243 ),
270244 Hdf5TestCase (
271245 filename = local_data_load ("x25000_no_di.h5" ),
272- metadata_file = local_reference_load ("x25000_no_di.txt" ),
273246 expected_values = {},
274247 ),
275248 Hdf5TestCase (
@@ -286,79 +259,91 @@ class SesansTestCase(BaseTestCase):
286259 filename = local_data_load ("ISIS_1_0.xml" ),
287260 entry = "79680main_1D_2.2_10.0" ,
288261 metadata_file = local_reference_load ("ISIS_1_0.txt" ),
262+ json_file = local_json_load ("ISIS_1_0.json" ),
289263 expected_values = {},
290264 ),
291265 XmlTestCase (
292266 filename = local_data_load ("ISIS_1_1.xml" ),
293267 entry = "79680main_1D_2.2_10.0" ,
294268 metadata_file = local_reference_load ("ISIS_1_1.txt" ),
269+ json_file = local_json_load ("ISIS_1_1.json" ),
295270 expected_values = {},
296271 ),
297272 XmlTestCase (
298273 filename = local_data_load ("ISIS_1_1_doubletrans.xml" ),
299274 entry = "79680main_1D_2.2_10.0" ,
300275 metadata_file = local_reference_load ("ISIS_1_1_doubletrans.txt" ),
276+ json_file = local_json_load ("ISIS_1_1_doubletrans.json" ),
301277 expected_values = {},
302278 ),
303279 XmlTestCase (
304280 filename = local_data_load ("ISIS_1_1_notrans.xml" ),
305281 entry = "79680main_1D_2.2_10.0" ,
306282 metadata_file = local_reference_load ("ISIS_1_1_notrans.txt" ),
283+ json_file = local_json_load ("ISIS_1_1_notrans.json" ),
307284 expected_values = {},
308285 ),
309286 XmlTestCase (
310287 filename = local_data_load ("TestExtensions.xml" ),
311288 entry = "TK49 c10_SANS" ,
312289 metadata_file = local_reference_load ("TestExtensions.txt" ),
290+ json_file = local_json_load ("TestExtensions.json" ),
313291 expected_values = {},
314292 ),
315293 XmlTestCase (
316294 filename = local_data_load ("cansas1d.xml" ),
317295 entry = "Test title" ,
318296 metadata_file = local_reference_load ("cansas1d.txt" ),
297+ json_file = local_json_load ("cansas1d.json" ),
319298 expected_values = {},
320299 ),
321300 XmlTestCase (
322301 filename = local_data_load ("cansas1d_badunits.xml" ),
323302 entry = "Test title" ,
324303 metadata_file = local_reference_load ("cansas1d_badunits.txt" ),
304+ json_file = local_json_load ("cansas1d_badunits.json" ),
325305 expected_values = {},
326306 ),
327307 XmlTestCase (
328308 filename = local_data_load ("cansas1d_notitle.xml" ),
329309 entry = "SasData01" ,
330310 metadata_file = local_reference_load ("cansas1d_notitle.txt" ),
311+ json_file = local_json_load ("cansas1d_notitle.json" ),
331312 expected_values = {},
332313 ),
333314 XmlTestCase (
334315 filename = local_data_load ("cansas1d_slit.xml" ),
335316 entry = "Test title" ,
336317 metadata_file = local_reference_load ("cansas1d_slit.txt" ),
318+ json_file = local_json_load ("cansas1d_slit.json" ),
337319 expected_values = {},
338320 ),
339321 XmlTestCase (
340322 filename = local_data_load ("cansas1d_units.xml" ),
341323 entry = "Test title" ,
342324 metadata_file = local_reference_load ("cansas1d_units.txt" ),
325+ json_file = local_json_load ("cansas1d_units.json" ),
343326 expected_values = {},
344327 ),
345328 XmlTestCase (
346329 filename = local_data_load ("cansas_test.xml" ),
347330 entry = "ILL-D11 example1: 2A 5mM 0%D2O" ,
348331 metadata_file = local_reference_load ("cansas_test.txt" ),
332+ json_file = local_json_load ("cansas_test.json" ),
349333 expected_values = {},
350334 ),
351335 XmlTestCase (
352336 filename = local_data_load ("cansas_test_modified.xml" ),
353337 entry = "ILL-D11 example1: 2A 5mM 0%D2O" ,
354338 metadata_file = local_reference_load ("cansas_test_modified.txt" ),
339+ json_file = local_json_load ("cansas_test_modified.json" ),
355340 expected_values = {},
356341 ),
357- # XmlTestCase(filename=local_data_load("cansas_xml_multisasentry_multisasdata.xml"), metadata_file=local_reference_load("cansas_xml_multisasentry_multisasdata.txt"), expected_values={}),
358342 XmlTestCase (
359343 filename = local_data_load ("valid_cansas_xml.xml" ),
360344 entry = "80514main_1D_2.2_10.0" ,
361345 metadata_file = local_reference_load ("valid_cansas_xml.txt" ),
346+ json_file = local_json_load ("valid_cansas_xml.json" ),
362347 expected_values = {},
363348 ),
364349]
@@ -436,6 +421,28 @@ def test_load_file(test_case: BaseTestCase):
436421 keys = sorted ([d for d in combined_data ])
437422 assert "" .join (combined_data [k ].summary () for k in keys ) == expected
438423
424+ if test_case .json_file is not None :
425+ # Test serialisation
426+ with open (test_case .json_file , encoding = "utf-8" ) as infile :
427+ expected = json .loads ("" .join (infile .readlines ()))
428+ assert json .loads (SasDataEncoder ().encode (combined_data )) == expected
429+
430+ # Test deserialisation
431+ with open (test_case .json_file , encoding = "utf-8" ) as infile :
432+ raw = json .loads ("" .join (infile .readlines ()))
433+ parsed = {}
434+ for k in raw :
435+ parsed [k ] = SasData .from_json (raw [k ])
436+
437+ for k in combined_data :
438+ expect = combined_data [k ]
439+ pars = parsed [k ]
440+ assert pars .name == expect .name
441+ # assert pars._data_contents == expect._data_contents
442+ assert pars .dataset_type == expect .dataset_type
443+ assert pars .mask == expect .mask
444+ assert pars .model_requirements == expect .model_requirements
445+
439446 if test_case .round_trip :
440447 bio = io .BytesIO ()
441448 SasData .save_h5 (combined_data , bio )
0 commit comments