emmental/curds/test_track.py

95 lines
4.2 KiB
Python

# Copyright 2019 (c) Anna Schumaker.
import concurrent.futures
import mutagen
import os
import track
import unittest
test_tracks = os.path.abspath("./trier/Test Album")
test_library = os.path.abspath("./trier/Test Library")
class TestTrackClass(unittest.TestCase):
def setUp(self):
track.track_list.clear()
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.track_list), 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.track_list), 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):
fs = track.add(os.path.join(test_tracks, "01 - Test Track.ogg"))
self.assertEqual(len(track.track_list), 0)
t = fs.result()
self.assertIsNotNone(t)
self.assertEqual(len(track.track_list), 1)
self.assertIn(t, track.track_list)
self.assertIsNone(track.add(os.path.join(test_tracks, "01 - Test Track.ogg")).result())
self.assertEqual(len(track.track_list), 1)
self.assertIsNone(track.add("99 - No Such Track.ogg").result())
self.assertEqual(len(track.track_list), 1)
fs = track.add(os.path.join(test_tracks, "02 - Test {Disc 2}.ogg"))
u = fs.result()
self.assertIsNotNone(u)
self.assertEqual(len(track.track_list), 2)
self.assertIn(u, track.track_list)
def test_parallel_add(self):
count = 0
futures = [ ]
done = [ ]
none = [ ]
for dirname, subdirs, files in os.walk(test_library):
for f in files:
futures.append(track.add(os.path.join(dirname, f)))
futures.append(track.add(os.path.join(dirname, f)))
count += 1
self.assertLess(len(track.track_list), count)
for fs in concurrent.futures.as_completed(futures):
if fs.result() is not None:
done.append(fs.result())
else:
none.append(fs.result())
self.assertEqual(len(done), count)
self.assertEqual(len(none), count)
self.assertEqual(len(track.track_list), count)