2828import genutils
2929import cppgen
3030
31+ # Method assertRegexpMatches has been deprecated in Python 3.2 and compatibility
32+ # alias was apparently removed in Python 3.12.
33+ #
34+ # However not all CI build agents have been upgraded to Python 3.2 while some
35+ # only have Python 3.12+ and cannot be easily downgraded (e.g., RISC-V agents).
36+ #
37+ # The code belows provides compatibility for Python < 3.2
38+ if not hasattr (unittest .TestCase , "assertRegex" ) and hasattr (unittest .TestCase , "assertRegexpMatches" ):
39+ setattr (unittest .TestCase , "assertRegex" , unittest .TestCase .assertRegexpMatches )
40+
3141class CppGeneratorTest (unittest .TestCase ):
3242 """Tests for CppGenerator class"""
3343
@@ -37,10 +47,10 @@ def setUp(self):
3747 self .generator = cppgen .CppGenerator (self .api , "" , [])
3848
3949 def test_generate_include_1 (self ):
40- self .assertRegexpMatches (self .generator .generate_include ("foo.hpp" ), '#include\s+"foo.hpp"' )
50+ self .assertRegex (self .generator .generate_include ("foo.hpp" ), '#include\s+"foo.hpp"' )
4151
4252 def test_generate_include_2 (self ):
43- self .assertRegexpMatches (self .generator .generate_include ("bar" ), '#include\s+"bar"' )
53+ self .assertRegex (self .generator .generate_include ("bar" ), '#include\s+"bar"' )
4454
4555 def test_get_client_class_name_1 (self ):
4656 class_desc = self .api .classes ()[0 ].inner_classes ()[0 ]
@@ -92,26 +102,26 @@ def test_get_impl_type_5(self):
92102 self .assertRaises (KeyError , self .generator .get_impl_type , type_desc )
93103
94104 def test_generate_static_cast_1 (self ):
95- self .assertRegexpMatches (self .generator .generate_static_cast ("void *" , "foo" ),
96- "static_cast<\s*void \*\s*>\(\s*foo\s*\)" )
105+ self .assertRegex (self .generator .generate_static_cast ("void *" , "foo" ),
106+ "static_cast<\s*void \*\s*>\(\s*foo\s*\)" )
97107
98108 def test_generate_static_cast_2 (self ):
99- self .assertRegexpMatches (self .generator .generate_static_cast ("bar" , "quux" ),
100- "static_cast<\s*bar\s*>\(\s*quux\s*\)" )
109+ self .assertRegex (self .generator .generate_static_cast ("bar" , "quux" ),
110+ "static_cast<\s*bar\s*>\(\s*quux\s*\)" )
101111
102112 def test_generate_static_cast_3 (self ):
103- self .assertRegexpMatches (self .generator .generate_static_cast (" " , " " ),
104- "static_cast<\s*>\(\s*\)" )
113+ self .assertRegex (self .generator .generate_static_cast (" " , " " ),
114+ "static_cast<\s*>\(\s*\)" )
105115
106116 def test_to_impl_cast_1 (self ):
107117 class_desc = self .api .get_class_by_name ("class_1_inner_class_1" )
108- self .assertRegexpMatches (self .generator .to_impl_cast (class_desc , "foo" ),
109- "static_cast<TR::class_1::class_1_inner_class_1\s*\*>\(\s*foo\s*\)" )
118+ self .assertRegex (self .generator .to_impl_cast (class_desc , "foo" ),
119+ "static_cast<TR::class_1::class_1_inner_class_1\s*\*>\(\s*foo\s*\)" )
110120
111121 def test_to_impl_cast_2 (self ):
112122 class_desc = self .api .get_class_by_name ("class_2" )
113- self .assertRegexpMatches (self .generator .to_impl_cast (class_desc , "bar" ),
114- "static_cast<TR::class_2\s*\*>\(\s*static_cast<TR::class_1\s*\*>\(\s*bar\s*\)\s*\)" )
123+ self .assertRegex (self .generator .to_impl_cast (class_desc , "bar" ),
124+ "static_cast<TR::class_2\s*\*>\(\s*static_cast<TR::class_1\s*\*>\(\s*bar\s*\)\s*\)" )
115125
116126 @unittest .skip ("Instead of rasing an assert, to_impl_case raises an AttributeError: 'APIType' object has no attribute 'base', which is no good." )
117127 def test_to_impl_cast_3 (self ):
@@ -120,13 +130,13 @@ def test_to_impl_cast_3(self):
120130
121131 def test_to_opaque_cast_1 (self ):
122132 class_desc = self .api .get_class_by_name ("class_1_inner_class_1" )
123- self .assertRegexpMatches (self .generator .to_opaque_cast ("foo" , class_desc ),
124- "static_cast<void\s*\*>\(\s*foo\s*\)" )
133+ self .assertRegex (self .generator .to_opaque_cast ("foo" , class_desc ),
134+ "static_cast<void\s*\*>\(\s*foo\s*\)" )
125135
126136 def test_to_opaque_cast_2 (self ):
127137 class_desc = self .api .get_class_by_name ("class_2" )
128- self .assertRegexpMatches (self .generator .to_opaque_cast ("bar" , class_desc ),
129- "static_cast<void\s*\*>\(\s*static_cast<TR::class_1\s*\*>\(\s*bar\s*\)\s*\)" )
138+ self .assertRegex (self .generator .to_opaque_cast ("bar" , class_desc ),
139+ "static_cast<void\s*\*>\(\s*static_cast<TR::class_1\s*\*>\(\s*bar\s*\)\s*\)" )
130140
131141 @unittest .skip ("Instead of rasing an assert, to_impl_case raises an AttributeError: 'APIType' object has no attribute 'base', which is no good." )
132142 def test_to_opaque_cast_3 (self ):
@@ -135,13 +145,13 @@ def test_to_opaque_cast_3(self):
135145
136146 def test_to_client_cast_1 (self ):
137147 class_desc = self .api .get_class_by_name ("class_1_inner_class_1" )
138- self .assertRegexpMatches (self .generator .to_client_cast (class_desc , "foo" ),
139- "static_cast<class_1::class_1_inner_class_1\s*\*>\(\s*foo\s*\)" )
148+ self .assertRegex (self .generator .to_client_cast (class_desc , "foo" ),
149+ "static_cast<class_1::class_1_inner_class_1\s*\*>\(\s*foo\s*\)" )
140150
141151 def test_to_client_cast_2 (self ):
142152 class_desc = self .api .get_class_by_name ("class_2" )
143- self .assertRegexpMatches (self .generator .to_client_cast (class_desc , "bar" ),
144- "static_cast<class_2\s*\*>\(\s*bar\s*\)" )
153+ self .assertRegex (self .generator .to_client_cast (class_desc , "bar" ),
154+ "static_cast<class_2\s*\*>\(\s*bar\s*\)" )
145155
146156 @unittest .skip ("Instead of rasing an assert, to_impl_case raises an AttributeError: 'APIType' object has no attribute 'base', which is no good." )
147157 def test_to_client_cast_3 (self ):
@@ -150,27 +160,27 @@ def test_to_client_cast_3(self):
150160
151161 def test_grab_impl_1 (self ):
152162 type_desc = genutils .APIType ("int32" , self .api )
153- self .assertRegexpMatches (self .generator .grab_impl ("foo" , type_desc ), "foo" )
163+ self .assertRegex (self .generator .grab_impl ("foo" , type_desc ), "foo" )
154164
155165 def test_grab_impl_2 (self ):
156166 type_desc = self .api .get_class_by_name ("class_1_inner_class_1" ).as_type ()
157- self .assertRegexpMatches (self .generator .grab_impl ("bar" , type_desc ),
158- "static_cast<TR::class_1::class_1_inner_class_1\s*\*>\(\s*bar\s*!=\s*NULL\s*\?\s*bar->_impl\s*:\s*NULL\s*\)" )
167+ self .assertRegex (self .generator .grab_impl ("bar" , type_desc ),
168+ "static_cast<TR::class_1::class_1_inner_class_1\s*\*>\(\s*bar\s*!=\s*NULL\s*\?\s*bar->_impl\s*:\s*NULL\s*\)" )
159169
160170 def test_generate_parm_1 (self ):
161171 parm_desc = self .api .services ()[0 ].parameters ()[0 ]
162- self .assertRegexpMatches (self .generator .generate_parm (parm_desc ),
163- "int16_t\s*Project_service_1_parm_1" )
172+ self .assertRegex (self .generator .generate_parm (parm_desc ),
173+ "int16_t\s*Project_service_1_parm_1" )
164174
165175 def test_generate_parm_2 (self ):
166176 parm_desc = self .api .services ()[0 ].parameters ()[1 ]
167- self .assertRegexpMatches (self .generator .generate_parm (parm_desc ),
168- "void\s*\*\s*\*\s*Project_service_1_parm_2" )
177+ self .assertRegex (self .generator .generate_parm (parm_desc ),
178+ "void\s*\*\s*\*\s*Project_service_1_parm_2" )
169179
170180 def test_generate_parm_3 (self ):
171181 parm_desc = self .api .services ()[0 ].parameters ()[2 ]
172- self .assertRegexpMatches (self .generator .generate_parm (parm_desc ),
173- "double\s*\*\s*Project_service_1_parm_3" )
182+ self .assertRegex (self .generator .generate_parm (parm_desc ),
183+ "double\s*\*\s*Project_service_1_parm_3" )
174184
175185 def test_generate_arg_1 (self ):
176186 parm_desc = self .api .services ()[0 ].parameters ()[0 ]
@@ -202,45 +212,45 @@ def test_get_allocator_name_1(self):
202212
203213 def test_generate_field_decl_1 (self ):
204214 field = self .api .get_class_by_name ("class_1" ).fields ()[0 ]
205- self .assertRegexpMatches (self .generator .generate_field_decl (field ),
206- "public:\s*float\s+class_1_field_1\s*;" )
215+ self .assertRegex (self .generator .generate_field_decl (field ),
216+ "public:\s*float\s+class_1_field_1\s*;" )
207217
208218 def test_generate_field_decl_2 (self ):
209219 field = self .api .get_class_by_name ("class_1" ).fields ()[1 ]
210- self .assertRegexpMatches (self .generator .generate_field_decl (field , False ),
211- "double\s+class_1_field_2\s*;" )
220+ self .assertRegex (self .generator .generate_field_decl (field , False ),
221+ "double\s+class_1_field_2\s*;" )
212222
213223 def test_generate_class_service_decl_1 (self ):
214224 service = self .api .get_class_by_name ("class_1" ).services ()[0 ]
215- self .assertRegexpMatches (self .generator .generate_class_service_decl (service ),
216- "public:\s*const\s*char\s*\*\s*class_1_service_1\(\s*const\s*char\s*\*\s*class_1_service_1_parm\s*\);" )
225+ self .assertRegex (self .generator .generate_class_service_decl (service ),
226+ "public:\s*const\s*char\s*\*\s*class_1_service_1\(\s*const\s*char\s*\*\s*class_1_service_1_parm\s*\);" )
217227
218228 def test_generate_class_service_decl_2 (self ):
219229 service = self .api .get_class_by_name ("class_1" ).services ()[1 ]
220- self .assertRegexpMatches (self .generator .generate_class_service_decl (service ),
221- "protected:\s*void\s*class_1_service_2\(\s*\);" )
230+ self .assertRegex (self .generator .generate_class_service_decl (service ),
231+ "protected:\s*void\s*class_1_service_2\(\s*\);" )
222232
223233 def test_generate_ctor_decl_1 (self ):
224234 ctor = self .api .get_class_by_name ("class_2" ).constructors ()[0 ]
225- self .assertRegexpMatches (self .generator .generate_ctor_decl (ctor , "class_2" ),
226- "public:\s*class_2\(\)\s*;" )
235+ self .assertRegex (self .generator .generate_ctor_decl (ctor , "class_2" ),
236+ "public:\s*class_2\(\)\s*;" )
227237
228238 def test_generate_ctor_decl_2 (self ):
229239 ctor = self .api .get_class_by_name ("class_1_inner_class_1" ).constructors ()[0 ]
230- self .assertRegexpMatches (self .generator .generate_ctor_decl (ctor , "class_1_inner_class_1" ),
231- "public:\s*class_1_inner_class_1\(\)\s*;" )
240+ self .assertRegex (self .generator .generate_ctor_decl (ctor , "class_1_inner_class_1" ),
241+ "public:\s*class_1_inner_class_1\(\)\s*;" )
232242
233243 def test_generate_dtor_decl_1 (self ):
234244 class_desc = self .api .get_class_by_name ("class_2" )
235- self .assertRegexpMatches (self .generator .generate_dtor_decl (class_desc ),
236- "public:\s*~class_2\(\)\s*;" )
245+ self .assertRegex (self .generator .generate_dtor_decl (class_desc ),
246+ "public:\s*~class_2\(\)\s*;" )
237247
238248 def test_generate_dtor_decl_2 (self ):
239249 class_desc = self .api .get_class_by_name ("class_1_inner_class_1" )
240- self .assertRegexpMatches (self .generator .generate_dtor_decl (class_desc ),
241- "public:\s*~class_1_inner_class_1\(\)\s*;" )
250+ self .assertRegex (self .generator .generate_dtor_decl (class_desc ),
251+ "public:\s*~class_1_inner_class_1\(\)\s*;" )
242252
243253 def test_generate_allocator_decl_1 (self ):
244254 class_desc = self .api .get_class_by_name ("class_1_inner_class_1" )
245- self .assertRegexpMatches (self .generator .generate_allocator_decl (class_desc ),
246- 'extern\s*"C"\s*void\s*\*\s*allocateclass_1class_1_inner_class_1\(void\s*\*\s*impl\);' )
255+ self .assertRegex (self .generator .generate_allocator_decl (class_desc ),
256+ 'extern\s*"C"\s*void\s*\*\s*allocateclass_1class_1_inner_class_1\(void\s*\*\s*impl\);' )
0 commit comments