204 lines
7.7 KiB
Python
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)
|