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'
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')
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)
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()
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)
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")
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"
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')
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'
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))
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'])
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'])
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'])
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']
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']
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']