@@ -27,6 +27,27 @@ def test_field_get_streamer(type, expected):
2727 assert f .get_streamer ()("value" ) == expected
2828
2929
30+ @pytest .mark .parametrize ("is_optional,is_repeated,expected" , [
31+ (False , False , True ),
32+ (True , False , False ),
33+ (False , True , False ),
34+ (True , True , False ),
35+ ])
36+ def test_field_is_single (is_optional , is_repeated , expected ):
37+ f = cpp .Field ("name" , "type" , is_optional = is_optional , is_repeated = is_repeated )
38+ assert f .is_single is expected
39+
40+
41+ @pytest .mark .parametrize ("is_optional,is_repeated,expected" , [
42+ (False , False , "bar" ),
43+ (True , False , "std::optional<bar>" ),
44+ (False , True , "std::vector<bar>" ),
45+ ])
46+ def test_field_modal_types (is_optional , is_repeated , expected ):
47+ f = cpp .Field ("name" , "bar" , is_optional = is_optional , is_repeated = is_repeated )
48+ assert f .type == expected
49+
50+
3051def test_trap_has_first_field_marked ():
3152 fields = [
3253 cpp .Field ("a" , "x" ),
@@ -56,5 +77,39 @@ def test_tag_has_bases(bases, expected):
5677 assert t .has_bases is expected
5778
5879
80+ def test_class_has_first_base_marked ():
81+ bases = [
82+ cpp .Class ("a" ),
83+ cpp .Class ("b" ),
84+ cpp .Class ("c" ),
85+ ]
86+ expected = [cpp .ClassBase (c ) for c in bases ]
87+ expected [0 ].first = True
88+ c = cpp .Class ("foo" , bases = bases )
89+ assert c .bases == expected
90+
91+
92+ @pytest .mark .parametrize ("bases,expected" , [
93+ ([], False ),
94+ (["a" ], True ),
95+ (["a" , "b" ], True )
96+ ])
97+ def test_class_has_bases (bases , expected ):
98+ t = cpp .Class ("name" , [cpp .Class (b ) for b in bases ])
99+ assert t .has_bases is expected
100+
101+
102+ def test_class_single_fields ():
103+ fields = [
104+ cpp .Field ("a" , "A" ),
105+ cpp .Field ("b" , "B" , is_optional = True ),
106+ cpp .Field ("c" , "C" ),
107+ cpp .Field ("d" , "D" , is_repeated = True ),
108+ cpp .Field ("e" , "E" ),
109+ ]
110+ c = cpp .Class ("foo" , fields = fields )
111+ assert c .single_fields == fields [::2 ]
112+
113+
59114if __name__ == '__main__' :
60- sys .exit (pytest .main ())
115+ sys .exit (pytest .main ([ __file__ ] + sys . argv [ 1 :] ))
0 commit comments