blob: 87e0e9d5d283287ffe14d5544b11df0b7ffc4a33 [file] [log] [blame] [edit]
-- Test cases for parser -- Python 3.10 syntax (match statement)
--
-- See parse.test for a description of this file format.
[case testSimpleMatch]
match a:
case 1:
pass
[out]
MypyFile:1(
MatchStmt:1(
NameExpr(a)
Pattern(
ValuePattern:2(
IntExpr(1)))
Body(
PassStmt:3())))
[case testTupleMatch]
match a, b:
case 1:
pass
[out]
MypyFile:1(
MatchStmt:1(
TupleExpr:1(
NameExpr(a)
NameExpr(b))
Pattern(
ValuePattern:2(
IntExpr(1)))
Body(
PassStmt:3())))
[case testMatchWithGuard]
match a:
case 1 if f():
pass
case d if d > 5:
pass
[out]
MypyFile:1(
MatchStmt:1(
NameExpr(a)
Pattern(
ValuePattern:2(
IntExpr(1)))
Guard(
CallExpr:2(
NameExpr(f)
Args()))
Body(
PassStmt:3())
Pattern(
AsPattern:4(
NameExpr(d)))
Guard(
ComparisonExpr:4(
>
NameExpr(d)
IntExpr(5)))
Body(
PassStmt:5())))
[case testAsPattern]
match a:
case 1 as b:
pass
[out]
MypyFile:1(
MatchStmt:1(
NameExpr(a)
Pattern(
AsPattern:2(
ValuePattern:2(
IntExpr(1))
NameExpr(b)))
Body(
PassStmt:3())))
[case testLiteralPattern]
match a:
case 1:
pass
case -1:
pass
case 1+2j:
pass
case -1+2j:
pass
case 1-2j:
pass
case -1-2j:
pass
case "str":
pass
case b"bytes":
pass
case r"raw_string":
pass
case None:
pass
case True:
pass
case False:
pass
[out]
MypyFile:1(
MatchStmt:1(
NameExpr(a)
Pattern(
ValuePattern:2(
IntExpr(1)))
Body(
PassStmt:3())
Pattern(
ValuePattern:4(
UnaryExpr:4(
-
IntExpr(1))))
Body(
PassStmt:5())
Pattern(
ValuePattern:6(
OpExpr:6(
+
IntExpr(1)
ComplexExpr(2j))))
Body(
PassStmt:7())
Pattern(
ValuePattern:8(
OpExpr:8(
+
UnaryExpr:8(
-
IntExpr(1))
ComplexExpr(2j))))
Body(
PassStmt:9())
Pattern(
ValuePattern:10(
OpExpr:10(
-
IntExpr(1)
ComplexExpr(2j))))
Body(
PassStmt:11())
Pattern(
ValuePattern:12(
OpExpr:12(
-
UnaryExpr:12(
-
IntExpr(1))
ComplexExpr(2j))))
Body(
PassStmt:13())
Pattern(
ValuePattern:14(
StrExpr(str)))
Body(
PassStmt:15())
Pattern(
ValuePattern:16(
BytesExpr(bytes)))
Body(
PassStmt:17())
Pattern(
ValuePattern:18(
StrExpr(raw_string)))
Body(
PassStmt:19())
Pattern(
SingletonPattern:20())
Body(
PassStmt:21())
Pattern(
SingletonPattern:22(
True))
Body(
PassStmt:23())
Pattern(
SingletonPattern:24(
False))
Body(
PassStmt:25())))
[case testCapturePattern]
match a:
case x:
pass
case longName:
pass
[out]
MypyFile:1(
MatchStmt:1(
NameExpr(a)
Pattern(
AsPattern:2(
NameExpr(x)))
Body(
PassStmt:3())
Pattern(
AsPattern:4(
NameExpr(longName)))
Body(
PassStmt:5())))
[case testWildcardPattern]
match a:
case _:
pass
[out]
MypyFile:1(
MatchStmt:1(
NameExpr(a)
Pattern(
AsPattern:2())
Body(
PassStmt:3())))
[case testValuePattern]
match a:
case b.c:
pass
case b.c.d.e.f:
pass
[out]
MypyFile:1(
MatchStmt:1(
NameExpr(a)
Pattern(
ValuePattern:2(
MemberExpr:2(
NameExpr(b)
c)))
Body(
PassStmt:3())
Pattern(
ValuePattern:4(
MemberExpr:4(
MemberExpr:4(
MemberExpr:4(
MemberExpr:4(
NameExpr(b)
c)
d)
e)
f)))
Body(
PassStmt:5())))
[case testGroupPattern]
# This is optimized out by the compiler. It doesn't appear in the ast
match a:
case (1):
pass
[out]
MypyFile:1(
MatchStmt:2(
NameExpr(a)
Pattern(
ValuePattern:3(
IntExpr(1)))
Body(
PassStmt:4())))
[case testSequencePattern]
match a:
case []:
pass
case ():
pass
case [1]:
pass
case (1,):
pass
case 1,:
pass
case [1, 2, 3]:
pass
case (1, 2, 3):
pass
case 1, 2, 3:
pass
case [1, *a, 2]:
pass
case (1, *a, 2):
pass
case 1, *a, 2:
pass
case [1, *_, 2]:
pass
case (1, *_, 2):
pass
case 1, *_, 2:
pass
[out]
MypyFile:1(
MatchStmt:1(
NameExpr(a)
Pattern(
SequencePattern:2())
Body(
PassStmt:3())
Pattern(
SequencePattern:4())
Body(
PassStmt:5())
Pattern(
SequencePattern:6(
ValuePattern:6(
IntExpr(1))))
Body(
PassStmt:7())
Pattern(
SequencePattern:8(
ValuePattern:8(
IntExpr(1))))
Body(
PassStmt:9())
Pattern(
SequencePattern:10(
ValuePattern:10(
IntExpr(1))))
Body(
PassStmt:11())
Pattern(
SequencePattern:12(
ValuePattern:12(
IntExpr(1))
ValuePattern:12(
IntExpr(2))
ValuePattern:12(
IntExpr(3))))
Body(
PassStmt:13())
Pattern(
SequencePattern:14(
ValuePattern:14(
IntExpr(1))
ValuePattern:14(
IntExpr(2))
ValuePattern:14(
IntExpr(3))))
Body(
PassStmt:15())
Pattern(
SequencePattern:16(
ValuePattern:16(
IntExpr(1))
ValuePattern:16(
IntExpr(2))
ValuePattern:16(
IntExpr(3))))
Body(
PassStmt:17())
Pattern(
SequencePattern:18(
ValuePattern:18(
IntExpr(1))
StarredPattern:18(
NameExpr(a))
ValuePattern:18(
IntExpr(2))))
Body(
PassStmt:19())
Pattern(
SequencePattern:20(
ValuePattern:20(
IntExpr(1))
StarredPattern:20(
NameExpr(a))
ValuePattern:20(
IntExpr(2))))
Body(
PassStmt:21())
Pattern(
SequencePattern:22(
ValuePattern:22(
IntExpr(1))
StarredPattern:22(
NameExpr(a))
ValuePattern:22(
IntExpr(2))))
Body(
PassStmt:23())
Pattern(
SequencePattern:24(
ValuePattern:24(
IntExpr(1))
StarredPattern:24()
ValuePattern:24(
IntExpr(2))))
Body(
PassStmt:25())
Pattern(
SequencePattern:26(
ValuePattern:26(
IntExpr(1))
StarredPattern:26()
ValuePattern:26(
IntExpr(2))))
Body(
PassStmt:27())
Pattern(
SequencePattern:28(
ValuePattern:28(
IntExpr(1))
StarredPattern:28()
ValuePattern:28(
IntExpr(2))))
Body(
PassStmt:29())))
[case testMappingPattern]
match a:
case {'k': v}:
pass
case {a.b: v}:
pass
case {1: v}:
pass
case {a.c: v}:
pass
case {'k': v1, a.b: v2, 1: v3, a.c: v4}:
pass
case {'k1': 1, 'k2': "str", 'k3': b'bytes', 'k4': None}:
pass
case {'k': v, **r}:
pass
case {**r}:
pass
[out]
MypyFile:1(
MatchStmt:1(
NameExpr(a)
Pattern(
MappingPattern:2(
Key(
StrExpr(k))
Value(
AsPattern:2(
NameExpr(v)))))
Body(
PassStmt:3())
Pattern(
MappingPattern:4(
Key(
MemberExpr:4(
NameExpr(a)
b))
Value(
AsPattern:4(
NameExpr(v)))))
Body(
PassStmt:5())
Pattern(
MappingPattern:6(
Key(
IntExpr(1))
Value(
AsPattern:6(
NameExpr(v)))))
Body(
PassStmt:7())
Pattern(
MappingPattern:8(
Key(
MemberExpr:8(
NameExpr(a)
c))
Value(
AsPattern:8(
NameExpr(v)))))
Body(
PassStmt:9())
Pattern(
MappingPattern:10(
Key(
StrExpr(k))
Value(
AsPattern:10(
NameExpr(v1)))
Key(
MemberExpr:10(
NameExpr(a)
b))
Value(
AsPattern:10(
NameExpr(v2)))
Key(
IntExpr(1))
Value(
AsPattern:10(
NameExpr(v3)))
Key(
MemberExpr:10(
NameExpr(a)
c))
Value(
AsPattern:10(
NameExpr(v4)))))
Body(
PassStmt:11())
Pattern(
MappingPattern:12(
Key(
StrExpr(k1))
Value(
ValuePattern:12(
IntExpr(1)))
Key(
StrExpr(k2))
Value(
ValuePattern:12(
StrExpr(str)))
Key(
StrExpr(k3))
Value(
ValuePattern:12(
BytesExpr(bytes)))
Key(
StrExpr(k4))
Value(
SingletonPattern:12())))
Body(
PassStmt:13())
Pattern(
MappingPattern:14(
Key(
StrExpr(k))
Value(
AsPattern:14(
NameExpr(v)))
Rest(
NameExpr(r))))
Body(
PassStmt:15())
Pattern(
MappingPattern:16(
Rest(
NameExpr(r))))
Body(
PassStmt:17())))
[case testClassPattern]
match a:
case A():
pass
case B(1, 2):
pass
case B(1, b=2):
pass
case B(a=1, b=2):
pass
[out]
MypyFile:1(
MatchStmt:1(
NameExpr(a)
Pattern(
ClassPattern:2(
NameExpr(A)))
Body(
PassStmt:3())
Pattern(
ClassPattern:4(
NameExpr(B)
Positionals(
ValuePattern:4(
IntExpr(1))
ValuePattern:4(
IntExpr(2)))))
Body(
PassStmt:5())
Pattern(
ClassPattern:6(
NameExpr(B)
Positionals(
ValuePattern:6(
IntExpr(1)))
Keyword(
b
ValuePattern:6(
IntExpr(2)))))
Body(
PassStmt:7())
Pattern(
ClassPattern:8(
NameExpr(B)
Keyword(
a
ValuePattern:8(
IntExpr(1)))
Keyword(
b
ValuePattern:8(
IntExpr(2)))))
Body(
PassStmt:9())))