|
1 | 1 | from unittest import TestCase, main
|
2 | 2 |
|
3 |
| -from lark import Token |
| 3 | +from lark import Token, Tree |
4 | 4 |
|
5 | 5 |
|
6 | 6 | class TestPatternMatching(TestCase):
|
@@ -46,6 +46,51 @@ def test_matches_with_bad_token_type(self):
|
46 | 46 | case _:
|
47 | 47 | pass
|
48 | 48 |
|
| 49 | + def test_match_on_tree(self): |
| 50 | + tree1 = Tree('a', [Tree(x, y) for x, y in zip('bcd', 'xyz')]) |
| 51 | + tree2 = Tree('a', [ |
| 52 | + Tree('b', [Token('T', 'x')]), |
| 53 | + Tree('c', [Token('T', 'y')]), |
| 54 | + Tree('d', [Tree('z', [Token('T', 'zz'), Tree('zzz', 'zzz')])]), |
| 55 | + ]) |
| 56 | + |
| 57 | + match tree1: |
| 58 | + case Tree('X', []): |
| 59 | + assert False |
| 60 | + case Tree('a', []): |
| 61 | + assert False |
| 62 | + case Tree(_, 'b'): |
| 63 | + assert False |
| 64 | + case Tree('X', _): |
| 65 | + assert False |
| 66 | + tree = Tree('q', [Token('T', 'x')]) |
| 67 | + match tree: |
| 68 | + case Tree('q', [Token('T', 'x')]): |
| 69 | + pass |
| 70 | + case _: |
| 71 | + assert False |
| 72 | + tr = Tree('a', [Tree('b', [Token('T', 'a')])]) |
| 73 | + match tr: |
| 74 | + case Tree('a', [Tree('b', [Token('T', 'a')])]): |
| 75 | + pass |
| 76 | + case _: |
| 77 | + assert False |
| 78 | + # test nested trees |
| 79 | + match tree2: |
| 80 | + case Tree('a', [ |
| 81 | + Tree('b', [Token('T', 'x')]), |
| 82 | + Tree('c', [Token('T', 'y')]), |
| 83 | + Tree('d', [ |
| 84 | + Tree('z', [ |
| 85 | + Token('T', 'zz'), |
| 86 | + Tree('zzz', 'zzz') |
| 87 | + ]) |
| 88 | + ]) |
| 89 | + ]): |
| 90 | + pass |
| 91 | + case _: |
| 92 | + assert False |
| 93 | + |
49 | 94 |
|
50 | 95 |
|
51 | 96 | if __name__ == '__main__':
|
|
0 commit comments