88 lines
3.9 KiB
Python
88 lines
3.9 KiB
Python
# Copyright 2019 (c) Anna Schumaker.
|
|
import asyncio
|
|
import concurrent.futures
|
|
import mutagen
|
|
import unittest
|
|
import os
|
|
import track
|
|
|
|
test_tracks = os.path.abspath("./trier/Test Album")
|
|
test_library = os.path.abspath("./trier/Test Library")
|
|
|
|
class TestTrackClass(unittest.TestCase):
|
|
def test_init_basic(self):
|
|
p = [ test_tracks, "01 - Test Track.ogg" ]
|
|
t = track.Track(os.path.join(*p))
|
|
self.assertEqual(t.path, os.path.join(*p))
|
|
self.assertEqual(t.title, "Test Track")
|
|
self.assertEqual(t.artist, "Test Artist")
|
|
self.assertEqual(t.tracknumber, 1)
|
|
self.assertEqual(t.length, 10)
|
|
self.assertEqual(t.discnumber, 1)
|
|
self.assertEqual(t.album.album, "Test Album")
|
|
self.assertEqual(t.album.date, 2019)
|
|
self.assertEqual(t.album.genre, "Test")
|
|
self.assertEqual(t.album.albumartist, "Test Artist")
|
|
self.assertEqual(len(track.tracklist), 0)
|
|
|
|
def test_init_empty(self):
|
|
p = [ test_tracks, "00 - Empty Track.ogg" ]
|
|
t = track.Track(os.path.join(*p))
|
|
self.assertEqual(t.path, os.path.join(*p))
|
|
self.assertEqual(t.title, "00 - Empty Track.ogg")
|
|
self.assertEqual(t.artist, "Unknown Artist")
|
|
self.assertEqual(t.tracknumber , 0)
|
|
self.assertEqual(t.length, 0)
|
|
self.assertEqual(t.discnumber, 1)
|
|
self.assertEqual(t.album.album, "Unknown Album")
|
|
self.assertEqual(t.album.date, 0)
|
|
self.assertEqual(t.album.genre, "Unknown")
|
|
self.assertEqual(t.album.albumartist, "Unknown Artist")
|
|
self.assertEqual(len(track.tracklist), 0)
|
|
|
|
def test_init_discno_detect(self):
|
|
join = os.path.join
|
|
self.assertEqual(track.Track(join(test_tracks, "02 - Test {Disc 2}.ogg")).discnumber, 2)
|
|
self.assertEqual(track.Track(join(test_tracks, "03 - Test [Disk One].ogg")).discnumber, 1)
|
|
self.assertEqual(track.Track(join(test_tracks, "04 - Test (Disc Two).ogg")).discnumber, 2)
|
|
self.assertEqual(track.Track(join(test_tracks, "05 - Test - Disc Three.ogg")).discnumber, 3)
|
|
self.assertEqual(track.Track(join(test_tracks, "06 - Test;CD Four.ogg")).discnumber, 4)
|
|
self.assertEqual(track.Track(join(test_tracks, "07 - Test;CdFive.ogg")).discnumber, 5)
|
|
self.assertEqual(track.Track(join(test_tracks, "08 - Test CD 6/10.ogg")).discnumber, 6)
|
|
self.assertEqual(track.Track(join(test_tracks, "09 - Test {Disc 02}.ogg")).discnumber, 2)
|
|
self.assertEqual(track.Track(join(test_tracks, "10 - Test {Disc 20}.ogg")).discnumber, 20)
|
|
|
|
def test_track_add(self):
|
|
track.tracklist.clear()
|
|
t = track.add(os.path.join(test_tracks, "01 - Test Track.ogg"))
|
|
self.assertIsNotNone(t)
|
|
self.assertEqual(len(track.tracklist), 1)
|
|
self.assertIn(t, track.tracklist)
|
|
|
|
self.assertIsNone(track.add(os.path.join(test_tracks, "01 - Test Track.ogg")))
|
|
self.assertEqual(len(track.tracklist), 1)
|
|
self.assertIsNone(track.add("99 - No Such Track.ogg"))
|
|
self.assertEqual(len(track.tracklist), 1)
|
|
|
|
u = track.add(os.path.join(test_tracks, "02 - Test {Disc 2}.ogg"))
|
|
self.assertIsNotNone(u)
|
|
self.assertEqual(len(track.tracklist), 2)
|
|
self.assertIn(u, track.tracklist)
|
|
|
|
def test_parallel_add(self):
|
|
track.tracklist.clear()
|
|
count = 0
|
|
tracks = [ ]
|
|
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as pool:
|
|
for dirname, subdirs, files in os.walk(test_library):
|
|
for f in files:
|
|
tracks.append(pool.submit(track.add, os.path.join(dirname, f)))
|
|
count += 1
|
|
self.assertEqual(len(track.tracklist), count)
|
|
self.assertEqual(len(tracks), count)
|
|
for t in tracks:
|
|
self.assertIsNotNone(t)
|
|
|
|
if __name__ == '__main--':
|
|
unittest.main()
|