def test_unknown_filter(self): with self.assertRaises(ValueError) as cm: SingleTorrentFilter('foo=bar') self.assertEqual(str(cm.exception), "Invalid filter name: 'foo'") with self.assertRaises(ValueError) as cm: SingleTorrentFilter('foo!~bar') self.assertEqual(str(cm.exception), "Invalid filter name: 'foo'")
def test_eta_filter_larger_smaller(self): tids = SingleTorrentFilter('eta>1h').apply(tlist, key='id') self.assertEqual(set(tids), { 2, }) tids = SingleTorrentFilter('eta>=1h').apply(tlist, key='id') self.assertEqual(set(tids), {2, 3})
def test_boolean_fallback(self): tids = SingleTorrentFilter('downloaded').apply(tlist, key='id') self.assertEqual(set(tids), { 4, }) tids = SingleTorrentFilter('!downloaded').apply(tlist, key='id') self.assertEqual(set(tids), {1, 2, 3}) tids = SingleTorrentFilter('name').apply(tlist, key='id') self.assertEqual(set(tids), {1, 2, 3, 4})
def test_larger_smaller_operator(self): # 375Ki == 384k tids = SingleTorrentFilter('rate-down>375Ki').apply(tlist, key='id') self.assertEqual(set(tids), set()) tids = SingleTorrentFilter('rate-down<375 Ki').apply(tlist, key='id') self.assertEqual(set(tids), {1, 3, 4}) tids = SingleTorrentFilter('rate-down>=375 ki').apply(tlist, key='id') self.assertEqual(set(tids), { 2, }) tids = SingleTorrentFilter('rate-down<=384K').apply(tlist, key='id') self.assertEqual(set(tids), {1, 2, 3, 4}) tids = SingleTorrentFilter('%downloaded>0').apply(tlist, key='id') self.assertEqual(set(tids), {1, 2, 3, 4}) tids = SingleTorrentFilter('%downloaded>20').apply(tlist, key='id') self.assertEqual(set(tids), {1, 3, 4}) tids = SingleTorrentFilter('%downloaded>90').apply(tlist, key='id') self.assertEqual(set(tids), {1, 3}) tids = SingleTorrentFilter('%downloaded<90').apply(tlist, key='id') self.assertEqual(set(tids), {2, 4}) tids = SingleTorrentFilter('%downloaded<20').apply(tlist, key='id') self.assertEqual(set(tids), { 2, })
def test_progress_filter(self): tids = SingleTorrentFilter('complete').apply(tlist, key='id') self.assertEqual(set(tids), { 1, }) tids = SingleTorrentFilter('!complete').apply(tlist, key='id') self.assertEqual(set(tids), {2, 3, 4}) tids = SingleTorrentFilter('%downloaded=48').apply(tlist, key='id') self.assertEqual(set(tids), { 4, })
def test_status_filter(self): tids = SingleTorrentFilter('stopped').apply(tlist, key='id') self.assertEqual(set(tids), { 4, }) tids = SingleTorrentFilter('downloading').apply(tlist, key='id') self.assertEqual(set(tids), { 2, }) tids = SingleTorrentFilter('uploading').apply(tlist, key='id') self.assertEqual(set(tids), {2, 3}) tids = SingleTorrentFilter('active').apply(tlist, key='id') self.assertEqual(set(tids), {2, 3})
def test_name_is_default(self): tids = SingleTorrentFilter('=foo').apply(tlist, key='id') self.assertEqual(set(tids), { 1, }) tids = SingleTorrentFilter('!=foo').apply(tlist, key='id') self.assertEqual(set(tids), {2, 3, 4}) tids = SingleTorrentFilter('~foo').apply(tlist, key='id') self.assertEqual(set(tids), {1, 4}) tids = SingleTorrentFilter('!~foo').apply(tlist, key='id') self.assertEqual(set(tids), {2, 3}) tl = list(tlist) tl.append(Torrent({'id': 999, 'name': ''})) tids = SingleTorrentFilter('!').apply(tl, key='id') self.assertEqual(set(tids), { 999, })
def test_equals_operator(self): tids = SingleTorrentFilter('name=Foo').apply(tlist, key='id') self.assertEqual(set(tids), { 1, }) tids = SingleTorrentFilter('name=foo').apply(tlist, key='id') self.assertEqual(set(tids), { 1, }) tids = SingleTorrentFilter('name=Foof').apply(tlist, key='id') self.assertEqual(set(tids), set()) tids = SingleTorrentFilter('name=FooF').apply(tlist, key='id') self.assertEqual(set(tids), { 4, }) tids = SingleTorrentFilter('name=42').apply(tlist, key='id') self.assertEqual(set(tids), set())
def test_contains_operator(self): tids = SingleTorrentFilter('name~i').apply(tlist, key='id') self.assertEqual(set(tids), { 3, }) tids = SingleTorrentFilter('name~oof').apply(tlist, key='id') self.assertEqual(set(tids), { 4, }) tids = SingleTorrentFilter('name~oof').apply(tlist, key='id') self.assertEqual(set(tids), { 4, }) tids = SingleTorrentFilter('name~OOF').apply(tlist, key='id') self.assertEqual(set(tids), set()) tids = SingleTorrentFilter('name~123').apply(tlist, key='id') self.assertEqual(set(tids), { 2, })
def test_parsing_spaces(self): self.assertEqual(str(SingleTorrentFilter(' idle ')), 'idle') self.assertEqual(str(SingleTorrentFilter(' %downloaded ')), '%downloaded') self.assertEqual(str(SingleTorrentFilter(' name = foo')), '=foo') self.assertEqual(str(SingleTorrentFilter(' name != foo ')), '!=foo') self.assertEqual(str(SingleTorrentFilter(' name= foo, bar and baz ')), '= foo, bar and baz ') self.assertEqual(str(SingleTorrentFilter(' = foo, bar and baz ')), '=foo, bar and baz') self.assertEqual(str(SingleTorrentFilter('= foo, bar and baz ')), '= foo, bar and baz ')
def test_larger_smaller_operator_on_strings(self): tids = SingleTorrentFilter('name<4').apply(tlist, key='id') self.assertEqual(set(tids), {1, 3}) tids = SingleTorrentFilter('name<=4').apply(tlist, key='id') self.assertEqual(set(tids), {1, 3, 4}) tids = SingleTorrentFilter('name<fo').apply(tlist, key='id') self.assertEqual(set(tids), {2, 3}) tids = SingleTorrentFilter('name<=Foo').apply(tlist, key='id') self.assertEqual(set(tids), {1, 2, 3}) tids = SingleTorrentFilter('name>3').apply(tlist, key='id') self.assertEqual(set(tids), {2, 4}) tids = SingleTorrentFilter('name>=3').apply(tlist, key='id') self.assertEqual(set(tids), {1, 2, 3, 4}) tids = SingleTorrentFilter('name>Bar123').apply(tlist, key='id') self.assertEqual(set(tids), {1, 3, 4}) tids = SingleTorrentFilter('name>=Bar123').apply(tlist, key='id') self.assertEqual(set(tids), {1, 2, 3, 4})
def test_inverter(self): tids = SingleTorrentFilter('downloading').apply(tlist, key='id') self.assertEqual(set(tids), { 2, }) tids = SingleTorrentFilter('!downloading').apply(tlist, key='id') self.assertEqual(set(tids), {1, 3, 4}) tids = SingleTorrentFilter('name~foo').apply(tlist, key='id') self.assertEqual(set(tids), {1, 4}) tids = SingleTorrentFilter('name!~foo').apply(tlist, key='id') self.assertEqual(set(tids), {2, 3}) tids = SingleTorrentFilter('!name~foo').apply(tlist, key='id') self.assertEqual(set(tids), {2, 3}) tids = SingleTorrentFilter('!name!~foo').apply(tlist, key='id') self.assertEqual(set(tids), {1, 4})
def test_invalid_values(self): with self.assertRaises(ValueError) as cm: tuple(SingleTorrentFilter('rate-down>foo').apply(tlist, key='id')) self.assertEqual(str(cm.exception), "Invalid value for filter 'rate-down': 'foo'")
def test_equality(self): self.assertEqual(SingleTorrentFilter('name=foo'), SingleTorrentFilter('name=foo')) self.assertNotEqual(SingleTorrentFilter('name=foo'), SingleTorrentFilter('name=Foo')) self.assertEqual(SingleTorrentFilter('complete'), SingleTorrentFilter('complete')) self.assertNotEqual(SingleTorrentFilter('complete'), SingleTorrentFilter('!complete')) self.assertEqual(SingleTorrentFilter('!private'), SingleTorrentFilter('!private')) self.assertNotEqual(SingleTorrentFilter('private'), SingleTorrentFilter('!private'))
def test_invalid_operators(self): with self.assertRaises(ValueError) as cm: tuple(SingleTorrentFilter('%downloaded~4').apply(tlist, key='id')) self.assertEqual(str(cm.exception), "Invalid operator for filter '%downloaded': ~")
def test_private_filter(self): tids = SingleTorrentFilter('public').apply(tlist, key='id') self.assertEqual(set(tids), {1, 3}) tids = SingleTorrentFilter('private').apply(tlist, key='id') self.assertEqual(set(tids), {2, 4})
def test_parser(self): self.assertEqual(str(SingleTorrentFilter()), 'all') self.assertEqual(str(SingleTorrentFilter('*')), 'all') self.assertEqual(str(SingleTorrentFilter('idle')), 'idle') self.assertEqual(str(SingleTorrentFilter('!idle')), '!idle') self.assertEqual(str(SingleTorrentFilter('foo')), '~foo') self.assertEqual(str(SingleTorrentFilter('~foo')), '~foo') self.assertEqual(str(SingleTorrentFilter('=foo')), '=foo') self.assertEqual(str(SingleTorrentFilter('!=foo')), '!=foo') self.assertEqual(str(SingleTorrentFilter('name= foo')), '= foo') self.assertEqual(str(SingleTorrentFilter('name!=foo ')), '!=foo ') self.assertEqual(str(SingleTorrentFilter('%downloaded>17.2')), '%downloaded>17.2') with self.assertRaises(ValueError) as cm: SingleTorrentFilter('=') self.assertEqual(str(cm.exception), "Missing value: = ...") with self.assertRaises(ValueError) as cm: SingleTorrentFilter('%downloaded!>') self.assertEqual(str(cm.exception), "Missing value: %downloaded!> ...") # with self.assertRaises(ValueError) as cm: # SingleTorrentFilter('tracker') # self.assertEqual(str(cm.exception), "Missing operator and value: tracker [<|<=|=|>|>=|~] ...") with self.assertRaises(ValueError) as cm: SingleTorrentFilter('name! =foo') self.assertEqual(str(cm.exception), "Malformed filter expression: 'name! =foo'")
def test_path_filter(self): f = SingleTorrentFilter('path=/foo/bar/baz/') self.assertEqual(str(f), 'path=/foo/bar/baz/')
def test_aliases(self): tids1 = tuple(SingleTorrentFilter('verifying').apply(tlist, key='id')) tids2 = tuple(SingleTorrentFilter('checking').apply(tlist, key='id')) self.assertEqual(set(tids1), set(tids2))
def test_no_filter(self): tids = SingleTorrentFilter().apply(tlist, key='id') self.assertEqual(set(tids), {1, 2, 3, 4})
def test_path_filter(self): f = SingleTorrentFilter('path=/some/path/to/torrents/') self.assertEqual(f, SingleTorrentFilter('path=/some/path/to/torrents')) tids = f.apply(tlist, key='id') self.assertEqual(set(tids), {1, 2})