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:
parent
a48a2ada76
commit
c447c9e2b7
|
@ -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>
|
||||
|
|
|
@ -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()):
|
||||
|
|
103
rind/test_gst.py
103
rind/test_gst.py
|
@ -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")
|
||||
|
|
Loading…
Reference in New Issue