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