def testFilterProperties(self): node = Node() node.properties['k1'] = 'v1' node.properties['k2'] = 'v2' self.assertTrue(any(xpath_filter(node, "/*[@k1='v1']"))) self.assertTrue(any(xpath_filter(node, "/*[@k2='v2']"))) self.assertFalse(any(xpath_filter(node, "/*[@k1='v2']")))
def testManyParsesAndFilters(self): before = resource.getrusage(resource.RUSAGE_SELF) for _ in range(100): root = self.client.parse(self.fixtures_file).uast xpath_filter(root, "//*[@role='Identifier']") after = resource.getrusage(resource.RUSAGE_SELF) self.assertLess(after[2] / before[2], 4.0)
def testFilterEndCol(self): uast = self._parse_fixture().uast self.assertTrue( any( xpath_filter(uast, "//uast:Positions/end/uast:Position[@col=49]"))) self.assertFalse( any( xpath_filter( uast, "//uast:Positions/end/uast:Position[@col=99999]")))
def testFilterEndLine(self): uast = self._parse_fixture().uast self.assertTrue( any( xpath_filter(uast, "//uast:Positions/end/uast:Position[@line=321]"))) self.assertFalse( any( xpath_filter( uast, "//uast:Positions/end/uast:Position[@line=99999]")))
def testFilterStartLine(self): uast = self._parse_fixture().uast self.assertTrue( any( xpath_filter(uast, "//uast:Positions/start/uast:Position[@col=42]"))) self.assertFalse( any( xpath_filter( uast, "//uast:Positions/start/uast:Position[@col=99999]")))
def testFilterStartOffset(self): uast = self._parse_fixture().uast self.assertTrue( any( xpath_filter( uast, "//uast:Positions/start/uast:Position[@offset=11749]"))) self.assertFalse( any( xpath_filter( uast, "//uast:Positions/start/uast:Position[@offset=99999]")))
def testManyFilters(self): root = self._parse_fixture().uast root.properties['k1'] = 'v2' root.properties['k2'] = 'v1' before = resource.getrusage(resource.RUSAGE_SELF) for _ in range(1000): xpath_filter(root, "//*[@roleIdentifier]") after = resource.getrusage(resource.RUSAGE_SELF) # Check that memory usage has not doubled after running the filter self.assertLess(after[2] / before[2], 2.0)
def testFilterRoles(self): uast = self._parse_fixture().uast it = xpath_filter(uast, "//*[@role='Identifier']") self.assertIsInstance(it, CompatNodeIterator) li = list(it) self.assertGreater(len(li), 0) it = xpath_filter(uast, "//*[@role='Friend']") self.assertIsInstance(it, CompatNodeIterator) li = list(it) self.assertEqual(len(li), 0) it = xpath_filter(uast, "//*[@role='Identifier' and not(@role='Friend')]") self.assertIsInstance(it, CompatNodeIterator) li = list(it) self.assertGreater(len(li), 0)
def testFilterToken(self): uast = self._parse_fixture().uast it = xpath_filter(uast, "//*[@token='else']/text()") first = next(it).get_str() self.assertEqual(first, "else")
def testFilterInternalType(self): node = Node() node.internal_type = 'a' self.assertTrue(any(xpath_filter(node, "//a"))) self.assertFalse(any(xpath_filter(node, "//b")))
def testBrokenFilter(self): with self.assertRaises(AttributeError): xpath_filter(0, "foo")
def testFilterInsideIter(self): root = self._parse_fixture().uast it = iterator(root, TreeOrder.PRE_ORDER) self.assertIsNotNone(it) for n in it: xpath_filter(n, "//*[@roleIdentifier]")