def test_is_start_of_sequence(self): node_list = [PatternConstructor.build_node_desc('newline'), PatternConstructor.build_node_desc('space')] seq = ast.SequencePattern(node_list) root = ParseTreeConstructor.add_root_to_siblings('newline', 'space', 'space') is_match, nodes = self.matcher.is_start_of_sequence(seq, root.value[0]) assert is_match assert len(nodes) == 1
def test_find_parent_child_pattern_ancestor(self): parent = PatternConstructor.build_node_desc('root') child = PatternConstructor.build_node_desc('newline') relations = ast.NodeRelations() relations.register_relation(parent, ast.IsAncestorOf(child)) pattern = ast.PatternDescriptor(parent, [parent, child], relations) result = self.matcher.find_pattern_in_tree(self.tree, pattern) assert len(result) == 2
def test_find_double_pattern(self): parent = PatternConstructor.build_node_desc('ruleset') child1 = PatternConstructor.build_node_desc('declaration') child2 = PatternConstructor.build_node_desc('declaration') relations = ast.NodeRelations() relations.register_relation(parent, ast.IsParentOf(child1)) relations.register_relation(parent, ast.IsParentOf(child2)) pattern = ast.PatternDescriptor(parent, [parent, child1, child2], relations) result = self.matcher.find_pattern_in_tree(self.tree, pattern) assert len(result) == 3
def test_is_variation_between_nodes(self): variation = ast.WhitespaceVariation([ ast.SequencePattern([PatternConstructor.build_node_desc('newline')]), ast.SequencePattern([PatternConstructor.build_node_desc('space'), PatternConstructor.build_node_desc('newline')])]) root = ParseTreeConstructor.add_root_to_siblings('comment', 'newline', 'comment') present = self.matcher.is_variation_between_nodes(variation, root.value[0], root.value[2]) assert present root = ParseTreeConstructor.add_root_to_siblings('comment', 'space', 'newline', 'comment') present = self.matcher.is_variation_between_nodes(variation, root.value[0], root.value[3]) assert present
def test_is_sequence_exact_nodes_match_more(self): node_list = [PatternConstructor.build_node_desc('newline'), PatternConstructor.build_node_desc('space')] seq = ast.SequencePattern(node_list) is_match = self.matcher._is_sequence_exact_nodes_match(seq, [self.node0, self.node1, self.node1]) assert not is_match
def test_is_sequence_exact_nodes_match_multi_two(self): rep_node = PatternConstructor.build_seq_desc_type('newline', ast.Repeater(lower=2, upper=3)) node_list = [PatternConstructor.build_node_desc('space'), rep_node] seq = ast.SequencePattern(node_list) is_match = self.matcher._is_sequence_exact_nodes_match(seq, [self.node1, self.node0, self.node0]) assert is_match