|
2 | 2 | import typing as t |
3 | 3 | import unittest |
4 | 4 | import gc |
5 | | - |
| 5 | +import bblfsh |
6 | 6 | import docker |
7 | 7 |
|
8 | 8 | from bblfsh import (BblfshClient, iterator, TreeOrder, |
|
14 | 14 | from bblfsh.pyuast import uast, decode |
15 | 15 | from functools import cmp_to_key |
16 | 16 |
|
| 17 | + |
17 | 18 | class BblfshTests(unittest.TestCase): |
18 | 19 | BBLFSH_SERVER_EXISTED = None |
19 | 20 | fixtures_pyfile = "fixtures/test.py" |
@@ -532,6 +533,33 @@ def testFilterOrphanNode(self) -> None: |
532 | 533 | typ = obj["@type"] |
533 | 534 | self.assertEqual("uast:RuntimeImport", typ) |
534 | 535 |
|
| 536 | + def testPythonContextIterate(self) -> None: |
| 537 | + # C++ memory context |
| 538 | + ctxC = self._parse_fixture() |
| 539 | + # Python memory context |
| 540 | + pyDict = ctxC.root.get() |
| 541 | + ctxPy = bblfsh.context(pyDict) |
| 542 | + |
| 543 | + for treeOrder in TreeOrder: |
| 544 | + itC = ctxC.iterate(treeOrder) |
| 545 | + itPy = ctxPy.iterate(treeOrder) |
| 546 | + |
| 547 | + for nodeC, nodePy in zip(itC, itPy): |
| 548 | + self.assertEqual(nodeC.get(), nodePy) |
| 549 | + |
| 550 | + def testPythonContextFilter(self) -> None: |
| 551 | + # C++ memory context |
| 552 | + ctxC = self._parse_fixture() |
| 553 | + # Python memory context |
| 554 | + pyDict = ctxC.root.get() |
| 555 | + ctxPy = bblfsh.context(pyDict) |
| 556 | + |
| 557 | + itC = ctxC.filter("//*[@role='Identifier']") |
| 558 | + itPy = ctxPy.filter("//*[@role='Identifier']") |
| 559 | + |
| 560 | + for nodeC, nodePy in zip(itC, itPy): |
| 561 | + self.assertEqual(nodeC.get(), nodePy) |
| 562 | + |
535 | 563 |
|
536 | 564 | if __name__ == "__main__": |
537 | 565 | unittest.main() |
0 commit comments