emmental/playlist/test_sort.py

204 lines
7.7 KiB
Python

# Copyright 2021 (c) Anna Schumaker.
import unittest
from gi.repository import Gtk
from . import model
from . import sort
class TestUpDownBox(unittest.TestCase):
def move_up(self, button): self.up = True
def move_down(self, button): self.down = True
def test_init(self):
updown = sort.UpDownBox()
self.assertIsInstance(updown, Gtk.Box)
self.assertTrue(updown.has_css_class("linked"))
child = updown.get_first_child()
self.assertIsInstance(child, Gtk.Button)
self.assertEqual(child.get_icon_name(), "go-up-symbolic")
self.assertFalse(child.get_sensitive())
child = child.get_next_sibling()
self.assertIsInstance(child, Gtk.Button)
self.assertEqual(child.get_icon_name(), "go-down-symbolic")
self.assertFalse(child.get_sensitive())
def test_sensitive(self):
updown = sort.UpDownBox()
updown.set_active(True, first=False, last=False)
self.assertTrue(updown.get_first_child().get_sensitive())
self.assertTrue(updown.get_last_child().get_sensitive())
updown.set_active(True, first=True, last=False)
self.assertFalse(updown.get_first_child().get_sensitive())
self.assertTrue(updown.get_last_child().get_sensitive())
updown.set_active(True, first=False, last=True)
self.assertTrue(updown.get_first_child().get_sensitive())
self.assertFalse(updown.get_last_child().get_sensitive())
updown.set_active(False, first=True, last=True)
self.assertFalse(updown.get_first_child().get_sensitive())
self.assertFalse(updown.get_last_child().get_sensitive())
def test_clicks(self):
updown = sort.UpDownBox()
updown.connect("move-up", self.move_up)
updown.connect("move-down", self.move_down)
updown.get_first_child().emit("clicked")
self.assertTrue(self.up)
updown.get_last_child().emit("clicked")
self.assertTrue(self.down)
class TestDirectionButton(unittest.TestCase):
def test_init(self):
button = sort.DirectionButton()
self.assertIsInstance(button, Gtk.Button)
self.assertEqual(button.get_icon_name(), "view-sort-ascending")
self.assertFalse(button.get_sensitive())
def test_set_direction(self):
button = sort.DirectionButton()
button.set_direction("DESC", active=True)
self.assertEqual(button.get_icon_name(), "view-sort-descending")
self.assertTrue(button.get_sensitive())
button.set_direction("ASC", active=False)
self.assertEqual(button.get_icon_name(), "view-sort-ascending")
self.assertFalse(button.get_sensitive())
class TestFieldLabel(unittest.TestCase):
def test_init(self):
label = sort.FieldLabel()
self.assertIsInstance(label, Gtk.Label)
self.assertFalse(label.get_sensitive())
self.assertTrue(label.get_hexpand())
def test_set_field(self):
label = sort.FieldLabel()
label.set_field("tracks.number", active=True)
self.assertEqual(label.get_text(), "Track Number")
self.assertEqual(label.get_field(), "tracks.number")
self.assertTrue(label.get_sensitive())
label.set_field("tracks.title", active=False),
self.assertEqual(label.get_text(), "Track Title")
self.assertEqual(label.get_field(), "tracks.title")
self.assertFalse(label.get_sensitive())
label.set_field("tracks.length", active=True),
self.assertEqual(label.get_text(), "Track Length")
self.assertEqual(label.get_field(), "tracks.length")
self.assertTrue(label.get_sensitive())
label.set_field("artists.sort", active=False),
self.assertEqual(label.get_text(), "Artist Name")
self.assertEqual(label.get_field(), "artists.sort")
self.assertFalse(label.get_sensitive())
label.set_field("albums.sort", active=True),
self.assertEqual(label.get_text(), "Album Name")
self.assertEqual(label.get_field(), "albums.sort")
self.assertTrue(label.get_sensitive())
label.set_field("discs.subtitle", active=False),
self.assertEqual(label.get_text(), "Disc Subtitle")
self.assertEqual(label.get_field(), "discs.subtitle")
self.assertFalse(label.get_sensitive())
label.set_field("albums.release", active=True),
self.assertEqual(label.get_text(), "Release Date")
self.assertEqual(label.get_field(), "albums.release")
self.assertTrue(label.get_sensitive())
label.set_field("tracks.playcount", active=False),
self.assertEqual(label.get_text(), "Play Count")
self.assertEqual(label.get_field(), "tracks.playcount")
self.assertFalse(label.get_sensitive())
label.set_field("tracks.lastplayed", active=True)
self.assertEqual(label.get_text(), "Last Played")
self.assertEqual(label.get_field(), "tracks.lastplayed")
self.assertTrue(label.get_sensitive())
label.set_field("playlist_map.rowid", active=False)
self.assertEqual(label.get_text(), "Order Added")
self.assertEqual(label.get_field(), "playlist_map.rowid")
self.assertFalse(label.get_sensitive())
class TestSortRow(unittest.TestCase):
def on_switched(self, row, enabled):
self.enabled = enabled
def on_reversed(self, row):
self.reversed = True
def on_move_up(self, row):
self.move_up = True
def on_move_down(self, row):
self.move_down = True
def test_init(self):
row = sort.SortRow()
self.assertIsInstance(row, Gtk.Box)
self.assertIsInstance(row.switch, Gtk.Switch)
self.assertIsInstance(row.label, sort.FieldLabel)
self.assertIsInstance(row.direction, sort.DirectionButton)
self.assertIsInstance(row.updown, sort.UpDownBox)
self.assertEqual(row.get_spacing(), 5)
self.assertEqual(row.switch.get_valign(), Gtk.Align.CENTER)
self.assertEqual(row.get_first_child(), row.switch)
self.assertEqual(row.switch.get_next_sibling(), row.label)
self.assertEqual(row.label.get_next_sibling(), row.direction)
self.assertEqual(row.direction.get_next_sibling(), row.updown)
def test_set_item(self):
row = sort.SortRow()
row.set_item("tracks.number ASC", 0, 3)
self.assertTrue(row.switch.get_active())
self.assertTrue(row.switch.get_sensitive())
self.assertEqual(row.label.get_field(), "tracks.number")
self.assertTrue(row.label.get_sensitive())
self.assertEqual(row.direction.get_icon_name(), "view-sort-ascending")
self.assertTrue(row.direction.get_sensitive())
self.assertFalse(row.updown.get_first_child().get_sensitive())
self.assertTrue(row.updown.get_last_child().get_sensitive())
row.set_item("playlist_map.rowid ASC", 1, 2)
self.assertTrue(row.switch.get_active())
self.assertFalse(row.switch.get_sensitive())
def test_signals(self):
row = sort.SortRow()
row.connect("switched", self.on_switched)
row.connect("reversed", self.on_reversed)
row.connect("move-up", self.on_move_up)
row.connect("move-down", self.on_move_down)
row.switch.set_active(True)
self.assertTrue(self.enabled)
row.switch.set_active(False)
self.assertFalse(self.enabled)
row.direction.emit("clicked")
self.assertTrue(self.reversed)
row.updown.emit("move-up")
self.assertTrue(self.move_up)
row.updown.emit("move-down")
self.assertTrue(self.move_down)
class TestFactory(unittest.TestCase):
def test_init(self):
factory = sort.Factory(model.FlatSortModel())
self.assertIsInstance(factory, Gtk.SignalListItemFactory)