rind: Clean up the gstreamer tests

The common setup and tear down code helps keep everything in sync.
Additionally, we no longer need to wait for duration changes, which have
always been unreliable.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2019-03-21 13:33:31 -04:00
parent a48a2ada76
commit c447c9e2b7
3 changed files with 40 additions and 69 deletions

View File

@ -151,7 +151,7 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_right">10</property>
<property name="label" translatable="yes">0:00</property>
<property name="label" translatable="yes">-00:00</property>
<property name="xalign">0</property>
</object>
<packing>
@ -180,7 +180,7 @@
<object class="GtkLabel" id="position">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">0:00</property>
<property name="label" translatable="yes">00:00</property>
<property name="xalign">1</property>
</object>
<packing>

View File

@ -57,8 +57,6 @@ class EmmentalAudio:
Title.set_markup("<big>Emmental</big>")
Artist.set_markup("<big>The Cheesy Music Player</big>")
curds.Notify.notify("state-changed", new)
elif message.type == Gst.MessageType.STREAM_START:
curds.Notify.notify("duration-changed", self.duration())
elif message.type == Gst.MessageType.TAG:
taglist = message.parse_tag()
for i in range(taglist.n_tags()):

View File

@ -11,15 +11,24 @@ test_album = os.path.abspath("./trier/Test Library/Test Artist 01/Test Album 1")
class TestGst(unittest.TestCase):
def setUp(self):
self.state = None
self.duration = None
curds.PlaylistManager["Collection"].list.clear()
curds.PlaylistManager["Library"].clear()
curds.Notify.notify_me("new-track", curds.PlaylistManager["Collection"].add)
self.audio = gst.EmmentalAudio()
self.state = None
curds.Notify.notify_me("state-changed", self.on_state_changed)
def setUpClass():
if not curds.playlist.library.library_thread.is_alive():
curds.playlist.library.library_thread = curds.ThreadQueue()
curds.Notify.notify_me("state-changed", self.on_state_changed)
curds.Notify.notify_me("duration-changed", self.on_duration_changed)
def tearDown(self):
self.audio.playbin.set_state(Gst.State.READY)
self.audio.seek(value=0)
time.sleep(0.1)
self.main_loop()
GLib.source_remove(self.audio.timeout)
def tearDownClass():
curds.playlist.library.library_thread.stop()
@ -29,10 +38,12 @@ class TestGst(unittest.TestCase):
while events == True:
events = GLib.main_context_default().iteration(may_block=False)
def on_state_changed(self, state):
self.state = state
def test_gst_init(self):
audio = gst.EmmentalAudio()
self.assertIsInstance(audio.playbin, Gst.Element)
self.assertIsInstance(audio.bus, Gst.Bus)
self.assertIsInstance(self.audio.playbin, Gst.Element)
self.assertIsInstance(self.audio.bus, Gst.Bus)
self.assertIsInstance(gst.Adjustment, Gtk.Adjustment)
self.assertIsInstance(gst.Artist, Gtk.Label)
@ -53,81 +64,58 @@ class TestGst(unittest.TestCase):
self.assertEqual(gst.Position.get_text(), "00:00")
self.assertEqual(gst.Duration.get_text(), "-00:00")
audio.load(None)
self.audio.load(None)
self.assertFalse(gst.PauseButton.is_visible())
self.assertTrue( gst.PlayButton.is_visible())
audio.play()
self.audio.play()
self.assertFalse(gst.PauseButton.is_visible())
self.assertTrue( gst.PlayButton.is_visible())
audio.pause()
self.audio.pause()
self.assertFalse(gst.PauseButton.is_visible())
self.assertTrue( gst.PlayButton.is_visible())
audio.seek(value=20)
self.audio.seek(value=20)
self.assertEqual(gst.Adjustment.get_value(), 0.0)
self.assertEqual(gst.Position.get_text(), "00:00")
self.assertEqual(gst.Duration.get_text(), "-00:00")
self.assertEqual(audio.position(), 0)
self.assertEqual(audio.duration(), 0)
self.assertEqual(audio.progress(), 0)
audio.playbin.set_state(Gst.State.READY)
time.sleep(0.1)
self.main_loop()
GLib.source_remove(audio.timeout)
gst.Position.set_text("00:00")
gst.Duration.set_text("-00:00")
def on_state_changed(self, state):
self.state = state
def on_duration_changed(self, duration):
self.duration = duration
self.assertEqual(self.audio.position(), 0)
self.assertEqual(self.audio.duration(), 0)
self.assertEqual(self.audio.progress(), 0)
def test_gst_load(self):
audio = gst.EmmentalAudio()
track = curds.Track.lookup(os.path.join(test_album, "10 - Test Track 10.ogg"))
audio.load(track)
self.audio.load(track)
while self.state != Gst.State.PLAYING:
time.sleep(0.1)
self.main_loop()
self.assertEqual(self.state, Gst.State.PLAYING)
self.assertGreater(self.audio.progress(), 0)
self.assertGreater(self.audio.position(), 0)
self.assertEqual( self.audio.duration(), 10.0)
self.assertEqual(gst.Position.get_text(), "00:00")
self.assertEqual(gst.Duration.get_text(), "-00:10")
self.assertEqual(gst.Title.get_text(), track['title'])
self.assertEqual(gst.Artist.get_text(), "by " + track["artist"])
self.assertGreater(audio.progress(), 0)
self.assertGreater(audio.position(), 0)
self.assertEqual(gst.Position.get_text(), "00:00")
while self.state != Gst.State.PLAYING:
time.sleep(0.1)
self.main_loop()
self.assertEqual(audio.duration(), 10.0)
self.assertEqual(gst.Duration.get_text(), "-00:10")
GLib.source_remove(audio.timeout)
gst.Position.set_text("00:00")
gst.Duration.set_text("-00:00")
def test_gst_controls(self):
audio = gst.EmmentalAudio()
gst.NextButton.clicked()
self.assertIsNone(curds.PlaylistManager.track)
curds.PlaylistManager["Library"].add(test_album)
curds.playlist.library.library_thread.join()
self.state == None
gst.NextButton.clicked()
self.assertIsNotNone(curds.PlaylistManager.track)
while self.state != Gst.State.PLAYING:
time.sleep(0.1)
self.main_loop()
self.assertTrue( gst.PauseButton.is_visible())
self.assertFalse(gst.PlayButton.is_visible())
@ -138,31 +126,16 @@ class TestGst(unittest.TestCase):
self.assertFalse(gst.PauseButton.is_visible())
self.assertTrue( gst.PlayButton.is_visible())
audio.seek(value=50.0)
self.audio.seek(value=50.0)
time.sleep(0.1)
self.main_loop()
self.assertEqual(audio.duration(), 3.0)
self.assertEqual(audio.position(), 1.5)
self.assertEqual(self.audio.duration(), 3.0)
self.assertEqual(self.audio.position(), 1.5)
self.assertEqual(gst.Position.get_text(), "00:01")
self.assertEqual(gst.Duration.get_text(), "-00:02")
audio.seek(value=0.0)
time.sleep(0.1)
self.main_loop()
gst.PlayButton.clicked()
while self.state != Gst.State.PLAYING:
self.main_loop()
self.assertTrue( gst.PauseButton.is_visible())
self.assertFalse(gst.PlayButton.is_visible())
gst.PauseButton.clicked()
while self.state != Gst.State.PAUSED:
self.main_loop()
audio.playbin.set_state(Gst.State.READY)
time.sleep(0.1)
self.main_loop()
GLib.source_remove(audio.timeout)
gst.Position.set_text("00:00")
gst.Duration.set_text("-00:00")