@@ -340,7 +340,7 @@ class B(A):
340340 pass
341341
342342 assert data .classes == {
343- 'A' : schema .Class ('A' , derived = {'B' }),
343+ 'A' : schema .Class ('A' , derived = {'B' }, ipa = schema . IpaInfo () ),
344344 'B' : schema .Class ('B' , bases = ['A' ], ipa = schema .IpaInfo (from_class = "A" )),
345345 }
346346
@@ -381,7 +381,7 @@ class B(A):
381381 pass
382382
383383 assert data .classes == {
384- 'A' : schema .Class ('A' , derived = {'B' }),
384+ 'A' : schema .Class ('A' , derived = {'B' }, ipa = schema . IpaInfo () ),
385385 'B' : schema .Class ('B' , bases = ['A' ], ipa = schema .IpaInfo (on_arguments = {'a' : 'A' , 'i' : 'int' })),
386386 }
387387
@@ -414,6 +414,39 @@ class B:
414414 pass
415415
416416
417+ def test_ipa_class_hierarchy ():
418+ @schema .load
419+ class data :
420+ class Root :
421+ pass
422+
423+ class Base (Root ):
424+ pass
425+
426+ class Intermediate (Base ):
427+ pass
428+
429+ @defs .synth .on_arguments (a = Base , i = defs .int )
430+ class A (Intermediate ):
431+ pass
432+
433+ @defs .synth .from_class (Base )
434+ class B (Base ):
435+ pass
436+
437+ class C (Root ):
438+ pass
439+
440+ assert data .classes == {
441+ 'Root' : schema .Class ('Root' , derived = {'Base' , 'C' }),
442+ 'Base' : schema .Class ('Base' , bases = ['Root' ], derived = {'Intermediate' , 'B' }, ipa = schema .IpaInfo ()),
443+ 'Intermediate' : schema .Class ('Intermediate' , bases = ['Base' ], derived = {'A' }, ipa = schema .IpaInfo ()),
444+ 'A' : schema .Class ('A' , bases = ['Intermediate' ], ipa = schema .IpaInfo (on_arguments = {'a' : 'Base' , 'i' : 'int' })),
445+ 'B' : schema .Class ('B' , bases = ['Base' ], ipa = schema .IpaInfo (from_class = 'Base' )),
446+ 'C' : schema .Class ('C' , bases = ['Root' ]),
447+ }
448+
449+
417450def test_class_docstring ():
418451 @schema .load
419452 class data :
0 commit comments