2021-06-21 12:36:46 -04:00
|
|
|
# Copyright 2021 (c) Anna Schumaker.
|
2021-06-28 11:12:14 -04:00
|
|
|
from . import publisher
|
2021-06-21 12:36:46 -04:00
|
|
|
from . import tag
|
2021-07-08 16:45:15 -04:00
|
|
|
from . import fake
|
2021-07-06 13:14:18 -04:00
|
|
|
import random
|
2021-06-21 13:42:00 -04:00
|
|
|
import threading
|
2021-06-21 12:36:46 -04:00
|
|
|
import unittest
|
|
|
|
|
2021-06-23 11:08:35 -04:00
|
|
|
|
2021-06-21 12:36:46 -04:00
|
|
|
class TestTag(unittest.TestCase):
|
2021-06-28 11:12:14 -04:00
|
|
|
def setUp(self):
|
|
|
|
self.changed = None
|
|
|
|
|
2021-07-08 12:46:18 -04:00
|
|
|
def callback_func(self, tag, track, pos):
|
|
|
|
self.changed = (tag, track, pos)
|
2021-06-28 11:12:14 -04:00
|
|
|
|
2021-06-21 12:36:46 -04:00
|
|
|
def test_tag_init(self):
|
|
|
|
t = tag.Tag("test")
|
|
|
|
self.assertEqual(t.name, "test")
|
2021-07-02 08:33:57 -04:00
|
|
|
self.assertEqual(t.sort, "test")
|
2021-07-06 10:43:16 -04:00
|
|
|
self.assertEqual(t.current, -1)
|
2021-07-08 16:55:56 -04:00
|
|
|
self.assertEqual(t.runtime, 0)
|
2021-06-21 12:36:46 -04:00
|
|
|
self.assertEqual(t.tracks, [ ])
|
2021-07-06 11:25:20 -04:00
|
|
|
self.assertFalse(t.loop)
|
2021-07-06 13:14:18 -04:00
|
|
|
self.assertFalse(t.random)
|
2021-07-06 11:25:20 -04:00
|
|
|
self.assertTrue( t.can_loop())
|
2021-07-06 13:14:18 -04:00
|
|
|
self.assertTrue( t.can_random())
|
2021-06-21 12:36:46 -04:00
|
|
|
self.assertIsNone(t.widgets)
|
2021-06-21 13:42:00 -04:00
|
|
|
self.assertIsInstance(t.lock, type(threading.Lock()))
|
2021-06-28 11:12:14 -04:00
|
|
|
self.assertIsInstance(t.TrackAdded, publisher.Publisher)
|
|
|
|
self.assertIsInstance(t.TrackRemoved, publisher.Publisher)
|
2021-06-21 12:36:46 -04:00
|
|
|
|
2021-06-21 14:57:01 -04:00
|
|
|
self.assertEqual(str(t), "test")
|
|
|
|
|
2021-06-21 12:36:46 -04:00
|
|
|
def test_tag_len(self):
|
|
|
|
t = tag.Tag("Test")
|
|
|
|
self.assertEqual(len(t), 0)
|
2021-07-08 16:45:15 -04:00
|
|
|
t.tracks = [ fake.Track(i) for i in range(5) ]
|
2021-06-21 12:36:46 -04:00
|
|
|
self.assertEqual(len(t), 5)
|
|
|
|
|
|
|
|
def test_tag_lt(self):
|
|
|
|
a = tag.Tag("A")
|
|
|
|
b = tag.Tag("B")
|
2021-07-01 16:58:21 -04:00
|
|
|
c = tag.Tag("C")
|
2021-06-21 12:36:46 -04:00
|
|
|
|
|
|
|
self.assertTrue( a < b)
|
|
|
|
self.assertFalse(b < a)
|
|
|
|
self.assertFalse(a < a)
|
|
|
|
|
2021-07-01 16:58:21 -04:00
|
|
|
a2 = tag.SuperTag(b, "A")
|
|
|
|
self.assertTrue(a < a2)
|
|
|
|
self.assertTrue(b < a2)
|
|
|
|
self.assertTrue(a2 < c)
|
|
|
|
|
2021-07-02 08:50:03 -04:00
|
|
|
def test_tag_header(self):
|
|
|
|
self.assertEqual(tag.Tag("Test").get_header(), "T")
|
|
|
|
self.assertEqual(tag.Tag("Test", "sort").get_header(), "S")
|
|
|
|
self.assertEqual(tag.Tag("").get_header(), "")
|
|
|
|
|
2021-06-21 13:38:22 -04:00
|
|
|
def test_tag_state(self):
|
|
|
|
t = tag.Tag("test")
|
2021-07-08 16:45:15 -04:00
|
|
|
tracks = [ fake.Track(i) for i in range(5) ]
|
2021-06-23 11:08:35 -04:00
|
|
|
t.tracks = tracks
|
2021-06-21 13:38:22 -04:00
|
|
|
|
|
|
|
state = t.__getstate__()
|
2021-07-06 10:43:16 -04:00
|
|
|
self.assertEqual(set(state.keys()),
|
2021-07-06 13:14:18 -04:00
|
|
|
set([ "name", "sort", "current", "loop", "random", "tracks" ]))
|
2021-06-21 13:38:22 -04:00
|
|
|
self.assertEqual(state["name"], "test")
|
2021-07-02 08:33:57 -04:00
|
|
|
self.assertEqual(state["sort"], "test")
|
2021-07-06 10:43:16 -04:00
|
|
|
self.assertEqual(state["current"], -1)
|
2021-06-23 11:08:35 -04:00
|
|
|
self.assertEqual(state["tracks"], [ 0, 1, 2, 3, 4 ])
|
2021-07-06 11:25:20 -04:00
|
|
|
self.assertFalse(state["loop"])
|
2021-07-06 13:14:18 -04:00
|
|
|
self.assertFalse(state["random"])
|
2021-06-21 13:38:22 -04:00
|
|
|
|
2021-07-02 08:33:57 -04:00
|
|
|
state["sort"] = "sort"
|
2021-07-06 10:43:16 -04:00
|
|
|
state["current"] = 42
|
|
|
|
|
2021-06-21 13:38:22 -04:00
|
|
|
t.__dict__.clear()
|
|
|
|
t.__setstate__(state)
|
|
|
|
self.assertEqual(t.name, "test")
|
2021-07-02 08:33:57 -04:00
|
|
|
self.assertEqual(t.sort, "sort")
|
2021-07-06 10:43:16 -04:00
|
|
|
self.assertEqual(t.current, 42)
|
2021-07-08 16:55:56 -04:00
|
|
|
self.assertEqual(t.runtime, 0)
|
2021-06-23 11:08:35 -04:00
|
|
|
self.assertEqual(t.tracks, [ 0, 1, 2, 3, 4 ])
|
2021-06-21 13:38:22 -04:00
|
|
|
self.assertEqual(t.widgets, None)
|
2021-07-06 11:25:20 -04:00
|
|
|
self.assertFalse(t.loop)
|
2021-07-06 13:14:18 -04:00
|
|
|
self.assertFalse(t.random)
|
2021-06-21 13:42:00 -04:00
|
|
|
self.assertIsInstance(t.lock, type(threading.Lock()))
|
2021-06-28 11:12:14 -04:00
|
|
|
self.assertIsInstance(t.TrackAdded, publisher.Publisher)
|
|
|
|
self.assertIsInstance(t.TrackRemoved, publisher.Publisher)
|
2021-06-21 13:38:22 -04:00
|
|
|
|
2021-06-23 11:08:35 -04:00
|
|
|
for track in tracks:
|
|
|
|
t.init_track(track)
|
|
|
|
self.assertEqual(t.tracks, tracks)
|
2021-07-08 16:55:56 -04:00
|
|
|
self.assertEqual(t.runtime, 10)
|
2021-06-23 11:08:35 -04:00
|
|
|
|
2021-06-21 12:36:46 -04:00
|
|
|
def test_tag_add_track(self):
|
|
|
|
t = tag.Tag("test")
|
2021-06-28 11:12:14 -04:00
|
|
|
t.TrackAdded.register(self.callback_func)
|
|
|
|
|
2021-07-08 16:45:15 -04:00
|
|
|
t.add_track(fake.Track(1))
|
|
|
|
self.assertEqual(t.tracks, [ fake.Track(1) ])
|
|
|
|
self.assertEqual(self.changed, (t, fake.Track(1), 0))
|
2021-07-08 16:55:56 -04:00
|
|
|
self.assertEqual(t.runtime, 1)
|
2021-06-28 11:12:14 -04:00
|
|
|
|
2021-07-08 16:45:15 -04:00
|
|
|
t.add_track(fake.Track(2))
|
|
|
|
self.assertEqual(t.tracks, [ fake.Track(1), fake.Track(2) ])
|
|
|
|
self.assertEqual(self.changed, (t, fake.Track(2), 1))
|
2021-07-08 16:55:56 -04:00
|
|
|
self.assertEqual(t.runtime, 3)
|
2021-06-21 12:36:46 -04:00
|
|
|
|
|
|
|
def test_tag_remove_track(self):
|
|
|
|
t = tag.Tag("test")
|
2021-07-08 16:55:56 -04:00
|
|
|
t.add_track(fake.Track(1))
|
|
|
|
t.add_track(fake.Track(2))
|
2021-06-28 11:12:14 -04:00
|
|
|
t.TrackRemoved.register(self.callback_func)
|
2021-06-21 12:36:46 -04:00
|
|
|
|
2021-07-08 16:55:56 -04:00
|
|
|
t.remove_track(fake.Track(1))
|
|
|
|
self.assertEqual(t.tracks, [ fake.Track(2) ])
|
|
|
|
self.assertEqual(self.changed, (t, fake.Track(1), 0))
|
|
|
|
self.assertEqual(t.runtime, 2)
|
2021-06-28 11:12:14 -04:00
|
|
|
|
2021-07-08 16:55:56 -04:00
|
|
|
t.remove_track(fake.Track(2))
|
2021-06-21 12:36:46 -04:00
|
|
|
self.assertEqual(t.tracks, [ ])
|
2021-07-08 16:55:56 -04:00
|
|
|
self.assertEqual(self.changed, (t, fake.Track(2), 0))
|
|
|
|
self.assertEqual(t.runtime, 0)
|
2021-06-23 15:14:51 -04:00
|
|
|
|
2021-07-06 10:43:16 -04:00
|
|
|
def test_tag_next(self):
|
|
|
|
t = tag.Tag("test")
|
|
|
|
t.tracks = [ 1, 2, 3 ]
|
|
|
|
|
|
|
|
self.assertEqual(t.next(), 1)
|
|
|
|
self.assertEqual(t.current, 0)
|
|
|
|
|
|
|
|
self.assertEqual(t.next(), 2)
|
|
|
|
self.assertEqual(t.current, 1)
|
|
|
|
|
|
|
|
self.assertEqual(t.next(), 3)
|
|
|
|
self.assertEqual(t.current, 2)
|
|
|
|
|
|
|
|
self.assertIsNone(t.next())
|
|
|
|
self.assertEqual(t.current, 3)
|
|
|
|
|
2021-07-06 11:25:20 -04:00
|
|
|
t.loop = True
|
|
|
|
self.assertEqual(t.next(), 1)
|
|
|
|
self.assertEqual(t.current, 0)
|
|
|
|
|
2021-07-06 13:14:18 -04:00
|
|
|
def test_tag_random_next(self):
|
|
|
|
t = tag.Tag("test")
|
|
|
|
t.tracks = [ 0, 1, 2, 3, 4, 5 ]
|
|
|
|
t.random = True
|
|
|
|
|
|
|
|
# Expected randint(): 5, 3, 2, 5, 5, 5
|
|
|
|
random.seed(20210318)
|
|
|
|
self.assertEqual(t.next(), 4) # -1 + 5
|
|
|
|
self.assertEqual(t.next(), 1) # (4 + 3) % 6 = 7 % 6
|
|
|
|
self.assertEqual(t.next(), 3) # 1 + 2
|
|
|
|
self.assertEqual(t.next(), 2) # (3 + 5) % 6 = 8 % 6
|
|
|
|
self.assertEqual(t.next(), 1) # (2 + 5) % 6 = 7 % 6
|
|
|
|
self.assertEqual(t.next(), 0) # (1 + 5) % 6 = 0
|
|
|
|
|
|
|
|
t.tracks = [ ]
|
|
|
|
self.assertIsNone(t.next())
|
|
|
|
|
|
|
|
t.tracks = [ 0 ]
|
|
|
|
self.assertEqual(t.next(), 0)
|
|
|
|
self.assertEqual(t.next(), 0)
|
|
|
|
|
|
|
|
t.tracks = [ 0, 1 ]
|
|
|
|
t.current = -1
|
|
|
|
self.assertEqual(t.next(), 0)
|
|
|
|
self.assertEqual(t.next(), 1)
|
|
|
|
self.assertEqual(t.next(), 0)
|
|
|
|
self.assertEqual(t.next(), 1)
|
|
|
|
|
2021-07-06 16:14:39 -04:00
|
|
|
def test_tag_stacked(self):
|
|
|
|
t = tag.Tag("test")
|
|
|
|
t.tracks = [ 0, 1, 2 ]
|
|
|
|
|
|
|
|
t.current = 3
|
|
|
|
t.stacked()
|
|
|
|
self.assertEqual(t.current, -1)
|
|
|
|
|
|
|
|
t.current = 1
|
|
|
|
t.stacked()
|
|
|
|
self.assertEqual(t.current, 1)
|
|
|
|
|
2021-06-23 15:14:51 -04:00
|
|
|
|
|
|
|
class TestSuperTag(unittest.TestCase):
|
|
|
|
def test_super_tag(self):
|
|
|
|
parent = tag.Tag("parent")
|
2021-07-02 08:33:57 -04:00
|
|
|
st = tag.SuperTag(parent, "test", "sort")
|
2021-07-08 16:45:15 -04:00
|
|
|
st.tracks = [ fake.Track(i) for i in range(5) ]
|
2021-06-23 15:14:51 -04:00
|
|
|
|
|
|
|
self.assertIsInstance(st, tag.Tag)
|
|
|
|
self.assertEqual(st.parent, parent)
|
|
|
|
|
|
|
|
state = st.__getstate__()
|
|
|
|
self.assertEqual(state["name"], "test")
|
2021-07-02 08:33:57 -04:00
|
|
|
self.assertEqual(state["sort"], "sort")
|
2021-07-06 10:43:16 -04:00
|
|
|
self.assertEqual(state["current"], -1)
|
2021-06-23 15:14:51 -04:00
|
|
|
self.assertEqual(state["tracks"], [ 0, 1, 2, 3, 4 ])
|
|
|
|
self.assertEqual(state["parent"], parent)
|
|
|
|
|
2021-07-02 08:33:57 -04:00
|
|
|
st.__dict__.clear()
|
2021-06-23 15:14:51 -04:00
|
|
|
st.__setstate__(state)
|
|
|
|
self.assertEqual(st.name, "test")
|
2021-07-02 08:33:57 -04:00
|
|
|
self.assertEqual(st.sort, "sort")
|
2021-06-23 15:14:51 -04:00
|
|
|
self.assertEqual(st.tracks, [ 0, 1, 2, 3, 4 ])
|
|
|
|
self.assertEqual(st.widgets, None)
|
|
|
|
self.assertEqual(st.parent, parent)
|
|
|
|
self.assertIsInstance(st.lock, type(threading.Lock()))
|
2021-07-01 16:58:21 -04:00
|
|
|
|
|
|
|
def test_super_tag_lt(self):
|
|
|
|
A = tag.Tag("A")
|
|
|
|
B = tag.Tag("B")
|
|
|
|
C = tag.Tag("C")
|
|
|
|
|
|
|
|
aa = tag.SuperTag(A, "A")
|
|
|
|
ba = tag.SuperTag(B, "A")
|
|
|
|
bb = tag.SuperTag(B, "B")
|
|
|
|
ca = tag.SuperTag(C, "A")
|
|
|
|
|
|
|
|
lst = [ A, aa, B, ba, bb, C, ca ]
|
|
|
|
for i, t in enumerate(lst):
|
|
|
|
for u in lst[i+1:]:
|
|
|
|
self.assertTrue(t < u)
|
|
|
|
|
|
|
|
lst = [ ca, C, bb, ba, B, aa, A ]
|
|
|
|
for i, t in enumerate(lst):
|
|
|
|
for u in lst[i+1:]:
|
|
|
|
self.assertFalse(t < u)
|