emmental/audio/test_scale.py
Anna Schumaker 1c53886152 audio: Add a custom SeekScale widget
For handling seeks to the audio player

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2021-09-02 16:15:43 -04:00

107 lines
3.6 KiB
Python

# Copyright 2021 (c) Anna Schumaker.
import unittest
from gi.repository import GObject
from gi.repository import Gtk
from gi.repository import Gst
from . import scale
class FakePlayer(GObject.GObject):
def __init__(self, position, duration):
GObject.GObject.__init__(self)
self.pos = position
self.dur = duration
def position(self): return self.pos
def duration(self): return self.dur
def seek(self, value): self.seek_val = value
class TestScalePlus(unittest.TestCase):
def on_change_value(self, scale, scroll, value):
self.change_value = (scroll, value)
def test_scale_plus_init(self):
splus = scale.ScalePlus(1, 10, 2, 5)
adj = splus.get_adjustment()
self.assertIsInstance(splus, Gtk.Scale)
self.assertTrue(splus.get_draw_value())
self.assertTrue(splus.get_hexpand())
self.assertEqual(splus.get_value_pos(), Gtk.PositionType.TOP)
self.assertEqual(adj.get_value(), 1)
self.assertEqual(adj.get_lower(), 1)
self.assertEqual(adj.get_upper(), 10)
self.assertEqual(adj.get_step_increment(), 2)
self.assertEqual(adj.get_page_increment(), 5)
def test_scale_plus_decrement(self):
splus = scale.ScalePlus(1, 10, 2, 5)
splus.set_value(10)
splus.connect("change-value", self.on_change_value)
for i in [ 8, 6, 4, 2, 1 ]:
self.assertEqual(splus.decrement(), i)
self.assertEqual(splus.format_value(splus, i), str(i))
self.assertEqual(self.change_value,
(Gtk.ScrollType.STEP_BACKWARD, i))
self.change_value = None
self.assertIsNone(splus.decrement())
self.assertIsNone(self.change_value)
def test_scale_plus_increment(self):
splus = scale.ScalePlus(1, 10, 2, 5)
splus.connect("change-value", self.on_change_value)
for i in [ 3, 5, 7, 9, 10 ]:
self.assertEqual(splus.increment(), i)
self.assertEqual(splus.format_value(splus, i), str(i))
self.assertEqual(self.change_value,
(Gtk.ScrollType.STEP_FORWARD, i))
self.change_value = None
self.assertIsNone(splus.increment())
self.assertIsNone(self.change_value)
class TestSeekScale(unittest.TestCase):
def test_seek_scale_init(self):
fake = FakePlayer(0, 5 * Gst.SECOND)
seek = scale.SeekScale(fake)
adj = seek.get_adjustment()
self.assertIsInstance(seek, scale.ScalePlus)
self.assertEqual(seek.get_size_request(), (200, -1))
self.assertEqual(seek.player, fake)
self.assertEqual(adj.get_value(), 0)
self.assertEqual(adj.get_lower(), 0)
self.assertEqual(adj.get_upper(), 0)
self.assertEqual(adj.get_step_increment(), 5 * Gst.SECOND)
self.assertEqual(adj.get_page_increment(), 30 * Gst.SECOND)
def test_seek_scale_update(self):
fake = FakePlayer(3 * Gst.SECOND, 15 * Gst.SECOND)
seek = scale.SeekScale(fake)
adj = seek.get_adjustment()
seek.update()
self.assertEqual(seek.player, fake)
self.assertEqual(adj.get_value(), 3 * Gst.SECOND)
self.assertEqual(adj.get_lower(), 0)
self.assertEqual(adj.get_upper(), 15 * Gst.SECOND)
def test_seek_scale_values(self):
fake = FakePlayer(0, 15 * Gst.SECOND)
seek = scale.SeekScale(fake)
seek.update()
seek.increment()
self.assertEqual(fake.seek_val, 5 * Gst.SECOND)
self.assertEqual(seek.format_value(seek, 5 * Gst.SECOND),
"00:05 / 00:10")
seek.decrement()
self.assertEqual(fake.seek_val, 0)