emmental/tests/tracklist/test_buttons.py

134 lines
5.1 KiB
Python

# Copyright 2022 (c) Anna Schumaker
"""Tests extra buttons for the TrackList."""
import unittest
import unittest.mock
import emmental.tracklist.buttons
from gi.repository import Gio
from gi.repository import Gtk
class TestVisibleColumns(unittest.TestCase):
"""Test the Visible Columns button."""
def setUp(self):
"""Set up common variables."""
self.columns = Gio.ListStore()
self.button = emmental.tracklist.buttons.VisibleColumns(self.columns)
def test_init(self):
"""Test that the Visible Columns button is set up properly."""
self.assertIsInstance(self.button, emmental.buttons.PopoverButton)
self.assertFalse(self.button.get_has_frame())
self.assertEqual(self.button.get_icon_name(), "columns-symbolic")
self.assertEqual(self.button.columns, self.columns)
def test_popover_child(self):
"""Test that the popover_child was set up properly."""
self.assertIsInstance(self.button.popover_child, Gtk.ColumnView)
self.assertIsInstance(self.button._selection, Gtk.NoSelection)
self.assertTrue(self.button.popover_child.get_show_row_separators())
self.assertTrue(self.button.popover_child.has_css_class("data-table"))
self.assertEqual(self.button.popover_child.get_model(),
self.button._selection)
self.assertEqual(self.button._selection.get_model(),
self.button.columns)
def test_columns(self):
"""Test the popover_child columns."""
columns = self.button.popover_child.get_columns()
self.assertEqual(len(columns), 2)
self.assertIsInstance(columns[0].get_factory(),
emmental.factory.InscriptionFactory)
self.assertEqual(columns[0].get_title(), "Column")
self.assertEqual(columns[0].get_fixed_width(), 125)
self.assertIsInstance(columns[1].get_factory(),
emmental.factory.Factory)
self.assertEqual(columns[1].get_factory().row_type,
emmental.tracklist.buttons.VisibleSwitch)
self.assertEqual(columns[1].get_title(), "Visible")
self.assertEqual(columns[1].get_fixed_width(), -1)
def test_visible_switch(self):
"""Test the visible switch widget."""
item = Gtk.Label()
listitem = Gtk.ListItem()
listitem.get_item = unittest.mock.Mock(return_value=item)
switch = emmental.tracklist.buttons.VisibleSwitch(listitem)
self.assertIsInstance(switch, emmental.factory.ListRow)
self.assertIsInstance(switch.child, Gtk.Switch)
switch.bind()
self.assertEqual(len(switch.bindings), 1)
self.assertTrue(switch.child.get_active())
item.set_visible(False)
self.assertFalse(switch.child.get_active())
switch.child.set_active(True)
item.set_visible(True)
class TestLoopButton(unittest.TestCase):
"""Test the LoopButton."""
def setUp(self):
"""Set up common variables."""
self.loop = emmental.tracklist.buttons.LoopButton()
def test_init(self):
"""Test that the loop button is set up properly."""
self.assertIsInstance(self.loop, emmental.buttons.ImageToggle)
self.assertEqual(self.loop.active_icon_name,
"media-playlist-repeat-song")
self.assertEqual(self.loop.inactive_icon_name, "media-playlist-repeat")
self.assertEqual(self.loop.icon_size, Gtk.IconSize.NORMAL)
self.assertFalse(self.loop.get_has_frame())
def test_state(self):
"""Test changing the state property."""
self.assertTrue(self.loop.can_disable)
self.assertEqual(self.loop.state, "None")
self.assertAlmostEqual(self.loop.icon_opacity, 0.5, delta=0.005)
self.assertFalse(self.loop.active)
self.loop.state = "Playlist"
self.assertEqual(self.loop.state, "Playlist")
self.assertEqual(self.loop.icon_opacity, 1.0)
self.assertFalse(self.loop.active)
self.loop.state = "Track"
self.assertEqual(self.loop.state, "Track")
self.assertEqual(self.loop.icon_opacity, 1.0)
self.assertTrue(self.loop.active)
self.loop.can_disable = False
self.loop.state = "None"
self.assertEqual(self.loop.state, "Track")
self.assertTrue(self.loop.active)
self.loop.can_disable = True
self.loop.state = "None"
self.assertAlmostEqual(self.loop.icon_opacity, 0.5, delta=0.005)
self.assertFalse(self.loop.active)
def test_click(self):
"""Test cycling through states when clicked."""
self.assertEqual(self.loop.state, "None")
self.loop.emit("clicked")
self.assertEqual(self.loop.state, "Playlist")
self.loop.emit("clicked")
self.assertEqual(self.loop.state, "Track")
self.loop.emit("clicked")
self.assertEqual(self.loop.state, "None")
self.loop.state = "Playlist"
self.loop.can_disable = False
self.loop.emit("clicked")
self.assertEqual(self.loop.state, "Track")
self.loop.emit("clicked")
self.assertEqual(self.loop.state, "Playlist")