@@ -32,6 +32,34 @@ def test_sub_fields(self):
3232 ca .set_repeat (True )
3333 self .assertTrue (ca == ref )
3434
35+ def test_idx_fields (self ):
36+ s1 = Argument ("sub1" , int )
37+ vt1 = Argument ("type1" , dict , [
38+ Argument ("shared" , str ),
39+ Argument ("vnt1_1" , dict , [
40+ Argument ("vnt1_1_1" , int )
41+ ])
42+ ])
43+ vt2 = Argument ("type2" , dict , [
44+ Argument ("shared" , int ),
45+ ])
46+ v1 = Variant ("vnt_flag" , [vt1 , vt2 ])
47+ ca = Argument ("base" , dict , [s1 ], [v1 ])
48+ self .assertTrue (ca ['' ] is ca )
49+ self .assertTrue (ca ['.' ] is ca )
50+ self .assertTrue (ca ['sub1' ] == ca ["./sub1" ] == s1 )
51+ with self .assertRaises (KeyError ):
52+ ca ["sub2" ]
53+ self .assertTrue (ca ['[type1]' ] is vt1 )
54+ self .assertTrue (ca ['[type1]///' ] is vt1 )
55+ self .assertTrue (ca ['[type1]/vnt1_1/vnt1_1_1' ] == Argument ("vnt1_1_1" , int ))
56+ self .assertTrue (ca ['[type2]//shared' ] == Argument ("shared" , int ))
57+ with self .assertRaises (KeyError ):
58+ s1 ["sub1" ]
59+ self .assertTrue (s1 .I ["sub1" ] is s1 )
60+ self .assertTrue (ca .I ["base[type1]" ] is vt1 )
61+ self .assertTrue (ca .I ['base[type2]//shared' ] == Argument ("shared" , int ))
62+
3563 def test_sub_variants (self ):
3664 ref = Argument ("base" , dict , [
3765 Argument ("sub1" , int ),
@@ -64,7 +92,7 @@ def test_sub_variants(self):
6492 vt2s0 = vt2 .add_subfield ("shared" , int )
6593 vt2s1 = vt2 .add_subfield ("vnt2_1" , int )
6694 self .assertTrue (ca == ref )
67-
95+ # make sure we can modify the reference
6896 ref1 = Argument ("base" , dict , [
6997 Argument ("sub1" , int ),
7098 Argument ("sub2" , str )
@@ -88,6 +116,102 @@ def test_sub_variants(self):
88116 v1 .set_default (False )
89117 self .assertTrue (ca == ref )
90118
119+ def test_idx_variants (self ):
120+ vt1 = Argument ("type1" , dict , [
121+ Argument ("shared" , int ),
122+ Argument ("vnt1_1" , int ),
123+ Argument ("vnt1_2" , dict , [
124+ Argument ("vnt1_1_1" , int )
125+ ])
126+ ])
127+ vt2 = Argument ("type2" , dict , [
128+ Argument ("shared" , int ),
129+ Argument ("vnt2_1" , int ),
130+ ])
131+ vnt = Variant ("vnt_flag" , [vt1 , vt2 ])
132+ self .assertTrue (vnt ["type1" ] is vt1 )
133+ self .assertTrue (vnt ["type2" ] is vt2 )
134+ with self .assertRaises (KeyError ):
135+ vnt ["type3" ]
136+
137+ def test_complicated (self ):
138+ ref = Argument ("base" , dict , [
139+ Argument ("sub1" , int ),
140+ Argument ("sub2" , str )
141+ ], [
142+ Variant ("vnt_flag" , [
143+ Argument ("type1" , dict , [
144+ Argument ("shared" , int ),
145+ Argument ("vnt1_1" , int ),
146+ Argument ("vnt1_2" , dict , [
147+ Argument ("vnt1_1_1" , int )
148+ ])
149+ ]),
150+ Argument ("type2" , dict , [
151+ Argument ("shared" , int ),
152+ Argument ("vnt2_1" , int ),
153+ ]),
154+ Argument ("type3" , dict , [
155+ Argument ("vnt3_1" , int )
156+ ], [ # testing cascade variants here
157+ Variant ("vnt3_flag1" , [
158+ Argument ("v3f1t1" , dict , [
159+ Argument ('v3f1t1_1' , int ),
160+ Argument ('v3f1t1_2' , int )
161+ ]),
162+ Argument ("v3f1t2" , dict , [
163+ Argument ('v3f1t2_1' , int )
164+ ])
165+ ]),
166+ Variant ("vnt3_flag2" , [
167+ Argument ("v3f2t1" , dict , [
168+ Argument ('v3f2t1_1' , int ),
169+ Argument ('v3f2t1_2' , int )
170+ ]),
171+ Argument ("v3f2t2" , dict , [
172+ Argument ('v3f2t2_1' , int )
173+ ])
174+ ])
175+ ])
176+ ])
177+ ])
178+ ca = Argument ("base" , dict )
179+ s1 = ca .add_subfield ("sub1" , int )
180+ s2 = ca .add_subfield ("sub2" , str )
181+ v1 = ca .add_subvariant ("vnt_flag" )
182+ vt1 = v1 .add_choice ("type1" , dict )
183+ vt1s0 = vt1 .add_subfield ("shared" , int )
184+ vt1s1 = vt1 .add_subfield ("vnt1_1" , int )
185+ vt1s2 = vt1 .add_subfield ("vnt1_2" , dict )
186+ vt1ss = vt1s2 .add_subfield ("vnt1_1_1" , int )
187+ vt2 = v1 .add_choice ("type2" )
188+ vt2s0 = vt2 .add_subfield ("shared" , int )
189+ vt2s1 = vt2 .add_subfield ("vnt2_1" , int )
190+ vt3 = v1 .add_choice ("type3" )
191+ vt3s1 = vt3 .add_subfield ("vnt3_1" , int )
192+ vt3f1 = vt3 .add_subvariant ('vnt3_flag1' )
193+ vt3f1t1 = vt3f1 .add_choice ("v3f1t1" )
194+ vt3f1t1s1 = vt3f1t1 .add_subfield ("v3f1t1_1" , int )
195+ vt3f1t1s2 = vt3f1t1 .add_subfield ("v3f1t1_2" , int )
196+ vt3f1t2 = vt3f1 .add_choice ("v3f1t2" )
197+ vt3f1t2s1 = vt3f1t2 .add_subfield ("v3f1t2_1" , int )
198+ vt3f2 = vt3 .add_subvariant ('vnt3_flag2' )
199+ vt3f2t1 = vt3f2 .add_choice ("v3f2t1" )
200+ vt3f2t1s1 = vt3f2t1 .add_subfield ("v3f2t1_1" , int )
201+ vt3f2t1s2 = vt3f2t1 .add_subfield ("v3f2t1_2" , int )
202+ vt3f2t2 = vt3f2 .add_choice ("v3f2t2" )
203+ vt3f2t2s1 = vt3f2t2 .add_subfield ("v3f2t2_1" , int )
204+ self .assertTrue (ca == ref )
205+ self .assertTrue (ca ['[type3][vnt3_flag1=v3f1t1]' ] is vt3f1t1 )
206+ self .assertTrue (ca .I ['base[type3][vnt3_flag1=v3f1t1]/v3f1t1_2' ] is vt3f1t1s2 )
207+ self .assertTrue (ca .I ['base[type3][vnt3_flag1=v3f1t2]/v3f1t2_1' ] is vt3f1t2s1 )
208+ self .assertTrue (ca .I ['base[type3][vnt3_flag2=v3f2t1]/v3f2t1_1' ] is vt3f2t1s1 )
209+ self .assertTrue (ca .I ['base[type3][vnt3_flag2=v3f2t2]/v3f2t2_1' ] is vt3f2t2s1 )
210+ with self .assertRaises ((KeyError , ValueError )):
211+ ca .I ['base[type3][v3f2t2]' ]
212+ with self .assertRaises ((KeyError , ValueError )):
213+ ca .I ['base[type3][vnt3_flag3=v3f2t2]/v3f2t2_1' ]
214+
91215
92216if __name__ == "__main__" :
93217 unittest .main ()
0 commit comments