@@ -403,3 +403,89 @@ def test_specifying_invalid_version():
403403 error_message = str (exception .value )
404404
405405 assert "4712,4713" in error_message
406+
407+
408+ def test_root_object_added ():
409+ """ When not explicitly included, a root object should be added
410+ """
411+ group = GroupObject ("group" )
412+ channel = ChannelObject ("group" , "a" , np .linspace (0.0 , 1.0 , 10 ))
413+
414+ output_file = BytesIO ()
415+ with TdmsWriter (output_file ) as tdms_writer :
416+ tdms_writer .write_segment ([group , channel ])
417+ tdms_writer .write_segment ([group , channel ])
418+
419+ output_file .seek (0 )
420+
421+ tdms_file = TdmsFile (output_file )
422+ first_segment_objects = tdms_file ._reader ._segments [0 ].ordered_objects
423+ second_segment_objects = tdms_file ._reader ._segments [1 ].ordered_objects
424+
425+ assert first_segment_objects [0 ].path == "/"
426+ assert not any (obj .path == "/" for obj in second_segment_objects )
427+
428+
429+ def test_group_object_added ():
430+ """ When not explicitly included, a group object should be added
431+ """
432+ root = RootObject ()
433+ channel = ChannelObject ("group" , "a" , np .linspace (0.0 , 1.0 , 10 ))
434+
435+ output_file = BytesIO ()
436+ with TdmsWriter (output_file ) as tdms_writer :
437+ tdms_writer .write_segment ([root , channel ])
438+ tdms_writer .write_segment ([root , channel ])
439+
440+ output_file .seek (0 )
441+
442+ tdms_file = TdmsFile (output_file )
443+ first_segment_objects = tdms_file ._reader ._segments [0 ].ordered_objects
444+ second_segment_objects = tdms_file ._reader ._segments [1 ].ordered_objects
445+
446+ assert first_segment_objects [1 ].path == "/'group'"
447+ assert not any (obj .path == "/'group'" for obj in second_segment_objects )
448+
449+
450+ def test_group_not_duplicated ():
451+ root = RootObject ()
452+ group = GroupObject ("group" )
453+ channel = ChannelObject ("group" , "a" , np .linspace (0.0 , 1.0 , 10 ))
454+
455+ output_file = BytesIO ()
456+ with TdmsWriter (output_file ) as tdms_writer :
457+ tdms_writer .write_segment ([root , group , channel ])
458+ tdms_writer .write_segment ([channel ])
459+
460+ output_file .seek (0 )
461+
462+ tdms_file = TdmsFile (output_file )
463+ first_segment_objects = tdms_file ._reader ._segments [0 ].ordered_objects
464+ second_segment_objects = tdms_file ._reader ._segments [1 ].ordered_objects
465+
466+ assert len (first_segment_objects ) == 3
467+ assert len (second_segment_objects ) == 1
468+
469+
470+ def test_root_and_groups_ordered_first ():
471+ """
472+ The root and group objects should always come first
473+ """
474+ root = RootObject ()
475+ group = GroupObject ("group" )
476+ channel_0 = ChannelObject ("group" , "b" , np .linspace (0.0 , 1.0 , 10 ))
477+ channel_1 = ChannelObject ("group" , "a" , np .linspace (0.0 , 1.0 , 10 ))
478+
479+ output_file = BytesIO ()
480+ with TdmsWriter (output_file ) as tdms_writer :
481+ tdms_writer .write_segment ([channel_0 , group , channel_1 , root ])
482+
483+ output_file .seek (0 )
484+
485+ tdms_file = TdmsFile (output_file )
486+ first_segment_objects = tdms_file ._reader ._segments [0 ].ordered_objects
487+
488+ assert first_segment_objects [0 ].path == "/"
489+ assert first_segment_objects [1 ].path == "/'group'"
490+ assert first_segment_objects [2 ].path == "/'group'/'b'"
491+ assert first_segment_objects [3 ].path == "/'group'/'a'"
0 commit comments