@@ -901,8 +901,8 @@ class AandB(A): # pragma: nocover
901901 def method_b (self ):
902902 pass
903903
904+ # expected to fail since it's missing method_b
904905 with pytest .raises (InvalidImplementation ) as exc :
905-
906906 class JustA (implements (AandB )): # pragma: nocover
907907 def method_a (self ):
908908 pass
@@ -917,8 +917,8 @@ class JustA failed to implement interface AandB:
917917 )
918918 assert actual_message == expected_message
919919
920+ # expected to fail since it's missing method_a
920921 with pytest .raises (InvalidImplementation ) as exc :
921-
922922 class JustB (implements (AandB )): # pragma: nocover
923923 def method_b (self ):
924924 pass
@@ -933,6 +933,12 @@ class JustB failed to implement interface AandB:
933933 )
934934 assert actual_message == expected_message
935935
936+ # expected to pass since interface A only requires method_a
937+ class JustA2 (implements (A )): # pragma: nocover
938+ def method_a (self ):
939+ pass
940+
941+ # expected to pass since it implements both methods
936942 class Both (implements (AandB )): # pragma: nocover
937943 def method_a (self ):
938944 pass
@@ -950,8 +956,8 @@ class B(A): # pragma: nocover
950956 def method_b (self ):
951957 pass
952958
959+ # expected to fail since method_a has different signature in interface A
953960 with pytest .raises (TypeError ) as exc :
954-
955961 class C1 (A ): # pragma: nocover
956962 def method_a (self , x ):
957963 pass
@@ -964,9 +970,9 @@ def method_a(self, x):
964970 )
965971 assert actual_message == expected_message
966972
973+ # expected to fail since method_b has different signature in interface B
967974 with pytest .raises (TypeError ) as exc :
968-
969- class C2 (A ): # pragma: nocover
975+ class C2 (B ): # pragma: nocover
970976 def method_b (self , y , z = None ):
971977 pass
972978
@@ -978,6 +984,11 @@ def method_b(self, y, z=None):
978984 )
979985 assert actual_message == expected_message
980986
987+ # expected to pass since method_b does not exist in interface A
988+ class C3 (A ): # pragma: nocover
989+ def method_b (self , y , z = None ):
990+ pass
991+
981992
982993def test_subclass_allow_compatible_extension ():
983994 class A (Interface ): # pragma: nocover
0 commit comments