def test_extract_changed_nodes(self): root = Node( start_position=Position(line=10), children=[Node(start_position=Position(line=5))]) nodes = extract_changed_nodes(root, [10]) self.assertEqual(len(nodes), 1) self.assertEqual(nodes[0].start_position.line, 10)
def test_files_by_language(self): file_stats = {"js": 2, "ruby": 7, "Python": 5} files = [] for language, n_files in file_stats.items(): for i in range(n_files): files.append(File(language=language, uast=Node(children=[Node()]), path=language + str(i))) result = files_by_language(files) self.assertEqual([("python", 5), ("js", 2), ("ruby", 7)], [(k, len(v)) for k, v in result.items()]) return result
def testFilterProperties(self): node = Node() node.properties['k1'] = 'v2' node.properties['k2'] = 'v1' self.assertTrue(any(filter(node, "//*[@k2='v1']"))) self.assertTrue(any(filter(node, "//*[@k1='v2']"))) self.assertFalse(any(filter(node, "//*[@k1='v1']")))
def _itTestTree(self): root = Node() root.internal_type = 'root' son1 = Node() son1.internal_type = 'son1' son1_1 = Node() son1_1.internal_type = 'son1_1' son1_2 = Node() son1_2.internal_type = 'son1_2' son1.children.extend([son1_1, son1_2]) son2 = Node() son2.internal_type = 'son2' son2_1 = Node() son2_1.internal_type = 'son2_1' son2_2 = Node() son2_2.internal_type = 'son2_2' son2.children.extend([son2_1, son2_2]) root.children.extend([son1, son2]) return root
def test_is_relevant_node(): node = Node() node.start_position.line = 1 node.end_position.line = 1 assert is_relevant_node(node, lines=set([1])) assert is_relevant_node(node, lines=set([1, 2])) assert is_relevant_node(node, lines=set([1, 3])) assert not is_relevant_node(node, lines=set([2])) assert not is_relevant_node(node, lines=set([2, 3])) node.start_position.line = 2 node.end_position.line = 4 assert is_relevant_node(node, lines=set([2])) assert is_relevant_node(node, lines=set([4])) assert is_relevant_node(node, lines=set([3])) assert not is_relevant_node(node, lines=set([1, 5]))
def _itTestTree(self): root = Node() root.internal_type = 'root' root.start_position.offset = 0 root.start_position.line = 0 root.start_position.col = 1 son1 = Node() son1.internal_type = 'son1' son1.start_position.offset = 1 son1_1 = Node() son1_1.internal_type = 'son1_1' son1_1.start_position.offset = 10 son1_2 = Node() son1_2.internal_type = 'son1_2' son1_2.start_position.offset = 10 son1.children.extend([son1_1, son1_2]) son2 = Node() son2.internal_type = 'son2' son2.start_position.offset = 100 son2_1 = Node() son2_1.internal_type = 'son2_1' son2_1.start_position.offset = 5 son2_2 = Node() son2_2.internal_type = 'son2_2' son2_2.start_position.offset = 15 son2.children.extend([son2_1, son2_2]) root.children.extend([son1, son2]) return root
def test_extract_subtrees_all_positions(): root = Node() root.internal_type = 'root' root.start_position.line = 1 root.end_position.line = 4 child1 = Node() child1.internal_type = '1' child1.start_position.line = 1 child1.end_position.line = 1 child2 = Node() child2.internal_type = '2' child2.start_position.line = 2 child2.end_position.line = 3 child2a = Node() child2a.internal_type = '2a' child2a.start_position.line = 2 child2a.end_position.line = 2 child2b = Node() child2b.internal_type = '2b' child2b.start_position.line = 3 child2b.end_position.line = 3 child3 = Node() child3.internal_type = '3' child3.start_position.line = 4 child3.end_position.line = 4 child2.children.extend([child2a, child2b]) root.children.extend([child1, child2, child3]) paths = [p for p in extract_paths(root, lines=set([1]))] assert 4 == len(paths) subtrees = [ s for s in extract_subtrees(root, min_depth=1, max_depth=1, min_size=1, max_size=100, lines=set([3])) ] assert [child2b] == subtrees subtrees = [ s for s in extract_subtrees(root, min_depth=1, max_depth=1, min_size=1, max_size=100, lines=set([4])) ] assert [child3] == subtrees subtrees = [ s for s in extract_subtrees(root, min_depth=1, max_depth=2, min_size=1, max_size=100, lines=set([3])) ] assert 2 == len(subtrees) assert child2b in subtrees assert child2 in subtrees subtrees = [ s for s in extract_subtrees(root, min_depth=1, max_depth=100, min_size=1, max_size=3, lines=set([3])) ] assert 2 == len(subtrees) assert child2b in subtrees assert child2 in subtrees subtrees = [ s for s in extract_subtrees(root, min_depth=1, max_depth=100, min_size=1, max_size=2, lines=set([3])) ] assert 1 == len(subtrees) assert child2b in subtrees deeper_root1 = Node() deeper_root2 = Node() deeper_root3 = Node() deeper_root3.children.extend([root]) deeper_root2.children.extend([deeper_root3]) deeper_root1.children.extend([deeper_root2]) subtrees = [ s for s in extract_subtrees(deeper_root1, min_depth=1, max_depth=2, min_size=1, max_size=100, lines=set([3])) ] assert 2 == len(subtrees) assert child2b in subtrees assert child2 in subtrees
def testFilterStartCol(self): node = Node() node.start_position.col = 50 self.assertTrue(any(filter(node, "//*[@startCol=50]"))) self.assertFalse(any(filter(node, "//*[@startCol=5]")))
def testFilterStartLine(self): node = Node() node.start_position.line = 10 self.assertTrue(any(filter(node, "//*[@startLine=10]"))) self.assertFalse(any(filter(node, "//*[@startLine=100]")))
def testFilterStartOffset(self): node = Node() node.start_position.offset = 100 self.assertTrue(any(filter(node, "//*[@startOffset=100]"))) self.assertFalse(any(filter(node, "//*[@startOffset=10]")))
def testFilterEndCol(self): node = Node() node.end_position.col = 50 self.assertTrue(any(filter(node, "//*[@endCol=50]"))) self.assertFalse(any(filter(node, "//*[@endCol=5]")))
def testFilterNumber(self): node = Node() node.children.extend([Node(), Node(), Node()]) self.assertEqual(int(filter_number(node, "count(//*)")), 4)
def testFilterToken(self): node = Node() node.token = 'a' self.assertTrue(any(filter(node, "//*[@token='a']"))) self.assertFalse(any(filter(node, "//*[@token='b']")))
def testFilterEndOffset(self): node = Node() node.end_position.offset = 100 self.assertTrue(any(filter(node, "//*[@endOffset=100]"))) self.assertFalse(any(filter(node, "//*[@endOffset=10]")))
def testFilterBadType(self): node = Node() node.end_position.col = 50 self.assertRaises(RuntimeError, filter, node, "boolean(//*[@startPosition or @endPosition])")
def testFilterBadQuery(self): node = Node() self.assertRaises(RuntimeError, filter, node, "//*roleModule")
def testFilterString(self): node = Node() node.internal_type = "test" self.assertEqual(filter_string(node, "name(//*[1])"), "test")
def testFilterEndLine(self): node = Node() node.end_position.line = 10 self.assertTrue(any(filter(node, "//*[@endLine=10]"))) self.assertFalse(any(filter(node, "//*[@endLine=100]")))
def testFilterRoles(self): node = Node() node.roles.append(1) self.assertTrue(any(filter(node, "//*[@roleIdentifier]"))) self.assertFalse(any(filter(node, "//*[@roleQualified]")))
def testFilterInternalType(self): node = Node() node.internal_type = 'a' self.assertTrue(any(filter(node, "//a"))) self.assertFalse(any(filter(node, "//b")))
def testFilterBool(self): node = Node() self.assertTrue( filter_bool(node, "boolean(//*[@startOffset or @endOffset])")) self.assertFalse(filter_bool(node, "boolean(//*[@blah])"))