refactored directory traversal, added support for .ape
[stuff.git] / transcode / test_lineage.py
blobfe4b868176701f594457fdaae0f6f1fdccc326f2
1 import unittest
2 import re
3 import string
4 import album
5 import lineage
7 class FileFaker:
8 def __init__(self, string = None):
9 self.lines = string
11 def readlines(self):
12 for line in self.lines.splitlines():
13 yield line
15 def write(self, string):
16 pass
17 #print string
19 class H(unittest.TestCase):
20 def test_all_same_string_false(self):
21 self.assertEqual(False, lineage.all_same(iter('aazaa')))
23 def test_all_same_string_true(self):
24 self.assertEqual(True, lineage.all_same(iter('aaaaa')))
26 def test_all_same_list_False(self):
27 self.assertEqual(False, lineage.all_same(['A','v','A','A']))
30 def test_all_same_list_True(self):
31 self.assertEqual(True, lineage.all_same(['A','A','A','A']))
33 def test_all_same_raw_string_true(self):
34 self.assertEqual(True, lineage.all_same('aaaaa'))
37 class I(unittest.TestCase):
38 def test_track(self):
39 self.assertEqual([5,6], lineage.find_diffs( ['track%.2d.whatever' % n for n in range(12) ]))
41 def test_track(self):
42 self.assertEqual([5,6], lineage.find_diffs( ['track%.2d.whatever' % n for n in range(12) ]))
44 def test_track(self):
45 tracks = ["Track01.ape", "Track02.ape", "Track03.ape"]
46 self.assertEqual(6, lineage.find_diffs(tracks))
48 def test_track2(self):
49 tracks = ["01. Reverence.ape", "02. She's My Baby.ape", "10. Take The Long Way Home.ape"]
50 self.assertEqual(0, lineage.find_diffs(tracks))
52 class TestLineageLifetime(unittest.TestCase):
53 def test_Empty(self):
54 obj = lineage.Lineage()
55 self.assertEqual(len(obj.album.discs), 1)
56 obj.try_match('DISC 2')
57 self.assertEqual(len(obj.album.discs), 2)
58 obj = lineage.Lineage()
59 self.assertEqual(len(obj.album.discs), 1)
62 class TestLineage(unittest.TestCase):
64 def setUp(self):
65 self.lineage = lineage.Lineage()
67 def testDisc(self):
68 disc = self.lineage.album.disc(1)
70 def testTrack(self):
71 line = '8. God Is A DJ'
72 self.lineage.try_match(line)
73 self.assertEqual(self.lineage.album.disc(1).track(8).title, 'God Is A Dj')
75 def testTrackWithoutSpace(self):
76 line = '8.God Is A DJ'
77 self.lineage.try_match(line)
78 self.assertEqual(self.lineage.album.disc(1).track(8).title, 'God Is A Dj')
80 def testTrackWithoutSpace(self):
81 self.lineage.try_match('CD2')
82 self.lineage.try_match('08. God Is A DJ')
83 self.lineage.try_match('1234567890abcdef0123456789012345 *CD2/Track07.flac')
84 self.lineage.try_match('1234567890abcdef0123456789012345 *CD2/Track08.flac')
85 self.lineage.process()
86 #self.lineage.try_match('Track01.flac:1234567890abcdef0123456789012345')
87 #self.lineage.try_match('Track02.flac:1234567890abcdef0123456789012345')
88 #self.lineage.process()
89 self.assertEqual(self.lineage.album.disc(2).track(8).title, 'God Is A DJ')
90 self.assertEqual(self.lineage.album.disc(2).track(8).filename, 'Track08.flac')
93 def testTrack(self):
94 line = '08 God Is A DJ'
95 self.assertEqual(self.lineage.try_match_test(line), ('08' , 'God Is A DJ'))
96 self.lineage.try_match(line)
97 self.assertEqual(self.lineage.album.disc(1).track(8).title, 'God Is A DJ')
99 def testRe(self):
100 self.lineage.try_match_test('Track01.flac:1234567890abcdef0123456789012345')
101 self.lineage.try_match_test('Track10.flac:1234567890abcdef0123456789012345')
102 #self.assertEqual(self.lineage.try_match_test('DISC 2'), ('DISC' , '2'))
103 #self.assertEqual(self.lineage.try_match_test('Disc 2'), ('Disc' , '2'))
104 #self.assertEqual(self.lineage.try_match_test('d3t01.flac'), ('3' , '01'))
106 def testChecksum1(self):
107 self.lineage.try_match('Track01.flac:1234567890abcdef0123456789012345')
108 self.lineage.try_match('Track02.flac:1234567890abcdef0123456789012345')
109 self.lineage.process()
110 self.assertEqual(self.lineage.album.disc(1).track(1).filename, 'Track01.flac')
111 self.assertEqual(self.lineage.album.disc(1).track(1).checksum, '1234567890abcdef0123456789012345')
113 def testChecksum2(self):
114 input = '''
115 1234567890abcdef0123456789012345 *Faithless2005-08-19_t07.flac
116 1234567890abcdef0123456789012345 *Faithless2005-08-19_t08.flac
118 self.lineage.input_file = FileFaker(input)
119 self.lineage.readlines()
120 self.assertEqual(self.lineage.album.disc(1).track(8).filename, 'Faithless2005-08-19_t08.flac')
121 self.assertEqual(self.lineage.album.disc(1).track(8).checksum, '1234567890abcdef0123456789012345')
123 def testChecksum3(self):
124 input = '''
125 1234567890abcdef0123456789012345 *01. Reverence.ape
126 1234567890abcdef0123456789012345 *02. She's My Baby.ape
127 1234567890abcdef0123456789012345 *10. Take The Long Way Home.ape
129 self.lineage.input_file = FileFaker(input)
130 self.lineage.readlines()
131 self.assertEqual(self.lineage.album.disc(1).track(10).filename, '10. Take The Long Way Home.ape')
133 def testFilenameWithDiscNumber(self):
134 self.lineage.try_match('d1t01.flac')
135 #self.assertEqual(self.lineage.disc.number, 1)
136 self.lineage.try_match('d2t01.flac')
137 #self.assertEqual(self.lineage.disc.number, 2)
140 def testDetectNumber(self):
141 self.lineage.try_match('1234567890abcdef0123456789012345 *Faithless2005-08-19_t01.flac')
142 self.lineage.try_match('1234567890abcdef0123456789012345 *Faithless2005-08-19_t02.flac')
143 self.lineage.try_match('1234567890abcdef0123456789012345 *Faithless2005-08-19_t07.flac')
144 self.lineage.process()
145 self.assertEqual(self.lineage.album.disc(1).track(7).filename, 'Faithless2005-08-19_t07.flac')
147 def testDetectNumberWithBackslash(self):
148 self.lineage.try_match('1234567890abcdef0123456789012345 *cd1\Faithless2005-08-19_t01.flac')
149 self.lineage.try_match('1234567890abcdef0123456789012345 *cd1\Faithless2005-08-19_t02.flac')
150 self.lineage.try_match('1234567890abcdef0123456789012345 *cd2\Faithless2005-08-19_t03.flac')
151 self.lineage.try_match('1234567890abcdef0123456789012345 *cd2\Faithless2005-08-19_t04.flac')
152 self.lineage.process()
153 self.assertEqual(self.lineage.album.disc(1).track(1).filename, 'Faithless2005-08-19_t01.flac')
154 self.assertEqual(self.lineage.album.disc(2).track(3).filename, 'Faithless2005-08-19_t03.flac')
156 def testMultiDisc(self):
158 class FileFaker:
159 def write(self, string):
160 pass
161 #print string
163 self.lineage.try_match('DISC 1')
164 self.lineage.try_match('DISC 2')
165 self.lineage.try_match('8. God Is A DJ')
166 self.assertEqual(self.lineage.album.disc(2).track(8).title, 'God Is A DJ')
167 file = FileFaker()
168 self.lineage.write_cue_sheet()
170 def testMultiDisc(self):
171 self.lineage.try_match("01. Reverence")
172 self.lineage.try_match("02. She's My Baby")
173 self.lineage.try_match("01. Reverence")
174 self.lineage.try_match("02. She's My Baby")
175 self.lineage.process()
176 self.assertEqual(self.lineage.album.disc(1).track(1).title, "Reverence")
177 self.assertEqual(self.lineage.album.disc(2).track(1).title, "Reverence")
179 def testExample(self):
180 input = '''
181 01. Faithless - Reverence
182 02. Faithless - She's My Baby
183 03. Faithless - Take The Long Way Home
184 04. Faithless - Insomnia
185 05. Faithless - Bring The Family Back
186 06. Faithless - Salva Mea
187 07. Faithless - Dirty Old Man
188 08. Faithless - God Is A DJ
191 self.lineage.input_file = FileFaker(input)
192 file = FileFaker()
193 self.lineage.readlines()
194 self.lineage.write_cue_sheet()
197 if __name__ == '__main__':
198 unittest.main()