Beispiel #1
0
 def test_exact_matcher(self):
     matcher = search.TracksMatcher("artist==foo")
     assert len(matcher.matchers) == 1
     match = matcher.matchers[0]
     self.match_is_type(match, search._ExactMatcher)
     assert match.tag == 'artist'
     assert match.content == 'foo'
Beispiel #2
0
 def test_exact_matcher(self):
     matcher = search.TracksMatcher("artist==foo")
     self.assertEqual(len(matcher.matchers), 1)
     match = matcher.matchers[0]
     self.match_is_type(match, search._ExactMatcher)
     self.assertEqual(match.tag, 'artist')
     self.assertEqual(match.content, 'foo')
Beispiel #3
0
 def test_take_not_srt(self):
     matcher = search.TracksMatcher("foo", keyword_tags=['artist'])
     tracks = [track.Track(x) for x in ('foo', 'bar', 'baz', 'quux')]
     tracks[0].set_tag_raw('artist', 'foooo')
     tracks[2].set_tag_raw('artist', 'foooooo')
     gen = search.search_tracks(tracks, [matcher])
     self.assertEqual(gen.next().track, tracks[0])
     self.assertEqual(gen.next().track, tracks[2])
     self.assertRaises(StopIteration, gen.next)
Beispiel #4
0
 def test_take_not_srt(self):
     matcher = search.TracksMatcher("foo", keyword_tags=['artist'])
     tracks = [track.Track(x) for x in ('foo', 'bar', 'baz', 'quux')]
     tracks[0].set_tag_raw('artist', 'foooo')
     tracks[2].set_tag_raw('artist', 'foooooo')
     gen = search.search_tracks(tracks, [matcher])
     assert gen.next().track == tracks[0]
     assert gen.next().track == tracks[2]
     with pytest.raises(StopIteration):
         gen.next()
Beispiel #5
0
 def test_search_tracks(self):
     matcher = search.TracksMatcher("foo", keyword_tags=['artist'])
     tracks = [track.Track(x) for x in ('foo', 'bar', 'baz', 'quux')]
     tracks = [search.SearchResultTrack(tr) for tr in tracks]
     tracks[0].track.set_tag_raw('artist', 'foooo')
     tracks[2].track.set_tag_raw('artist', 'foooooo')
     gen = search.search_tracks(tracks, [matcher])
     assert next(gen) == tracks[0]
     assert next(gen) == tracks[2]
     with pytest.raises(StopIteration):
         next(gen)
Beispiel #6
0
    def test_paren_matcher(self):
        matcher = search.TracksMatcher("( foo | bar )",
                keyword_tags=['artist'])
        match = matcher
        # MultiMetaMatcher
        self.assertEqual(len(match.matchers), 1)
        match = matcher.matchers[0]
        self.match_is_type(match, search._MultiMetaMatcher)

        self.assertEqual(len(match.matchers), 1)
        match = match.matchers[0]
        self.match_is_type(match, search._OrMetaMatcher)

        # This is the same code as the OrMetaMatcher
        self.assertTrue(match.left)
        self.assertTrue(match.right)
        self.match_is_type(match.left, search._MultiMetaMatcher)
        self.match_is_type(match.right, search._MultiMetaMatcher)
        # ManyMultiMetaMatcher
        self.assertEqual(len(match.left.matchers), 1)
        self.assertEqual(len(match.right.matchers), 1)
        match_left = match.left.matchers[0]
        match_right = match.right.matchers[0]
        self.match_is_type(match_left, search._ManyMultiMetaMatcher)
        self.match_is_type(match_right, search._ManyMultiMetaMatcher)
        # InMatcher
        self.assertEqual(len(match_left.matchers), 1)
        self.assertEqual(len(match_right.matchers), 1)
        match_left = match_left.matchers[0]
        match_right = match_right.matchers[0]
        self.match_is_type(match_left, search._InMatcher)
        self.match_is_type(match_right, search._InMatcher)
        self.assertEqual(match_left.tag, 'artist')
        self.assertEqual(match_right.tag, 'artist')
        if match_left.content == 'foo':
            if match_right.content != 'bar':
                self.assertFalse("We lost a search term on an or")
        elif match_left.content == 'bar':
            if match_right.content != 'foo':
                self.assertFalse("We lost a search term on an or")
        else:
            self.assertFalse("We lost both parts of an or")
Beispiel #7
0
    def test_paren_matcher(self):
        matcher = search.TracksMatcher("( foo | bar )",
                                       keyword_tags=['artist'])
        match = matcher
        # MultiMetaMatcher
        assert len(match.matchers) == 1
        match = matcher.matchers[0]
        self.match_is_type(match, search._MultiMetaMatcher)

        assert len(match.matchers) == 1
        match = match.matchers[0]
        self.match_is_type(match, search._OrMetaMatcher)

        # This is the same code as the OrMetaMatcher
        assert match.left
        assert match.right
        self.match_is_type(match.left, search._MultiMetaMatcher)
        self.match_is_type(match.right, search._MultiMetaMatcher)
        # ManyMultiMetaMatcher
        assert len(match.left.matchers) == 1
        assert len(match.right.matchers) == 1
        match_left = match.left.matchers[0]
        match_right = match.right.matchers[0]
        self.match_is_type(match_left, search._ManyMultiMetaMatcher)
        self.match_is_type(match_right, search._ManyMultiMetaMatcher)
        # InMatcher
        assert len(match_left.matchers) == 1
        assert len(match_right.matchers) == 1
        match_left = match_left.matchers[0]
        match_right = match_right.matchers[0]
        self.match_is_type(match_left, search._InMatcher)
        self.match_is_type(match_right, search._InMatcher)
        assert match_left.tag == 'artist'
        assert match_right.tag == 'artist'
        if match_left.content == 'foo':
            if match_right.content != 'bar':
                assert not "We lost a search term on an or"
        elif match_left.content == 'bar':
            if match_right.content != 'foo':
                assert not "We lost a search term on an or"
        else:
            assert not "We lost both parts of an or"
Beispiel #8
0
 def test_not_matcher(self):
     matcher = search.TracksMatcher("! foo", keyword_tags=['artist'])
     match = matcher
     # NotMetaMatcher
     self.assertEqual(len(match.matchers), 1)
     match = matcher.matchers[0]
     self.match_is_type(match, search._NotMetaMatcher)
     # MultiMetaMatcher
     match = match.matcher
     self.match_is_type(match, search._MultiMetaMatcher)
     # ManyMultiMetaMatcher
     self.assertEqual(len(match.matchers), 1)
     match = match.matchers[0]
     self.match_is_type(match, search._ManyMultiMetaMatcher)
     # InMatcher
     self.assertEqual(len(match.matchers), 1)
     match = match.matchers[0]
     self.match_is_type(match, search._InMatcher)
     self.assertEqual(match.tag, 'artist')
     self.assertEqual(match.content, 'foo')
Beispiel #9
0
 def test_not_matcher(self):
     matcher = search.TracksMatcher("! foo", keyword_tags=['artist'])
     match = matcher
     # NotMetaMatcher
     assert len(match.matchers) == 1
     match = matcher.matchers[0]
     self.match_is_type(match, search._NotMetaMatcher)
     # MultiMetaMatcher
     match = match.matcher
     self.match_is_type(match, search._MultiMetaMatcher)
     # ManyMultiMetaMatcher
     assert len(match.matchers) == 1
     match = match.matchers[0]
     self.match_is_type(match, search._ManyMultiMetaMatcher)
     # InMatcher
     assert len(match.matchers) == 1
     match = match.matchers[0]
     self.match_is_type(match, search._InMatcher)
     assert match.tag == 'artist'
     assert match.content == 'foo'
Beispiel #10
0
 def test_match_false(self):
     matcher = search.TracksMatcher("foo",
             keyword_tags=['artist'])
     self.str.track.set_tag_raw('artist', 'bar')
     self.assertFalse(matcher.match(self.str))
Beispiel #11
0
 def test_match_true_none(self):
     matcher = search.TracksMatcher("artist==__null__")
     self.str.track.set_tag_raw('artist', '')
     self.assertTrue(matcher.match(self.str))
     self.assertEqual(self.str.on_tags, ['artist'])
Beispiel #12
0
 def test_match_true_case_insensitive(self):
     matcher = search.TracksMatcher("artist=FoO", case_sensitive=False)
     self.str.track.set_tag_raw('artist', 'foo')
     self.assertTrue(matcher.match(self.str))
     self.assertEqual(self.str.on_tags, ['artist'])
Beispiel #13
0
 def test_match_true_tag(self):
     matcher = search.TracksMatcher("artist=foo")
     self.str.track.set_tag_raw('artist', 'foo')
     self.assertTrue(matcher.match(self.str))
     self.assertEqual(self.str.on_tags, ['artist'])
Beispiel #14
0
 def test_match_true_none(self):
     matcher = search.TracksMatcher("artist==__null__")
     self.str.track.set_tag_raw('artist', '')
     assert matcher.match(self.str)
     assert self.str.on_tags == ['artist']
Beispiel #15
0
 def test_match_true_tag(self):
     matcher = search.TracksMatcher("artist=foo")
     self.str.track.set_tag_raw('artist', 'foo')
     assert matcher.match(self.str)
     assert self.str.on_tags == ['artist']
Beispiel #16
0
 def test_match_true(self):
     matcher = search.TracksMatcher("foo", keyword_tags=['artist'])
     self.str.track.set_tag_raw('artist', 'foo')
     assert matcher.match(self.str)
     assert self.str.on_tags == ['artist']