| -- 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()))) |