@@ -1264,6 +1264,56 @@ def test_type_var(self) -> Iterator[Case]:
1264
1264
)
1265
1265
yield Case (stub = "C = ParamSpec('C')" , runtime = "C = ParamSpec('C')" , error = None )
1266
1266
1267
+ @collect_cases
1268
+ def test_metaclass_match (self ) -> Iterator [Case ]:
1269
+ yield Case (stub = "class Meta(type): ..." , runtime = "class Meta(type): ..." , error = None )
1270
+ yield Case (stub = "class A0: ..." , runtime = "class A0: ..." , error = None )
1271
+ yield Case (
1272
+ stub = "class A1(metaclass=Meta): ..." ,
1273
+ runtime = "class A1(metaclass=Meta): ..." ,
1274
+ error = None ,
1275
+ )
1276
+ yield Case (stub = "class A2: ..." , runtime = "class A2(metaclass=Meta): ..." , error = "A2" )
1277
+ yield Case (stub = "class A3(metaclass=Meta): ..." , runtime = "class A3: ..." , error = "A3" )
1278
+
1279
+ # With inheritance:
1280
+ yield Case (
1281
+ stub = """
1282
+ class I1(metaclass=Meta): ...
1283
+ class S1(I1): ...
1284
+ """ ,
1285
+ runtime = """
1286
+ class I1(metaclass=Meta): ...
1287
+ class S1(I1): ...
1288
+ """ ,
1289
+ error = None ,
1290
+ )
1291
+ yield Case (
1292
+ stub = """
1293
+ class I2(metaclass=Meta): ...
1294
+ class S2: ... # missing inheritance
1295
+ """ ,
1296
+ runtime = """
1297
+ class I2(metaclass=Meta): ...
1298
+ class S2(I2): ...
1299
+ """ ,
1300
+ error = "S2" ,
1301
+ )
1302
+
1303
+ @collect_cases
1304
+ def test_metaclass_abcmeta (self ) -> Iterator [Case ]:
1305
+ # Handling abstract metaclasses is special:
1306
+ yield Case (stub = "from abc import ABCMeta" , runtime = "from abc import ABCMeta" , error = None )
1307
+ yield Case (
1308
+ stub = "class A1(metaclass=ABCMeta): ..." ,
1309
+ runtime = "class A1(metaclass=ABCMeta): ..." ,
1310
+ error = None ,
1311
+ )
1312
+ # Stubs cannot miss abstract metaclass:
1313
+ yield Case (stub = "class A2: ..." , runtime = "class A2(metaclass=ABCMeta): ..." , error = "A2" )
1314
+ # But, stubs can add extra abstract metaclass, this might be a typing hack:
1315
+ yield Case (stub = "class A3(metaclass=ABCMeta): ..." , runtime = "class A3: ..." , error = None )
1316
+
1267
1317
1268
1318
def remove_color_code (s : str ) -> str :
1269
1319
return re .sub ("\\ x1b.*?m" , "" , s ) # this works!
0 commit comments