Skip to content

Commit 757e827

Browse files
committed
Add tests.
1 parent 3b56ac3 commit 757e827

File tree

1 file changed

+212
-0
lines changed

1 file changed

+212
-0
lines changed

tests/test_type_eval.py

Lines changed: 212 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -716,6 +716,218 @@ class B(A):
716716
assert eval_typing(ft(B)) == classmethod[B, tuple[()], tuple[bool, str]]
717717

718718

719+
def test_getmember_11():
720+
class C:
721+
def member_method(self, x: T) -> T: ...
722+
@classmethod
723+
def class_method(cls, x: T) -> T: ...
724+
@staticmethod
725+
def static_method(x: T) -> T: ...
726+
727+
# member method
728+
m = eval_typing(GetMember[C, Literal["member_method"]])
729+
assert eval_typing(GetName[m]) == Literal["member_method"]
730+
assert eval_typing(IsAssignable[GetType[m], GenericCallable])
731+
assert eval_typing(GetQuals[m]) == Literal["ClassVar"]
732+
assert eval_typing(GetDefiner[m]) == C
733+
734+
ft = m.__args__[1].__args__[1]
735+
with _ensure_context():
736+
assert (
737+
ft(str)
738+
== Callable[
739+
[Param[Literal["self"], C], Param[Literal["x"], str, Never]],
740+
str,
741+
]
742+
)
743+
744+
# class method
745+
m = eval_typing(GetMember[C, Literal["class_method"]])
746+
assert eval_typing(GetName[m]) == Literal["class_method"]
747+
assert eval_typing(IsAssignable[GetType[m], GenericCallable])
748+
assert eval_typing(GetQuals[m]) == Literal["ClassVar"]
749+
assert eval_typing(GetDefiner[m]) == C
750+
751+
ft = m.__args__[1].__args__[1]
752+
with _ensure_context():
753+
assert (
754+
ft(str)
755+
== classmethod[
756+
C,
757+
tuple[Param[Literal["x"], str, Never]],
758+
str,
759+
]
760+
)
761+
762+
# static method
763+
m = eval_typing(GetMember[C, Literal["static_method"]])
764+
assert eval_typing(GetName[m]) == Literal["static_method"]
765+
assert eval_typing(IsAssignable[GetType[m], GenericCallable])
766+
assert eval_typing(GetQuals[m]) == Literal["ClassVar"]
767+
assert eval_typing(GetDefiner[m]) == C
768+
769+
ft = m.__args__[1].__args__[1]
770+
with _ensure_context():
771+
assert (
772+
ft(str) == staticmethod[tuple[Param[Literal["x"], str, Never]], str]
773+
)
774+
775+
776+
def test_getmember_12():
777+
class C[T]:
778+
def member_method(
779+
self, x: T
780+
) -> set[T] if IsAssignable[T, int] else T: ...
781+
@classmethod
782+
def class_method(
783+
cls, x: T
784+
) -> set[T] if IsAssignable[T, int] else T: ...
785+
@staticmethod
786+
def static_method(x: T) -> set[T] if IsAssignable[T, int] else T: ...
787+
788+
# member method
789+
m = eval_typing(GetMember[C[int], Literal["member_method"]])
790+
assert eval_typing(GetName[m]) == Literal["member_method"]
791+
assert (
792+
eval_typing(GetType[m])
793+
== Callable[
794+
[Param[Literal["self"], C[int]], Param[Literal["x"], int]], set[int]
795+
]
796+
)
797+
assert eval_typing(GetQuals[m]) == Literal["ClassVar"]
798+
assert eval_typing(GetDefiner[m]) == C[int]
799+
800+
m = eval_typing(GetMember[C[str], Literal["member_method"]])
801+
assert eval_typing(GetName[m]) == Literal["member_method"]
802+
assert (
803+
eval_typing(GetType[m])
804+
== Callable[
805+
[Param[Literal["self"], C[str]], Param[Literal["x"], str]], str
806+
]
807+
)
808+
assert eval_typing(GetQuals[m]) == Literal["ClassVar"]
809+
assert eval_typing(GetDefiner[m]) == C[str]
810+
811+
# class method
812+
m = eval_typing(GetMember[C[int], Literal["class_method"]])
813+
assert eval_typing(GetName[m]) == Literal["class_method"]
814+
assert (
815+
eval_typing(GetType[m])
816+
== classmethod[C[int], tuple[Param[Literal["x"], int]], set[int]]
817+
)
818+
assert eval_typing(GetQuals[m]) == Literal["ClassVar"]
819+
assert eval_typing(GetDefiner[m]) == C[int]
820+
821+
m = eval_typing(GetMember[C[str], Literal["class_method"]])
822+
assert eval_typing(GetName[m]) == Literal["class_method"]
823+
assert (
824+
eval_typing(GetType[m])
825+
== classmethod[C[str], tuple[Param[Literal["x"], str]], str]
826+
)
827+
assert eval_typing(GetQuals[m]) == Literal["ClassVar"]
828+
assert eval_typing(GetDefiner[m]) == C[str]
829+
830+
# static method
831+
m = eval_typing(GetMember[C[int], Literal["static_method"]])
832+
assert eval_typing(GetName[m]) == Literal["static_method"]
833+
assert (
834+
eval_typing(GetType[m])
835+
== staticmethod[tuple[Param[Literal["x"], int]], set[int]]
836+
)
837+
assert eval_typing(GetQuals[m]) == Literal["ClassVar"]
838+
assert eval_typing(GetDefiner[m]) == C[int]
839+
840+
m = eval_typing(GetMember[C[str], Literal["static_method"]])
841+
assert eval_typing(GetName[m]) == Literal["static_method"]
842+
assert (
843+
eval_typing(GetType[m])
844+
== staticmethod[tuple[Param[Literal["x"], str]], str]
845+
)
846+
assert eval_typing(GetQuals[m]) == Literal["ClassVar"]
847+
assert eval_typing(GetDefiner[m]) == C[str]
848+
849+
850+
def test_getmember_13():
851+
# T defined externally
852+
class C:
853+
def member_method(
854+
self, x: T
855+
) -> set[T] if IsAssignable[T, int] else T: ...
856+
@classmethod
857+
def class_method(
858+
cls, x: T
859+
) -> set[T] if IsAssignable[T, int] else T: ...
860+
@staticmethod
861+
def static_method(x: T) -> set[T] if IsAssignable[T, int] else T: ...
862+
863+
# member method
864+
m = eval_typing(GetMember[C, Literal["member_method"]])
865+
assert eval_typing(GetName[m]) == Literal["member_method"]
866+
assert eval_typing(IsAssignable[GetType[m], GenericCallable])
867+
assert eval_typing(GetQuals[m]) == Literal["ClassVar"]
868+
assert eval_typing(GetDefiner[m]) == C
869+
870+
ft = m.__args__[1].__args__[1]
871+
with _ensure_context():
872+
assert (
873+
ft(str)
874+
== Callable[
875+
[Param[Literal["self"], C], Param[Literal["x"], str, Never]],
876+
str,
877+
]
878+
)
879+
assert (
880+
ft(int)
881+
== Callable[
882+
[Param[Literal["self"], C], Param[Literal["x"], int, Never]],
883+
set[int],
884+
]
885+
)
886+
887+
# class method
888+
m = eval_typing(GetMember[C, Literal["class_method"]])
889+
assert eval_typing(GetName[m]) == Literal["class_method"]
890+
assert eval_typing(IsAssignable[GetType[m], GenericCallable])
891+
assert eval_typing(GetQuals[m]) == Literal["ClassVar"]
892+
assert eval_typing(GetDefiner[m]) == C
893+
894+
ft = m.__args__[1].__args__[1]
895+
with _ensure_context():
896+
assert (
897+
ft(str)
898+
== classmethod[
899+
C,
900+
tuple[Param[Literal["x"], str, Never]],
901+
str,
902+
]
903+
)
904+
assert (
905+
ft(int)
906+
== classmethod[
907+
C,
908+
tuple[Param[Literal["x"], int, Never]],
909+
set[int],
910+
]
911+
)
912+
913+
# static method
914+
m = eval_typing(GetMember[C, Literal["static_method"]])
915+
assert eval_typing(GetName[m]) == Literal["static_method"]
916+
assert eval_typing(IsAssignable[GetType[m], GenericCallable])
917+
assert eval_typing(GetQuals[m]) == Literal["ClassVar"]
918+
assert eval_typing(GetDefiner[m]) == C
919+
920+
ft = m.__args__[1].__args__[1]
921+
with _ensure_context():
922+
assert (
923+
ft(str) == staticmethod[tuple[Param[Literal["x"], str, Never]], str]
924+
)
925+
assert (
926+
ft(int)
927+
== staticmethod[tuple[Param[Literal["x"], int, Never]], set[int]]
928+
)
929+
930+
719931
def test_getarg_never():
720932
d = eval_typing(GetArg[Never, object, Literal[0]])
721933
assert d is Never

0 commit comments

Comments
 (0)