# Copyright 2021 (c) Anna Schumaker. import audio import db import unittest from gi.repository import Gtk from gi.repository import Pango from . import row from . import widgets class TestLabel(unittest.TestCase): def test_init(self): label = row.Label() self.assertIsInstance(label, Gtk.Label) self.assertEqual(label.get_ellipsize(), Pango.EllipsizeMode.MIDDLE) self.assertEqual(label.get_halign(), Gtk.Align.START) self.assertTrue(label.get_hexpand()) def test_bold(self): label = row.Label() self.assertIsNone(label.get_attributes()) label.set_bold(True) self.assertIsNotNone(label.get_attributes()) label.set_bold(False) self.assertIsNone(label.get_attributes()) class TestGrid(unittest.TestCase): def setUp(self): db.reset() def test_init(self): grid = row.Grid() self.assertIsInstance(grid, Gtk.Grid) self.assertIsInstance(grid.icon, Gtk.Image) self.assertIsInstance(grid.name, row.Label) self.assertIsInstance(grid.count, row.Label) self.assertEqual(grid.get_column_spacing(), 5) def test_attach(self): grid = row.Grid() self.assertEqual(grid.get_child_at(0, 0), grid.icon) self.assertEqual(grid.get_child_at(1, 0), grid.name) self.assertEqual(grid.get_child_at(1, 1), grid.count) def test_set_item(self): artist = db.artist.Table.find("Test Artist", "Test Sort") grid = row.Grid() grid.set_item(artist) self.assertEqual(grid.icon.get_icon_name(), artist.icon_name) self.assertEqual(grid.name.get_text(), "Test Artist") self.assertEqual(grid.count.get_text(), "0 Tracks") self.assertIsNone(grid.name.get_attributes()) self.assertIsNone(grid.count.get_attributes()) audio.Player.set_playlist(artist) self.assertIsNotNone(grid.name.get_attributes()) self.assertIsNotNone(grid.count.get_attributes()) grid.unset_item(artist) track = db.make_fake_track(1, 1, "Test Track", "/a/b/c/1.ogg") self.assertEqual(grid.count.get_text(), "0 Tracks") def test_count_label(self): artist = db.artist.Table.find("Test Artist", "Test Sort") grid = row.Grid() grid.set_item(artist) self.assertEqual(grid.count.get_text(), "0 Tracks") track = db.make_fake_track(1, 1, "Test Track", "/a/b/c/1.ogg") self.assertEqual(grid.count.get_text(), "1 Track") grid.count.set_text("abcde") artist.refresh() self.assertEqual(grid.count.get_text(), "1 Track") db.track.Table.delete(track) artist.remove_track(track, False) self.assertEqual(grid.count.get_text(), "0 Tracks") class TestUserGrid(unittest.TestCase): def tearDown(self): db.reset() def test_init(self): grid = row.UserGrid() self.assertIsInstance(grid, row.Grid) self.assertIsInstance(grid.remove, Gtk.Button) self.assertEqual(grid.get_child_at(2, 0), grid.remove) self.assertEqual(grid.remove.get_icon_name(), "list-remove") self.assertEqual(grid.remove.get_halign(), Gtk.Align.CENTER) self.assertEqual(grid.remove.get_valign(), Gtk.Align.CENTER) self.assertTrue(grid.remove.has_css_class("flat")) def test_set_item(self): grid = row.UserGrid() grid.set_item(db.user.Table.find("Collection")) self.assertFalse(grid.remove.get_visible()) grid.set_item(db.user.Table.find("Favorites")) self.assertFalse(grid.remove.get_visible()) grid.set_item(db.user.Table.find("New Tracks")) self.assertFalse(grid.remove.get_visible()) grid.set_item(db.user.Table.find("Previous")) self.assertFalse(grid.remove.get_visible()) grid.set_item(db.user.Table.find("Queued Tracks")) self.assertFalse(grid.remove.get_visible()) grid.set_item(db.user.Table.find("Test Playlist")) self.assertTrue(grid.remove.get_visible()) def test_click(self): grid = row.UserGrid() grid.set_item(db.user.Table.find("Test Playlist")) grid.remove.emit("clicked") self.assertIsNone(db.user.Table.lookup("Test Playlist")) class TestLibraryGrid(unittest.TestCase): def test_init(self): grid = row.LibraryGrid() self.assertIsInstance(grid, row.Grid) self.assertIsInstance(grid.menu, Gtk.MenuButton) self.assertEqual(grid.get_child_at(2, 0), grid.menu) self.assertEqual(grid.menu.get_direction(), Gtk.ArrowType.LEFT) self.assertEqual(grid.menu.get_halign(), Gtk.Align.CENTER) self.assertEqual(grid.menu.get_valign(), Gtk.Align.CENTER) self.assertTrue(grid.menu.has_css_class("flat")) self.assertTrue(grid.menu.get_first_child().has_css_class("flat")) self.assertIsNone(grid.menu.get_popover()) def test_set_item(self): grid = row.LibraryGrid() grid.set_item(db.library.Table.find("/a/b/c")) self.assertIsInstance(grid.menu.get_popover(), widgets.LibraryPopover) grid.unset_item(db.library.Table.find("/a/b/c")) self.assertIsNone(grid.menu.get_popover()) class TestTreeRow(unittest.TestCase): def test_init(self): tree = row.TreeRow(row.Grid()) self.assertIsInstance(tree, Gtk.TreeExpander) self.assertIsInstance(tree.get_child(), row.Grid) def test_factory(self): factory = row.TreeRowFactory() self.assertIsInstance(factory, Gtk.SignalListItemFactory) def test_user_factory(self): factory = row.UserTreeRowFactory() self.assertIsInstance(factory, Gtk.SignalListItemFactory) self.assertIsInstance(row.Factory, row.TreeRowFactory) def test_library_factory(self): factory = row.LibraryTreeRowFactory() self.assertIsInstance(factory, Gtk.SignalListItemFactory) self.assertIsInstance(row.Factory, row.TreeRowFactory) class TestUserRow(unittest.TestCase): def test_init(self): user = row.UserRow() self.assertIsInstance(user, Gtk.Box) self.assertIsInstance(user.icon, Gtk.Image) self.assertIsInstance(user.name, row.Label) self.assertEqual(user.get_spacing(), 5) self.assertEqual(user.get_first_child(), user.icon) self.assertEqual(user.get_last_child(), user.name) def test_set_item(self): user = row.UserRow() user.set_item(db.user.Table.find("Favorites")) self.assertEqual(user.icon.get_icon_name(), "emmental-favorites") self.assertEqual(user.name.get_text(), "Favorites") def test_factory(self): factory = row.UserRowFactory() self.assertIsInstance(factory, Gtk.SignalListItemFactory)