@@ -901,8 +901,8 @@ class AandB(A): # pragma: nocover
901
901
def method_b (self ):
902
902
pass
903
903
904
+ # expected to fail since it's missing method_b
904
905
with pytest .raises (InvalidImplementation ) as exc :
905
-
906
906
class JustA (implements (AandB )): # pragma: nocover
907
907
def method_a (self ):
908
908
pass
@@ -917,8 +917,8 @@ class JustA failed to implement interface AandB:
917
917
)
918
918
assert actual_message == expected_message
919
919
920
+ # expected to fail since it's missing method_a
920
921
with pytest .raises (InvalidImplementation ) as exc :
921
-
922
922
class JustB (implements (AandB )): # pragma: nocover
923
923
def method_b (self ):
924
924
pass
@@ -933,6 +933,12 @@ class JustB failed to implement interface AandB:
933
933
)
934
934
assert actual_message == expected_message
935
935
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
936
942
class Both (implements (AandB )): # pragma: nocover
937
943
def method_a (self ):
938
944
pass
@@ -950,8 +956,8 @@ class B(A): # pragma: nocover
950
956
def method_b (self ):
951
957
pass
952
958
959
+ # expected to fail since method_a has different signature in interface A
953
960
with pytest .raises (TypeError ) as exc :
954
-
955
961
class C1 (A ): # pragma: nocover
956
962
def method_a (self , x ):
957
963
pass
@@ -964,9 +970,9 @@ def method_a(self, x):
964
970
)
965
971
assert actual_message == expected_message
966
972
973
+ # expected to fail since method_b has different signature in interface B
967
974
with pytest .raises (TypeError ) as exc :
968
-
969
- class C2 (A ): # pragma: nocover
975
+ class C2 (B ): # pragma: nocover
970
976
def method_b (self , y , z = None ):
971
977
pass
972
978
@@ -978,6 +984,11 @@ def method_b(self, y, z=None):
978
984
)
979
985
assert actual_message == expected_message
980
986
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
+
981
992
982
993
def test_subclass_allow_compatible_extension ():
983
994
class A (Interface ): # pragma: nocover
0 commit comments