Skip to content

Commit 9d20e1a

Browse files
gh-92107: Add tests that subscription works on arbitrary named tuple types (GH-92304)
1 parent 000a072 commit 9d20e1a

File tree

2 files changed

+26
-0
lines changed

2 files changed

+26
-0
lines changed

Lib/test/test_collections.py

+12
Original file line numberDiff line numberDiff line change
@@ -698,6 +698,18 @@ def test_match_args(self):
698698
Point = namedtuple('Point', 'x y')
699699
self.assertEqual(Point.__match_args__, ('x', 'y'))
700700

701+
def test_non_generic_subscript(self):
702+
# For backward compatibility, subscription works
703+
# on arbitrary named tuple types.
704+
Group = collections.namedtuple('Group', 'key group')
705+
A = Group[int, list[int]]
706+
self.assertEqual(A.__origin__, Group)
707+
self.assertEqual(A.__parameters__, ())
708+
self.assertEqual(A.__args__, (int, list[int]))
709+
a = A(1, [2])
710+
self.assertIs(type(a), Group)
711+
self.assertEqual(a, (1, [2]))
712+
701713

702714
################################################################################
703715
### Abstract Base Classes

Lib/test/test_typing.py

+14
Original file line numberDiff line numberDiff line change
@@ -5736,6 +5736,20 @@ class Y(Generic[T], NamedTuple):
57365736
with self.assertRaises(TypeError):
57375737
G[int, str]
57385738

5739+
def test_non_generic_subscript(self):
5740+
# For backward compatibility, subscription works
5741+
# on arbitrary NamedTuple types.
5742+
class Group(NamedTuple):
5743+
key: T
5744+
group: list[T]
5745+
A = Group[int]
5746+
self.assertEqual(A.__origin__, Group)
5747+
self.assertEqual(A.__parameters__, ())
5748+
self.assertEqual(A.__args__, (int,))
5749+
a = A(1, [2])
5750+
self.assertIs(type(a), Group)
5751+
self.assertEqual(a, (1, [2]))
5752+
57395753
def test_namedtuple_keyword_usage(self):
57405754
LocalEmployee = NamedTuple("LocalEmployee", name=str, age=int)
57415755
nick = LocalEmployee('Nick', 25)

0 commit comments

Comments
 (0)