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