Skip to content

Commit 4be62c6

Browse files
committed
add tests for accessing class constructor methods directly
1 parent 9e49aa1 commit 4be62c6

File tree

1 file changed

+65
-0
lines changed

1 file changed

+65
-0
lines changed

test-data/unit/check-deprecated.test

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -814,6 +814,71 @@ class C:
814814
[builtins fixtures/callable.pyi]
815815

816816

817+
[case testDeprecatedClassConstructorMethodAccessedFromOutsideMethod]
818+
# flags: --enable-error-code=deprecated
819+
820+
from typing_extensions import TypeAlias, deprecated
821+
822+
class C:
823+
@deprecated("use make_c() instead")
824+
def __new__(cls) -> C: ...
825+
826+
@deprecated("use make_c() instead")
827+
def __init__(self) -> None: ...
828+
829+
@classmethod
830+
def make_c(cls) -> C: ...
831+
832+
C_alias: TypeAlias = C
833+
C_type_obj: type[C]
834+
c: C
835+
836+
C.__new__ # E: function __main__.C.__new__ is deprecated: use make_c() instead
837+
C.__new__(C) # E: function __main__.C.__new__ is deprecated: use make_c() instead
838+
C.__init__ # E: function __main__.C.__init__ is deprecated: use make_c() instead
839+
C.__init__(c) # E: function __main__.C.__init__ is deprecated: use make_c() instead
840+
C_alias.__new__ # E: function __main__.C.__new__ is deprecated: use make_c() instead
841+
C_alias.__new__(C) # E: function __main__.C.__new__ is deprecated: use make_c() instead
842+
C_alias.__init__ # E: function __main__.C.__init__ is deprecated: use make_c() instead
843+
C_alias.__init__(c) # E: function __main__.C.__init__ is deprecated: use make_c() instead
844+
C_type_obj.__new__ # E: function __main__.C.__new__ is deprecated: use make_c() instead
845+
C_type_obj.__new__(C) # E: function __main__.C.__new__ is deprecated: use make_c() instead
846+
C_type_obj.__init__ # E: function __main__.C.__init__ is deprecated: use make_c() instead
847+
C_type_obj.__init__(c) # E: function __main__.C.__init__ is deprecated: use make_c() instead
848+
849+
(C.__new__, C_alias.__new__, C_type_obj.__new__, C.make_c, c.make_c) # E: function __main__.C.__new__ is deprecated: use make_c() instead
850+
(C.__init__, C_alias.__init__, C_type_obj.__init__, C.make_c, c.make_c) # E: function __main__.C.__init__ is deprecated: use make_c() instead
851+
852+
[builtins fixtures/tuple.pyi]
853+
854+
855+
[case testDeprecatedMethodClassConstructorAccessedFromInsideMethod]
856+
# flags: --enable-error-code=deprecated
857+
858+
from typing_extensions import deprecated
859+
860+
class C:
861+
@deprecated("use make_c() instead")
862+
def __new__(cls) -> C: ...
863+
@deprecated("use make_c() instead")
864+
def __init__(self) -> None: ...
865+
866+
@classmethod
867+
def make_c(cls) -> C: ...
868+
869+
@classmethod
870+
def class_method(cls) -> None:
871+
self: C
872+
cls.__new__ # E: function __main__.C.__new__ is deprecated: use make_c() instead
873+
cls.__new__(cls) # E: function __main__.C.__new__ is deprecated: use make_c() instead
874+
cls.__init__ # E: function __main__.C.__init__ is deprecated: use make_c() instead
875+
cls.__init__(self) # E: function __main__.C.__init__ is deprecated: use make_c() instead
876+
(cls.__new__, cls.__new__, cls.make_c) # E: function __main__.C.__new__ is deprecated: use make_c() instead
877+
(cls.__init__, cls.__init__, cls.make_c) # E: function __main__.C.__init__ is deprecated: use make_c() instead
878+
879+
[builtins fixtures/tuple.pyi]
880+
881+
817882
[case testDeprecatedClassWithDeprecatedMethod]
818883
# flags: --enable-error-code=deprecated
819884

0 commit comments

Comments
 (0)