# Copyright 2022 (c) Anna Schumaker. """Tests our modified Gtk.Label.""" import unittest import emmental.nowplaying.label from gi.repository import GLib from gi.repository import Gtk from gi.repository import Pango class TestLabel(unittest.TestCase): """Test case for our custom Label.""" def setUp(self, prefix=""): """Set up common variables.""" self.label = emmental.nowplaying.label.Label(prefix=prefix) def test_init(self): """Test that the label is configured correctly.""" self.assertIsInstance(self.label, Gtk.Label) self.assertIsNone(self.label.get_attributes()) self.assertEqual(self.label.get_xalign(), 0) label = emmental.nowplaying.label.Label(visible=False) self.assertFalse(label.get_visible()) def test_set_text(self): """Test setting label text.""" self.assertEqual(self.label.text, "") self.assertEqual(self.label.get_text(), "") for text in ["Test Text", ""]: with self.subTest(text=text): self.label.text = text self.assertEqual(self.label.text, text) self.assertEqual(self.label.get_text(), text) def test_prefix(self): """Test the prefix property.""" self.setUp(prefix="Prefix ") self.assertEqual(self.label.prefix, "Prefix ") self.assertEqual(self.label.text, "") self.assertEqual(self.label.get_text(), "") for text in ["Test Text", ""]: with self.subTest(text=text): self.label.text = text self.assertEqual(self.label.text, text) self.assertEqual(self.label.get_text(), "Prefix Test Text" if len(text) else "") def test_size(self): """Test the size property.""" self.assertEqual(self.label.size, 0) expected = f"0 {GLib.MAXUINT} absolute-size" for size in [42, 20]: with self.subTest(size=size): self.label.size = size self.assertEqual(self.label.get_attributes().to_string(), f"{expected} {size * Pango.SCALE}") class TestPreferArtistMenu(unittest.TestCase): """Test case for our prefer-artist menu.""" def setUp(self): """Set up common variables.""" self.menu = emmental.nowplaying.label.PreferArtistMenu() def test_init(self): """Test that the menu is configured correctly.""" self.assertIsInstance(self.menu, Gtk.Box) self.assertIsInstance(self.menu._artist, Gtk.CheckButton) self.assertIsInstance(self.menu._albumartist, Gtk.CheckButton) self.assertEqual(self.menu.get_orientation(), Gtk.Orientation.VERTICAL) self.assertEqual(self.menu._artist.get_label(), "Prefer the artist tag.") self.assertEqual(self.menu._albumartist.get_label(), "Prefer the album artist tag.") self.assertEqual(self.menu.get_first_child(), self.menu._artist) self.assertEqual(self.menu._artist.get_next_sibling(), self.menu._albumartist) self.assertIsNone(self.menu._albumartist.get_next_sibling()) def test_prefer_artist(self): """Test the prefer-artist property.""" self.assertTrue(self.menu.prefer_artist) self.assertTrue(self.menu._artist.get_active()) self.assertFalse(self.menu._albumartist.get_active()) self.menu.prefer_artist = False self.assertFalse(self.menu._artist.get_active()) self.assertTrue(self.menu._albumartist.get_active()) self.menu._artist.set_active(True) self.assertTrue(self.menu.prefer_artist) self.assertFalse(self.menu._albumartist.get_active()) self.menu._albumartist.set_active(True) self.assertFalse(self.menu.prefer_artist) self.assertTrue(self.menu._albumartist.get_active()) class TestArtistLabel(unittest.TestCase): """Test case for our Artist label.""" def setUp(self): """Set up common variables.""" self.label = emmental.nowplaying.label.ArtistLabel(prefix="by ") def test_init(self): """Test that the artist label is set up properly.""" self.assertIsInstance(self.label, emmental.nowplaying.label.Label) self.assertIsInstance(self.label._menu, emmental.nowplaying.label.PreferArtistMenu) self.assertIsInstance(self.label._clicked, Gtk.GestureClick) self.assertEqual(self.label.prefix, "by ") self.assertEqual(self.label.artist, "") self.assertEqual(self.label.album_artist, "") self.assertTrue(self.label.prefer_artist) def test_popover_menu(self): """Test that the popover menu is wired up properly.""" self.assertIsInstance(self.label._popover, Gtk.Popover) self.assertEqual(self.label._popover.get_parent(), self.label) self.assertEqual(self.label._popover.get_child(), self.label._menu) self.label.prefer_artist = False self.assertFalse(self.label._menu.prefer_artist) self.label._menu.prefer_artist = True self.assertTrue(self.label.prefer_artist) def test_popover_pointing_to(self): """Test that the popover is pointing to the right spot.""" (res, rect) = self.label._popover.get_pointing_to() self.assertTrue(res) self.assertEqual((rect.x, rect.y), (8, 8)) self.assertEqual((rect.width, rect.height), (1, 1)) self.label.size = 48 (res, rect) = self.label._popover.get_pointing_to() self.assertTrue(res) self.assertEqual((rect.x, rect.y), (48, 48)) self.assertEqual((rect.width, rect.height), (1, 1)) def test_prefer_artist(self): """Test situations where we want to use the artist property.""" self.label.prefer_artist = True self.label.artist = "Test Artist" self.assertEqual(self.label.get_text(), "by Test Artist") self.label.album_artist = "Test Album Artist" self.assertEqual(self.label.get_text(), "by Test Artist") self.label.prefer_artist = False self.assertEqual(self.label.get_text(), "by Test Album Artist") self.label.prefer_artist = True self.assertEqual(self.label.get_text(), "by Test Artist") self.label.artist = "" self.assertEqual(self.label.get_text(), "by Test Album Artist") def test_prefer_album_artist(self): """Test situations where we want to use the album artist property.""" self.label.prefer_artist = False self.label.album_artist = "Test Album Artist" self.assertEqual(self.label.get_text(), "by Test Album Artist") self.label.artist = "Test Artist" self.assertEqual(self.label.get_text(), "by Test Album Artist") self.label.prefer_artist = True self.assertEqual(self.label.get_text(), "by Test Artist") self.label.prefer_artist = False self.assertEqual(self.label.get_text(), "by Test Album Artist") self.label.album_artist = "" self.assertEqual(self.label.get_text(), "by Test Artist")