From f06c65f09d24757e1733370d72eea3962282fb53 Mon Sep 17 00:00:00 2001 From: hauntsaninja Date: Tue, 3 Jun 2025 00:32:38 -0700 Subject: [PATCH] Add regression test for dataclass typeguard --- test-data/unit/check-dataclasses.test | 9 +++++++++ test-data/unit/check-typeguard.test | 19 +++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/test-data/unit/check-dataclasses.test b/test-data/unit/check-dataclasses.test index 8117e3a96938..cfd14ff07b3f 100644 --- a/test-data/unit/check-dataclasses.test +++ b/test-data/unit/check-dataclasses.test @@ -2609,3 +2609,12 @@ class B2(B1): # E: A NamedTuple cannot be a dataclass pass [builtins fixtures/tuple.pyi] + +[case testDataclassesTypeGuard] +import dataclasses + +raw_target: object + +if isinstance(raw_target, type) and dataclasses.is_dataclass(raw_target): + reveal_type(raw_target) # N: Revealed type is "type[dataclasses.DataclassInstance]" +[builtins fixtures/tuple.pyi] diff --git a/test-data/unit/check-typeguard.test b/test-data/unit/check-typeguard.test index e17a7f80e756..0b512962b8d1 100644 --- a/test-data/unit/check-typeguard.test +++ b/test-data/unit/check-typeguard.test @@ -777,3 +777,22 @@ def handle(model: Model) -> int: return process_model(model) return 0 [builtins fixtures/tuple.pyi] + + +[case testOverloadedTypeGuardType] +from __future__ import annotations +from typing_extensions import TypeIs, Never, overload + +class X: ... + +@overload # E: An overloaded function outside a stub file must have an implementation +def is_xlike(obj: Never) -> TypeIs[X | type[X]]: ... # type: ignore +@overload +def is_xlike(obj: type) -> TypeIs[type[X]]: ... +@overload +def is_xlike(obj: object) -> TypeIs[X | type[X]]: ... + +raw_target: object +if isinstance(raw_target, type) and is_xlike(raw_target): + reveal_type(raw_target) # N: Revealed type is "type[__main__.X]" +[builtins fixtures/tuple.pyi]