def visitRepeater(self, context): lower = -1 upper = -1 if context.exact: limit = int(context.exact.text) lower = limit upper = limit if context.lower: lower = int(context.lower.text) if context.upper: upper = int(context.upper.text) return ast.Repeater(lower=lower, upper=upper)
def test_handle_min_more(self): desc = PatternConstructor.build_seq_desc(ast.Repeater(lower=2)) is_matched, rem_nodes = self.matcher._handle_range(desc, [self.node0, self.node1, self.node3]) assert is_matched assert not rem_nodes
def test_handle_min_split(self): desc = PatternConstructor.build_seq_desc_type('newline', ast.Repeater(lower=2)) is_matched, rem_nodes = self.matcher._handle_range(desc, [self.node0, self.node0, self.node1]) assert is_matched assert len(rem_nodes) == 1
def test_handle_max_more(self): desc = PatternConstructor.build_seq_desc(ast.Repeater(upper=3)) is_matched, rem_nodes = self.matcher._handle_range(desc, [self.node0, self.node1, self.node2, self.node3]) assert is_matched assert len(rem_nodes) == 1 assert rem_nodes[0] == self.node3
def test_handle_max_exact(self): desc = PatternConstructor.build_seq_desc(ast.Repeater(upper=3)) is_matched, rem_nodes = self.matcher._handle_range(desc, [self.node0, self.node1, self.node2]) assert is_matched assert not rem_nodes
def test_handle_range_less(self): desc = PatternConstructor.build_seq_desc(ast.Repeater(1, 2)) is_matched, rem_nodes = self.matcher._handle_range(desc, []) assert not is_matched
def test_not_is_lower_matched(self): desc = PatternConstructor.build_seq_desc(ast.Repeater(lower=2, upper=2)) is_matched, rem_nodes = self.matcher._is_lower_matched(desc, [self.node0]) assert not is_matched
def test_is_lower_matched(self): desc = PatternConstructor.build_seq_desc(ast.Repeater(lower=2, upper=2)) is_matched, rem_nodes = self.matcher._is_lower_matched(desc, [self.node0, self.node1, self.node2]) assert is_matched assert len(rem_nodes) == 1 assert rem_nodes[0] == self.node2
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