Exemplo n.º 1
0
    def test_star_can_nest_to_match_nested_patterns(self):
        pattern = (matcher.Star((matcher.Star(1), )), )
        self.assertDictEqual(matcher.match(pattern, ()), {})
        self.assertDictEqual(matcher.match(pattern, ((), )), {})
        self.assertDictEqual(matcher.match(pattern, ((1, ), (1, 1, 1))), {})

        with self.assertRaises(matcher.MatchError):
            matcher.match(pattern, (1, ))
Exemplo n.º 2
0
    def test_star_greedily_matches_when_flag_is_set(self):
        pattern = (matcher.Star(1, name='x', greedy=True),
                   matcher.Star(1, name='y', greedy=True))
        # x will be the largset possible match
        self.assertDictEqual(matcher.match(pattern, (1, 1)),
                             dict(x=(1, 1), y=()))

        pattern = (matcher.Star(1, name='x', greedy=True),
                   matcher.Star(1, name='y', greedy=False))
        self.assertDictEqual(matcher.match(pattern, (1, 1)),
                             dict(x=(1, 1), y=()))
Exemplo n.º 3
0
    def test_star_match_produces_multiple_matches(self):
        pattern = (matcher.Star(1), matcher.Star(1))
        self.assertLen(list(matcher.match_all(pattern, ())), 1)
        self.assertLen(list(matcher.match_all(pattern, (1, ))), 2)
        self.assertLen(list(matcher.match_all(pattern, (1, 1))), 3)

        pattern = (matcher.Star(1), matcher.Star(1), matcher.Star(1))
        self.assertLen(list(matcher.match_all(pattern, ())), 1)
        self.assertLen(list(matcher.match_all(pattern, (1, ))), 3)
        self.assertLen(list(matcher.match_all(pattern, (1, 1))), 6)
        self.assertLen(list(matcher.match_all(pattern, (1, 1, 1))), 10)
Exemplo n.º 4
0
    def test_star_with_accumulate_collects_values(self):
        pattern = (matcher.Star((matcher.Var('x'), matcher.Var('y')),
                                accumulate=['y']), )
        self.assertDictEqual(matcher.match(pattern, ((1, 2), (1, 3))),
                             dict(x=1, y=(2, 3)))

        with self.assertRaises(matcher.MatchError):
            matcher.match(pattern, ((1, 2), (2, 3)))
Exemplo n.º 5
0
    def test_star_match_binds_name_to_environment(self):
        pattern = (matcher.Star(matcher.Var('x')), )
        self.assertDictEqual(matcher.match(pattern, ()), {})
        self.assertDictEqual(matcher.match(pattern, (1, )), dict(x=1))
        self.assertDictEqual(matcher.match(pattern, (1, 1)), dict(x=1))

        with self.assertRaises(matcher.MatchError):
            matcher.match(pattern, (1, 2))
Exemplo n.º 6
0
    def test_star_match_correctly_matches_sequence_of_patterns(self):
        pattern = (matcher.Star(1), )
        self.assertDictEqual(matcher.match(pattern, ()), {})
        self.assertDictEqual(matcher.match(pattern, (1, )), {})
        self.assertDictEqual(matcher.match(pattern, (1, 1)), {})
        self.assertDictEqual(matcher.match(pattern, (1, 1, 1)), {})

        with self.assertRaises(matcher.MatchError):
            matcher.match(pattern, (1, 2))
Exemplo n.º 7
0
    def test_can_use_star_patterns_in_string_patterns(self):
        pattern = ['a', 'b', matcher.Segment('rest')]
        self.assertDictEqual(matcher.match(pattern, 'abcd'), {'rest': 'cd'})

        with self.assertRaises(matcher.MatchError):
            matcher.match(pattern, 'acd')

        pattern = ['a', 'b', matcher.Star('c'), 'd']
        self.assertDictEqual(matcher.match(pattern, 'abccccd'), {})
        self.assertDictEqual(matcher.match(pattern, 'abd'), {})

        with self.assertRaises(matcher.MatchError):
            matcher.match(pattern, 'abccc')
Exemplo n.º 8
0
 def test_match_all_errors_with_star_pattern(self):
     with self.assertRaises(ValueError):
         list(matcher.match_all(matcher.Star(1), 1.))
Exemplo n.º 9
0
 def test_is_match_errors_with_star_pattern(self):
     with self.assertRaises(ValueError):
         matcher.is_match(matcher.Star(1), 1.)
Exemplo n.º 10
0
 def test_star_with_name_binds_result(self):
     pattern = (matcher.Star(1, name='x'), )
     self.assertDictEqual(matcher.match(pattern, (1, 1)), dict(x=(1, 1)))
     pattern = (matcher.Star(matcher.Var('y'), name='x'), )
     self.assertDictEqual(matcher.match(pattern, (1, 1)), dict(y=1,
                                                               x=(1, 1)))
Exemplo n.º 11
0
 def test_star_nongreedily_matches_by_default(self):
     pattern = (matcher.Star(1, name='x'), matcher.Star(1, name='y'))
     # x will be the smallest possible match
     self.assertDictEqual(matcher.match(pattern, (1, 1)),
                          dict(x=(), y=(1, 1)))