@@ -697,3 +697,49 @@ def test_out_of_range(self):
697697 with pytest .raises ((OverflowError , OSError , ValueError )):
698698 # Large enough to fail on most systems (Year 300,000+)
699699 _helpers .utcfromtimestamp (9999999999999 )
700+
701+
702+ class TestLazyBasesMeta :
703+ def test_subclass_and_instance_check (self ):
704+ class RealBase (object ):
705+ pass
706+
707+ class DummyBase (_helpers .HeapDummy ):
708+ pass
709+
710+ class LazyClass (DummyBase , metaclass = _helpers .LazyBasesMeta ):
711+ pass
712+
713+ class LazyClassMeta (_helpers .LazyBasesMeta ):
714+ def _perform_resolve_bases (cls ):
715+ cls .__bases__ = (RealBase ,)
716+
717+ # Re-define LazyClass with the proper metaclass that resolves to RealBase
718+ class LazyClassResolved (DummyBase , metaclass = LazyClassMeta ):
719+ pass
720+
721+ # Verify initial bases
722+ assert type .__getattribute__ (LazyClassResolved , "__bases__" ) == (DummyBase ,)
723+
724+ # Trigger subclass check where lazy class is the second argument (supported)
725+ # This should resolve the bases of LazyClassResolved
726+ assert not issubclass (int , LazyClassResolved )
727+
728+ # Verify bases are resolved
729+ assert type .__getattribute__ (LazyClassResolved , "__bases__" ) == (RealBase ,)
730+
731+ # Now the first-argument subclass check should pass
732+ assert issubclass (LazyClassResolved , RealBase )
733+
734+ # Reset resolved state for instance check test
735+ class LazyClassForInstance (DummyBase , metaclass = LazyClassMeta ):
736+ pass
737+
738+ assert type .__getattribute__ (LazyClassForInstance , "__bases__" ) == (DummyBase ,)
739+
740+ # Trigger instance check (supported) to resolve the bases of LazyClassForInstance
741+ assert not isinstance (123 , LazyClassForInstance )
742+
743+ # Verify bases are resolved
744+ assert type .__getattribute__ (LazyClassForInstance , "__bases__" ) == (RealBase ,)
745+
0 commit comments