172 lines
6.4 KiB
Python
172 lines
6.4 KiB
Python
# Copyright 2020 (c) Anna Schumaker.
|
|
import lib
|
|
import pathlib
|
|
import trackdb
|
|
import unittest
|
|
|
|
test_tracks = pathlib.Path("./data/Test Album")
|
|
|
|
class TestLibraryTag(unittest.TestCase):
|
|
def tearDown(self):
|
|
trackdb.reset()
|
|
|
|
def test_library_tag_init(self):
|
|
library = trackdb.LibraryTag(test_tracks)
|
|
self.assertIsInstance(library, lib.tag.Tag)
|
|
self.assertIsInstance(library.clear, lib.thread.Thread)
|
|
self.assertIsInstance(library.scan, lib.thread.Thread)
|
|
|
|
def test_library_tag_state(self):
|
|
lib = trackdb.LibraryTag(test_tracks)
|
|
lib.scan().join()
|
|
|
|
state = lib.__getstate__()
|
|
self.assertEqual(set(state.keys()),
|
|
set([ "name", "sort", "current", "loop", "random", "tracks" ]))
|
|
self.assertEqual(state["name"], test_tracks)
|
|
self.assertEqual(state["tracks"], [ i for i in range(12) ])
|
|
|
|
lib.__dict__.clear()
|
|
lib.__setstate__(state)
|
|
lib.fix_tracks()
|
|
self.assertEqual(lib.name, test_tracks)
|
|
self.assertEqual(lib.tracks, [ trackdb.Tracks[i] for i in range(12) ])
|
|
self.assertEqual(lib.clear.func, lib.__do_clear__)
|
|
self.assertEqual(lib.scan.func, lib.__do_scan__)
|
|
|
|
def test_library_tag_scan(self):
|
|
lib = trackdb.LibraryTag(test_tracks)
|
|
lib.scan().join()
|
|
for i in range(12):
|
|
self.assertEqual(lib.tracks[i], trackdb.Tracks[i])
|
|
|
|
def test_library_tag_scan_new(self):
|
|
lib = trackdb.LibraryTag(test_tracks)
|
|
lib.scan().join()
|
|
for trak in [ trackdb.Tracks[0], trackdb.Tracks[11] ]:
|
|
lib.remove_track(trak)
|
|
trackdb.Tracks.remove(trak)
|
|
lib.scan().join()
|
|
self.assertEqual(len(lib.tracks), 12)
|
|
|
|
def test_library_tag_scan_remove(self):
|
|
lib = trackdb.LibraryTag(test_tracks)
|
|
lib.scan().join()
|
|
|
|
trak = trackdb.track.Track(trackdb.Tracks.nextid,
|
|
test_tracks / "01 - Test Track.ogg", lib)
|
|
trak.path = pathlib.Path("No Such File")
|
|
lib.tracks.append(trak)
|
|
trackdb.Tracks.tracks[trak.trackid] = trak
|
|
lib.scan().join()
|
|
self.assertNotIn(trak, lib.tracks)
|
|
|
|
def test_library_tag_clear(self):
|
|
lib = trackdb.LibraryTag(test_tracks)
|
|
lib.scan().join()
|
|
self.assertEqual(len(lib), 12)
|
|
|
|
lib.clear().join()
|
|
self.assertEqual(len(lib), 0)
|
|
self.assertEqual(len(trackdb.Tracks), 0)
|
|
|
|
|
|
class TestLibraryStore(unittest.TestCase):
|
|
def test_library_store(self):
|
|
store = trackdb.LibraryStore()
|
|
lib = store.add(test_tracks)
|
|
self.assertIsInstance(lib, trackdb.LibraryTag)
|
|
|
|
lib.scan().join()
|
|
self.assertEqual(len(lib), 12)
|
|
|
|
store.remove(lib)
|
|
lib.clear.join()
|
|
self.assertEqual(len(lib), 0)
|
|
|
|
|
|
class TestTrackDB(unittest.TestCase):
|
|
def tearDown(self):
|
|
trackdb.reset()
|
|
|
|
def test_trackdb_init(self):
|
|
self.assertIsInstance(trackdb.Bus, lib.bus.Bus)
|
|
self.assertIsInstance(trackdb.Tracks, trackdb.allocator.TrackAllocator)
|
|
self.assertIsInstance(trackdb.Stack, trackdb.stack.TagStack)
|
|
self.assertIsInstance(trackdb.Library, trackdb.LibraryStore)
|
|
|
|
self.assertEqual(trackdb.File, "trackdb.pickle")
|
|
self.assertEqual(trackdb.Bus.timeout, 500)
|
|
|
|
self.assertIn(trackdb.save, trackdb.Library.Added.subscribers)
|
|
self.assertIn(trackdb.save, trackdb.Library.Removed.subscribers)
|
|
self.assertIn(trackdb.save, trackdb.Tracks.Added.subscribers)
|
|
self.assertIn(trackdb.save, trackdb.Tracks.Removed.subscribers)
|
|
self.assertIn(trackdb.save, trackdb.Tracks.Updated.subscribers)
|
|
self.assertIn(trackdb.save, trackdb.tags.User.Added.subscribers)
|
|
self.assertIn(trackdb.save, trackdb.tags.User.Removed.subscribers)
|
|
self.assertIn(trackdb.save, trackdb.Stack.PushPop.subscribers)
|
|
self.assertIn(trackdb.save, trackdb.Stack.NextTrack.subscribers)
|
|
|
|
def test_trackdb_save_load(self):
|
|
db_file = lib.data.DataFile(trackdb.File, lib.data.READ)
|
|
library = trackdb.Library.add(test_tracks)
|
|
library.scan()
|
|
trackdb.Stack.push(library)
|
|
|
|
trackdb.save()
|
|
self.assertEqual(trackdb.Bus.passengers, [ (trackdb._do_save, ()) ])
|
|
self.assertFalse(db_file.exists())
|
|
|
|
library.scan.join()
|
|
trackdb.Bus.complete()
|
|
self.assertTrue(db_file.exists())
|
|
|
|
trackdb.tags.reset()
|
|
trackdb.Library.reset()
|
|
trackdb.Tracks.reset()
|
|
trackdb.Stack.reset()
|
|
trackdb.load()
|
|
|
|
self.assertEqual(len(trackdb.Tracks), 12)
|
|
self.assertEqual(len(trackdb.Library), 1)
|
|
self.assertEqual(len(trackdb.Library[test_tracks]), 12)
|
|
self.assertEqual(len(trackdb.tags.Artist), 3)
|
|
self.assertEqual(len(trackdb.tags.Album), 12)
|
|
self.assertEqual(len(trackdb.tags.Genre), 4)
|
|
self.assertEqual(len(trackdb.tags.Decade), 2)
|
|
self.assertEqual(len(trackdb.tags.Year), 2)
|
|
self.assertEqual(trackdb.Stack.tags, [ trackdb.Library[test_tracks] ])
|
|
|
|
self.assertIn(trackdb.save, trackdb.Library.Added.subscribers)
|
|
self.assertIn(trackdb.save, trackdb.Tracks.Added.subscribers)
|
|
self.assertIn(trackdb.save, trackdb.tags.User.Added.subscribers)
|
|
|
|
def test_trackdb_stress(self):
|
|
lib = trackdb.Library.add(pathlib.Path("./trier/Test Library/"))
|
|
lib.scan().join()
|
|
trackdb.Bus.complete()
|
|
|
|
trackdb.Library.remove(lib)
|
|
lib.clear.join()
|
|
trackdb.Bus.complete()
|
|
|
|
def test_trackdb_reset(self):
|
|
trackdb.Tracks.Added.register(1)
|
|
trackdb.Tracks.Removed.register(1)
|
|
trackdb.Tracks.Updated.register(1)
|
|
trackdb.Library.Added.register(1)
|
|
trackdb.Library.Removed.register(1)
|
|
trackdb.Library.store = { "a" : 1, "b" : 2, "c" : 3 }
|
|
with lib.data.DataFile(trackdb.File, lib.data.WRITE) as f:
|
|
f.pickle([ 0, [] ])
|
|
|
|
trackdb.reset()
|
|
self.assertEqual(len(trackdb.Library), 0)
|
|
self.assertIn(trackdb.save, trackdb.Tracks.Added.subscribers)
|
|
self.assertIn(trackdb.save, trackdb.Tracks.Removed.subscribers)
|
|
self.assertIn(trackdb.save, trackdb.Tracks.Updated.subscribers)
|
|
self.assertIn(trackdb.save, trackdb.Library.Added.subscribers)
|
|
self.assertIn(trackdb.save, trackdb.Library.Removed.subscribers)
|
|
self.assertFalse(lib.data.DataFile(trackdb.File, lib.data.READ).exists())
|