[RARSLAVE] Add PAR2 Parser
[rarslave2.git] / rarslave-test.py
1 #!/usr/bin/env python
2 # vim: set ts=4 sts=4 sw=4 textwidth=92 :
3
4 import os, sys, unittest
5 from rarslave import *
6 from RarslaveLogger import RarslaveLogger
7 from RarslaveLogger import RarslaveMessage
8
9 class rarslavetest (unittest.TestCase):
10
11         def assertListEquals (self, l1, l2):
12                 if l1 is l2:
13                         return True
14
15                 self.assertEquals (len(l1), len(l2))
16
17                 for e in l1:
18                         if e not in l2:
19                                 self.fail ("Element missing from list")
20
21                 return True
22
23         def setUp (self):
24                 self.logger = RarslaveLogger ()
25
26         def tearDown (self):
27                 self.logger = None
28
29         def testGetBasenameNone (self):
30                 QNAME = '[something] some names.txt'
31                 ANAME = '[something] some names.txt'
32
33                 # Tests for an exension that should not be stripped
34                 self.assertEquals (ANAME, get_basename (QNAME))
35
36         def testGetBasenameSingle (self):
37                 QNAME = '[something] some names.par2'
38                 ANAME = '[something] some names'
39
40                 self.assertEquals (ANAME, get_basename (QNAME))
41
42         def testGetBasenameMulti (self):
43                 QNAME = '[a.f.k.] The Melancholy of Haruhi Suzumiya - 13.avi.001'
44                 ANAME = '[a.f.k.] The Melancholy of Haruhi Suzumiya - 13'
45
46                 self.assertEquals (ANAME, get_basename (QNAME))
47
48         def testGetBasenameMulti2 (self):
49                 QNAME = '[AonE-AnY]_Ah_My_Goddess_-_Sorezore_no_Tsubasa_-_13_[WS][E6380C3F].avi.vol00+01.PAR2'
50                 ANAME = '[AonE-AnY]_Ah_My_Goddess_-_Sorezore_no_Tsubasa_-_13_[WS][E6380C3F]'
51
52                 self.assertEquals (ANAME, get_basename (QNAME))
53
54         def testFindLikelyFilesBadDir (self):
55                 DIR = '/fake/dir'
56
57                 self.assertRaises (ValueError, find_likely_files, "fake", DIR)
58
59         def testFindAllPar2Files (self):
60                 DIR = '/fake/dir'
61
62                 self.assertRaises (ValueError, find_all_par2_files, DIR)
63
64         def testHasExtension1 (self):
65                 FILE = 'some.file.part01.rar'
66
67                 self.assertTrue (has_extension (FILE, 'rar'))
68                 self.assertTrue (has_extension (FILE, '.rar'))
69                 self.assertTrue (has_extension (FILE, 'part01.rar'))
70                 self.assertTrue (has_extension (FILE, '.part01.rar'))
71
72         def testHasExtension2 (self):
73                 FILE = 'some.file.part01.rar'
74
75                 self.assertFalse (has_extension (FILE, 'zip'))
76                 self.assertFalse (has_extension (FILE, '.zip'))
77                 self.assertFalse (has_extension (FILE, '.part01'))
78                 self.assertFalse (has_extension (FILE, 'part01'))
79
80         def testIsNewRar (self):
81                 DIR = os.getcwd() + '/test_material/01/'
82
83                 self.assertTrue (is_newrar (os.listdir (DIR)))
84
85         def testDeletableFiles1 (self):
86                 FILES = ['test.part%d.rar' % n for n in xrange(10)]
87
88                 self.assertListEquals (find_deleteable_files (FILES), FILES)
89
90         def testDeletableFiles2 (self):
91                 FILESN = ['%d.mp3' % n for n in xrange(20)]
92                 FILESY = ['%d.zip' % n for n in xrange(5)]
93
94                 self.assertListEquals (find_deleteable_files (FILESN + FILESY), FILESY)
95
96         ### RarslaveMessage tests
97
98         def testRepr (self):
99                 STR1 = "Hello World"
100                 STR2 = "Goodbye, \nCruel World"
101
102                 self.assertEquals (STR1, RarslaveMessage (STR1, True ).__repr__())
103                 self.assertEquals (STR1, RarslaveMessage (STR1, False).__repr__())
104                 self.assertEquals (STR2, RarslaveMessage (STR2, True ).__repr__())
105                 self.assertEquals (STR2, RarslaveMessage (STR2, False).__repr__())
106
107         def testisVerboseMessage (self):
108                 STR1 = "Hello World"
109                 STR2 = "Goodbye, \nCruel World"
110
111                 self.assertTrue (RarslaveMessage (STR1, False).isVerbose())
112                 self.assertTrue (RarslaveMessage (STR2, False).isVerbose())
113                 self.assertFalse (RarslaveMessage (STR1, True).isVerbose())
114                 self.assertFalse (RarslaveMessage (STR2, True).isVerbose())
115
116         ### RarslaveLogger tests
117
118         def testgetUniqueID (self):
119                 generated = []
120
121                 for i in xrange(100):
122                         id = self.logger.getUniqueID ()
123                         if id in generated:
124                                 self.fail ("Already generated ID was generated again")
125
126                         generated.append (id)
127
128         def testisValidID (self):
129                 id1 = self.logger.getUniqueID ()
130                 id2 = self.logger.getUniqueID ()
131
132                 self.assertFalse (self.logger.isValidID (-100))
133                 self.assertFalse (self.logger.isValidID (1000))
134
135                 self.assertTrue (self.logger.isValidID (id1))
136                 self.assertTrue (self.logger.isValidID (id2))
137
138
139 if __name__ == '__main__':
140         unittest.main ()
141