|
1 | 1 | import unittest |
2 | | -import importlib |
3 | 2 |
|
4 | 3 | import docker |
5 | 4 |
|
6 | | -from bblfsh import BblfshClient, filter |
| 5 | +from bblfsh import BblfshClient, filter, role_id, role_name, Node, ParseResponse |
7 | 6 | from bblfsh.launcher import ensure_bblfsh_is_running |
8 | | -from bblfsh.sdkversion import VERSION |
9 | | - |
10 | | -# "in" is a reserved keyword in Python thus can't be used as package name, so |
11 | | -# we import by string |
12 | | -ParseResponse = importlib.import_module( |
13 | | - "bblfsh.gopkg.in.bblfsh.sdk.%s.protocol.generated_pb2" % VERSION).ParseResponse |
14 | | -Node = importlib.import_module( |
15 | | - "bblfsh.gopkg.in.bblfsh.sdk.%s.uast.generated_pb2" % VERSION).Node |
16 | 7 |
|
17 | 8 |
|
18 | 9 | class BblfshTests(unittest.TestCase): |
@@ -44,19 +35,17 @@ def testNativeParse(self): |
44 | 35 | assert(reply.ast) |
45 | 36 |
|
46 | 37 | def testUASTDefaultLanguage(self): |
47 | | - uast = self.client.parse(__file__) |
48 | | - self._validate_uast(uast) |
| 38 | + self._validate_resp(self.client.parse(__file__)) |
49 | 39 |
|
50 | 40 | def testUASTPython(self): |
51 | | - uast = self.client.parse(__file__, language="Python") |
52 | | - self._validate_uast(uast) |
| 41 | + self._validate_resp(self.client.parse(__file__, language="Python")) |
53 | 42 |
|
54 | 43 | def testUASTFileContents(self): |
55 | 44 | with open(__file__, "rb") as fin: |
56 | 45 | contents = fin.read() |
57 | | - uast = self.client.parse("file.py", contents=contents) |
58 | | - self._validate_uast(uast) |
59 | | - self._validate_filter(uast) |
| 46 | + resp = self.client.parse("file.py", contents=contents) |
| 47 | + self._validate_resp(resp) |
| 48 | + self._validate_filter(resp) |
60 | 49 |
|
61 | 50 | def testBrokenFilter(self): |
62 | 51 | self.assertRaises(RuntimeError, filter, 0, "foo") |
@@ -123,18 +112,25 @@ def testFilterEndCol(self): |
123 | 112 | self.assertTrue(any(filter(node, "//*[@endCol=50]"))) |
124 | 113 | self.assertFalse(any(filter(node, "//*[@endCol=5]"))) |
125 | 114 |
|
126 | | - def _validate_uast(self, uast): |
127 | | - self.assertIsNotNone(uast) |
128 | | - # self.assertIsInstance() does not work - must be some metaclass magic |
129 | | - self.assertEqual(type(uast).DESCRIPTOR.full_name, |
| 115 | + def testRoleIdName(sedlf): |
| 116 | + assert(role_id(role_name(1)) == 1) |
| 117 | + assert(role_name(role_id("IDENTIFIER")) == "IDENTIFIER") |
| 118 | + |
| 119 | + def _validate_resp(self, resp): |
| 120 | + self.assertIsNotNone(resp) |
| 121 | + self.assertEqual(type(resp).DESCRIPTOR.full_name, |
130 | 122 | ParseResponse.DESCRIPTOR.full_name) |
131 | | - self.assertEqual(len(uast.errors), 0) |
132 | | - self.assertIsInstance(uast.uast, Node) |
| 123 | + self.assertEqual(len(resp.errors), 0) |
| 124 | + # self.assertIsInstance() does not work - must be some metaclass magic |
| 125 | + # self.assertIsInstance(resp.uast, Node) |
| 126 | + |
| 127 | + # Sometimes its fully qualified, sometimes is just "Node"... ditto |
| 128 | + assert(resp.uast.__class__.__name__.endswith('Node')) |
133 | 129 |
|
134 | | - def _validate_filter(self, uast): |
135 | | - results = filter(uast.uast, "//Import[@roleImport and @roleDeclaration]//alias") |
| 130 | + def _validate_filter(self, resp): |
| 131 | + results = filter(resp.uast, "//Import[@roleImport and @roleDeclaration]//alias") |
136 | 132 | self.assertEqual(next(results).token, "unittest") |
137 | | - self.assertEqual(next(results).token, "importlib") |
| 133 | + self.assertEqual(next(results).token, "docker") |
138 | 134 |
|
139 | 135 |
|
140 | 136 | if __name__ == "__main__": |
|
0 commit comments