2021-07-07 13:27:52 -04:00
|
|
|
# Copyright 2021 (c) Anna Schumaker.
|
2021-07-07 14:26:44 -04:00
|
|
|
from lib import publisher
|
2021-07-07 13:27:52 -04:00
|
|
|
from lib import tag
|
|
|
|
from . import stack
|
|
|
|
from . import tags
|
|
|
|
import unittest
|
|
|
|
|
2021-07-07 13:39:54 -04:00
|
|
|
class FakeTrack:
|
|
|
|
def __init__(self, n):
|
|
|
|
self.n = n
|
2021-07-07 13:56:11 -04:00
|
|
|
self.length = n
|
2021-07-07 13:39:54 -04:00
|
|
|
|
|
|
|
def add_to_playlist(self, name):
|
|
|
|
tags.User.add(name, self)
|
|
|
|
|
2021-07-07 13:56:11 -04:00
|
|
|
def remove_from_playlist(self, name):
|
|
|
|
tags.User[name].remove_track(self)
|
|
|
|
|
2021-07-07 13:27:52 -04:00
|
|
|
class TestTagStack(unittest.TestCase):
|
2021-07-07 14:26:44 -04:00
|
|
|
def setUp(self):
|
|
|
|
self.pushpop = None
|
|
|
|
|
2021-07-07 13:39:54 -04:00
|
|
|
def tearDown(self):
|
|
|
|
tags.reset()
|
|
|
|
|
2021-07-07 14:26:44 -04:00
|
|
|
def on_push_pop(self, prev, new):
|
|
|
|
self.pushpop = (prev, new)
|
|
|
|
|
2021-07-07 13:27:52 -04:00
|
|
|
def test_tag_stack_init(self):
|
|
|
|
s = stack.TagStack()
|
2021-07-07 14:26:44 -04:00
|
|
|
self.assertIsInstance(s.PushPop, publisher.Publisher)
|
2021-07-07 13:27:52 -04:00
|
|
|
self.assertEqual(s.tags, [ ])
|
|
|
|
|
2021-07-07 13:39:54 -04:00
|
|
|
def test_tag_stack_next(self):
|
|
|
|
s = stack.TagStack()
|
|
|
|
t = tag.Tag("Test")
|
|
|
|
s.push(t)
|
|
|
|
|
|
|
|
t.tracks = [ FakeTrack(1), FakeTrack(2), FakeTrack(3) ]
|
|
|
|
tags.User["Collection"].tracks = [ FakeTrack(4), FakeTrack(5) ]
|
|
|
|
|
|
|
|
self.assertEqual(s.next().n, 1)
|
|
|
|
self.assertEqual(s.tags, [ t ])
|
|
|
|
self.assertEqual(s.next().n, 2)
|
|
|
|
self.assertEqual(s.tags, [ t ])
|
|
|
|
self.assertEqual(s.next().n, 3)
|
|
|
|
self.assertEqual(s.tags, [ t ])
|
|
|
|
self.assertEqual(s.next().n, 4)
|
|
|
|
self.assertEqual(s.tags, [ ])
|
|
|
|
self.assertEqual(s.next().n, 5)
|
|
|
|
|
|
|
|
self.assertEqual([ t.n for t in tags.User["Previous"].tracks ],
|
|
|
|
[ 5, 4, 3, 2, 1 ])
|
|
|
|
|
2021-07-07 13:27:52 -04:00
|
|
|
def test_tag_stack_pop(self):
|
|
|
|
s = stack.TagStack()
|
|
|
|
t1 = tag.Tag("Test")
|
|
|
|
t2 = tag.Tag("Test Two")
|
|
|
|
s.tags = [ t1, t2 ]
|
2021-07-07 14:26:44 -04:00
|
|
|
s.PushPop.register(self.on_push_pop)
|
2021-07-07 13:27:52 -04:00
|
|
|
|
|
|
|
s.pop()
|
|
|
|
self.assertEqual(s.tags, [ t2 ])
|
2021-07-07 14:26:44 -04:00
|
|
|
self.assertEqual(self.pushpop, (t1, t2))
|
|
|
|
|
2021-07-07 13:27:52 -04:00
|
|
|
s.pop()
|
|
|
|
self.assertEqual(s.tags, [ ])
|
2021-07-07 14:26:44 -04:00
|
|
|
self.assertEqual(self.pushpop, (t2, tags.User["Collection"]))
|
2021-07-07 13:27:52 -04:00
|
|
|
|
2021-07-07 13:39:54 -04:00
|
|
|
def test_tag_stack_previous(self):
|
|
|
|
s = stack.TagStack()
|
|
|
|
for i in [ 1, 2, 3 ]:
|
|
|
|
tags.User["Previous"].add_track(i)
|
|
|
|
|
|
|
|
self.assertEqual(s.previous(), 2)
|
|
|
|
self.assertEqual(s.previous(), 1)
|
|
|
|
self.assertIsNone(s.previous())
|
|
|
|
|
2021-07-07 13:27:52 -04:00
|
|
|
def test_tag_stack_push(self):
|
|
|
|
s = stack.TagStack()
|
|
|
|
t1 = tag.Tag("Test")
|
|
|
|
t2 = tag.Tag("Test Two")
|
|
|
|
t1.current = 3
|
2021-07-07 14:26:44 -04:00
|
|
|
s.PushPop.register(self.on_push_pop)
|
2021-07-07 13:27:52 -04:00
|
|
|
|
|
|
|
s.push(t1)
|
|
|
|
self.assertEqual(s.tags, [ t1 ])
|
|
|
|
self.assertEqual(t1.current, -1)
|
2021-07-07 14:26:44 -04:00
|
|
|
self.assertEqual(self.pushpop, (tags.User["Collection"], t1))
|
|
|
|
|
2021-07-07 13:27:52 -04:00
|
|
|
s.push(t2)
|
|
|
|
self.assertEqual(s.tags, [ t2, t1 ])
|
2021-07-07 14:26:44 -04:00
|
|
|
self.assertEqual(self.pushpop, (t1, t2))
|
|
|
|
|
2021-07-07 13:27:52 -04:00
|
|
|
s.push(t1)
|
|
|
|
self.assertEqual(s.tags, [ t1, t2 ])
|
2021-07-07 14:26:44 -04:00
|
|
|
self.assertEqual(self.pushpop, (t2, t1))
|
|
|
|
|
2021-07-07 13:27:52 -04:00
|
|
|
s.push(tags.User["Previous"])
|
|
|
|
self.assertEqual(s.tags, [ t1, t2 ])
|
|
|
|
s.push(tags.User["Collection"])
|
|
|
|
self.assertEqual(s.tags, [ ])
|
2021-07-07 14:26:44 -04:00
|
|
|
self.assertEqual(self.pushpop, (t1, tags.User["Collection"]))
|
2021-07-07 13:56:11 -04:00
|
|
|
|
|
|
|
def test_tag_stack_queue(self):
|
|
|
|
s = stack.TagStack()
|
|
|
|
s.queue(FakeTrack(1))
|
|
|
|
|
|
|
|
self.assertEqual(s.tags, [ tags.User["Up Next"] ])
|
|
|
|
self.assertEqual(s.next().n, 1)
|
|
|
|
self.assertEqual(tags.User["Up Next"].tracks, [ ])
|