Skip to content

Commit 14efdf2

Browse files
authored
[stubtest] Test NamedTuple definitions with default fields (#15774)
This is a test case for #15680 from `stubtest`'s point of view.
1 parent da1853f commit 14efdf2

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed

mypy/test/teststubtest.py

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ class Mapping(Generic[_K, _V]): ...
6868
class Match(Generic[AnyStr]): ...
6969
class Sequence(Iterable[_T_co]): ...
7070
class Tuple(Sequence[_T_co]): ...
71+
class NamedTuple(tuple[Any, ...]): ...
7172
def overload(func: _T) -> _T: ...
7273
"""
7374

@@ -82,6 +83,7 @@ def overload(func: _T) -> _T: ...
8283
class object:
8384
__module__: str
8485
def __init__(self) -> None: pass
86+
def __repr__(self) -> str: pass
8587
class type: ...
8688
8789
class tuple(Sequence[T_co], Generic[T_co]): ...
@@ -1599,6 +1601,72 @@ class Y(TypedDict):
15991601
error=None,
16001602
)
16011603

1604+
@collect_cases
1605+
def test_named_tuple(self) -> Iterator[Case]:
1606+
yield Case(
1607+
stub="from typing import NamedTuple",
1608+
runtime="from typing import NamedTuple",
1609+
error=None,
1610+
)
1611+
yield Case(
1612+
stub="""
1613+
class X1(NamedTuple):
1614+
bar: int
1615+
foo: str = ...
1616+
""",
1617+
runtime="""
1618+
class X1(NamedTuple):
1619+
bar: int
1620+
foo: str = 'a'
1621+
""",
1622+
error=None,
1623+
)
1624+
yield Case(
1625+
stub="""
1626+
class X2(NamedTuple):
1627+
bar: int
1628+
foo: str
1629+
""",
1630+
runtime="""
1631+
class X2(NamedTuple):
1632+
bar: int
1633+
foo: str = 'a'
1634+
""",
1635+
# `__new__` will miss a default value for a `foo` parameter,
1636+
# but we don't generate special errors for `foo` missing `...` part.
1637+
error="X2.__new__",
1638+
)
1639+
1640+
@collect_cases
1641+
def test_named_tuple_typing_and_collections(self) -> Iterator[Case]:
1642+
yield Case(
1643+
stub="from typing import NamedTuple",
1644+
runtime="from collections import namedtuple",
1645+
error=None,
1646+
)
1647+
yield Case(
1648+
stub="""
1649+
class X1(NamedTuple):
1650+
bar: int
1651+
foo: str = ...
1652+
""",
1653+
runtime="""
1654+
X1 = namedtuple('X1', ['bar', 'foo'], defaults=['a'])
1655+
""",
1656+
error=None,
1657+
)
1658+
yield Case(
1659+
stub="""
1660+
class X2(NamedTuple):
1661+
bar: int
1662+
foo: str
1663+
""",
1664+
runtime="""
1665+
X2 = namedtuple('X1', ['bar', 'foo'], defaults=['a'])
1666+
""",
1667+
error="X2.__new__",
1668+
)
1669+
16021670
@collect_cases
16031671
def test_type_var(self) -> Iterator[Case]:
16041672
yield Case(

0 commit comments

Comments
 (0)