@@ -978,6 +978,94 @@ def test_export_leaf(self):
978
978
self .assertEqual (len (ex3 ['first' ].sections ), 1 )
979
979
self .assertEqual (len (ex3 ['first' ]['third' ]), 0 )
980
980
981
+ def _test_cardinality_re_assignment (self , obj , obj_attribute ):
982
+ """
983
+ Tests the basic set of both Section properties and sub-sections cardinality.
984
+
985
+ :param obj: odml Section
986
+ :param obj_attribute: string with the cardinality attribute that is supposed to be tested.
987
+ Should be either 'prop_cardinality' or 'sec_cardinality'.
988
+ """
989
+ oat = obj_attribute
990
+
991
+ # Test Section prop/sec cardinality reset
992
+ for non_val in [None , "" , [], (), {}]:
993
+ setattr (obj , oat , non_val )
994
+ self .assertIsNone (getattr (obj , oat ))
995
+ setattr (obj , oat , 1 )
996
+
997
+ # Test Section prop/sec cardinality single int max assignment
998
+ setattr (obj , oat , 10 )
999
+ self .assertEqual (getattr (obj , oat ), (None , 10 ))
1000
+
1001
+ # Test Section prop/sec cardinality tuple max assignment
1002
+ setattr (obj , oat , (None , 5 ))
1003
+ self .assertEqual (getattr (obj , oat ), (None , 5 ))
1004
+
1005
+ # Test Section prop/sec cardinality tuple min assignment
1006
+ setattr (obj , oat , (5 , None ))
1007
+ self .assertEqual (getattr (obj , oat ), (5 , None ))
1008
+
1009
+ # Test Section prop/sec cardinality min/max assignment
1010
+ setattr (obj , oat , (1 , 5 ))
1011
+ self .assertEqual (getattr (obj , oat ), (1 , 5 ))
1012
+
1013
+ # -- Test Section prop/sec cardinality assignment failures
1014
+ with self .assertRaises (ValueError ):
1015
+ setattr (obj , oat , "a" )
1016
+
1017
+ with self .assertRaises (ValueError ):
1018
+ setattr (obj , oat , - 1 )
1019
+
1020
+ with self .assertRaises (ValueError ):
1021
+ setattr (obj , oat , (1 , "b" ))
1022
+
1023
+ with self .assertRaises (ValueError ):
1024
+ setattr (obj , oat , (1 , 2 , 3 ))
1025
+
1026
+ with self .assertRaises (ValueError ):
1027
+ setattr (obj , oat , [1 , 2 , 3 ])
1028
+
1029
+ with self .assertRaises (ValueError ):
1030
+ setattr (obj , oat , {1 : 2 , 3 : 4 })
1031
+
1032
+ with self .assertRaises (ValueError ):
1033
+ setattr (obj , oat , (- 1 , 1 ))
1034
+
1035
+ with self .assertRaises (ValueError ):
1036
+ setattr (obj , oat , (1 , - 5 ))
1037
+
1038
+ with self .assertRaises (ValueError ):
1039
+ setattr (obj , oat , (5 , 1 ))
1040
+
1041
+ def test_properties_cardinality (self ):
1042
+ """
1043
+ Tests the basic assignment rules for Section Properties cardinality
1044
+ on init and re-assignment but does not test properties assignment or
1045
+ the actual cardinality validation.
1046
+ """
1047
+ doc = Document ()
1048
+
1049
+ # -- Test set cardinality on Section init
1050
+ # Test empty init
1051
+ sec_prop_card_none = Section (name = "sec_prop_card_none" , type = "test" , parent = doc )
1052
+ self .assertIsNone (sec_prop_card_none .prop_cardinality )
1053
+
1054
+ # Test single int max init
1055
+ sec_card_max = Section (name = "prop_cardinality_max" , prop_cardinality = 10 , parent = doc )
1056
+ self .assertEqual (sec_card_max .prop_cardinality , (None , 10 ))
1057
+
1058
+ # Test tuple init
1059
+ sec_card_min = Section (name = "prop_cardinality_min" , prop_cardinality = (2 , None ), parent = doc )
1060
+ self .assertEqual (sec_card_min .prop_cardinality , (2 , None ))
1061
+
1062
+ # -- Test Section properties cardinality re-assignment
1063
+ sec = Section (name = "prop" , prop_cardinality = (None , 10 ), parent = doc )
1064
+ self .assertEqual (sec .prop_cardinality , (None , 10 ))
1065
+
1066
+ # Use general method to reduce redundancy
1067
+ self ._test_cardinality_re_assignment (sec , 'prop_cardinality' )
1068
+
981
1069
def test_link (self ):
982
1070
pass
983
1071
0 commit comments