@@ -131,3 +131,71 @@ def test_simple_attributes(self):
131131 self .assertEqual (yprop .definition , p_def )
132132 self .assertEqual (yprop .dependency , p_dep )
133133 self .assertEqual (yprop .dependency_value , p_dep_val )
134+
135+ def test_cardinality (self ):
136+ """
137+ Test saving and loading of property values cardinality variants to
138+ and from all supported file formats.
139+ """
140+ doc = odml .Document ()
141+ sec = odml .Section (name = "sec" , type = "sometype" , parent = doc )
142+
143+ prop_empty = "prop_cardinality_empty"
144+ prop_max = "prop_cardinality_max"
145+ prop_max_card = (None , 10 )
146+ prop_min = "prop_cardinality_min"
147+ prop_min_card = (2 , None )
148+ prop_full = "prop_full"
149+ prop_full_card = (1 , 5 )
150+
151+ _ = odml .Property (name = prop_empty , parent = sec )
152+ _ = odml .Property (name = prop_max , val_cardinality = prop_max_card , parent = sec )
153+ _ = odml .Property (name = prop_min , val_cardinality = prop_min_card , parent = sec )
154+ _ = odml .Property (name = prop_full , val_cardinality = prop_full_card , parent = sec )
155+
156+ # Test saving to and loading from an XML file
157+ odml .save (doc , self .xml_file )
158+ xml_doc = odml .load (self .xml_file )
159+ xml_prop = xml_doc .sections ["sec" ].properties [prop_empty ]
160+ self .assertIsNone (xml_prop .val_cardinality )
161+
162+ xml_prop = xml_doc .sections ["sec" ].properties [prop_max ]
163+ self .assertEqual (xml_prop .val_cardinality , prop_max_card )
164+
165+ xml_prop = xml_doc .sections ["sec" ].properties [prop_min ]
166+ self .assertEqual (xml_prop .val_cardinality , prop_min_card )
167+
168+ xml_prop = xml_doc .sections ["sec" ].properties [prop_full ]
169+ self .assertEqual (xml_prop .val_cardinality , prop_full_card )
170+
171+ # Test saving to and loading from a JSON file
172+ odml .save (doc , self .json_file , "JSON" )
173+ json_doc = odml .load (self .json_file , "JSON" )
174+
175+ json_prop = json_doc .sections ["sec" ].properties [prop_empty ]
176+ self .assertIsNone (json_prop .val_cardinality )
177+
178+ json_prop = json_doc .sections ["sec" ].properties [prop_max ]
179+ self .assertEqual (json_prop .val_cardinality , prop_max_card )
180+
181+ json_prop = json_doc .sections ["sec" ].properties [prop_min ]
182+ self .assertEqual (json_prop .val_cardinality , prop_min_card )
183+
184+ json_prop = json_doc .sections ["sec" ].properties [prop_full ]
185+ self .assertEqual (json_prop .val_cardinality , prop_full_card )
186+
187+ # Test saving to and loading from a YAML file
188+ odml .save (doc , self .yaml_file , "YAML" )
189+ yaml_doc = odml .load (self .yaml_file , "YAML" )
190+
191+ yaml_prop = yaml_doc .sections ["sec" ].properties [prop_empty ]
192+ self .assertIsNone (yaml_prop .val_cardinality )
193+
194+ yaml_prop = yaml_doc .sections ["sec" ].properties [prop_max ]
195+ self .assertEqual (yaml_prop .val_cardinality , prop_max_card )
196+
197+ yaml_prop = yaml_doc .sections ["sec" ].properties [prop_min ]
198+ self .assertEqual (yaml_prop .val_cardinality , prop_min_card )
199+
200+ yaml_prop = yaml_doc .sections ["sec" ].properties [prop_full ]
201+ self .assertEqual (yaml_prop .val_cardinality , prop_full_card )
0 commit comments