# Copyright 2023 (c) Anna Schumaker. """Tests our Python ActionEntry class.""" import unittest import emmental.action from gi.repository import GObject from gi.repository import Gio from gi.repository import Gtk class TestActionEntry(unittest.TestCase): """Test case for our Python ActionEntry.""" def test_init(self): """Test constructing an ActionEntry.""" func = unittest.mock.Mock() entry = emmental.action.ActionEntry("test-name", func, "t") self.assertIsInstance(entry, GObject.GObject) self.assertIsInstance(entry.action, Gio.SimpleAction) self.assertEqual(entry.action.get_name(), "test-name") self.assertEqual(entry.name, "test-name") self.assertEqual(entry.func, func) self.assertListEqual(entry.accels, ["t"]) def test_multiple_accels(self): """Test that multiple accelerators can be passed.""" func = unittest.mock.Mock() entry = emmental.action.ActionEntry("test-multi", func, "t", "u") self.assertListEqual(entry.accels, ["t", "u"]) def test_invalid_accel(self): """Test that invalid accelerators are caught during construction.""" func = unittest.mock.Mock() with self.assertRaises(ValueError): emmental.action.ActionEntry("test-name", func, "") def test_activate(self): """Test activating the constructed action.""" func = unittest.mock.Mock() entry = emmental.action.ActionEntry("test-name", func, "t") entry.action.activate() func.assert_called_with() def test_enabled(self): """Test the enabled property.""" func = unittest.mock.Mock() entry = emmental.action.ActionEntry("test-name", func, "t") self.assertTrue(entry.enabled) self.assertTrue(entry.action.get_enabled()) entry.enabled = False self.assertFalse(entry.action.get_enabled()) def test_enabled_bind(self): """Test binding to the enabled property at construction.""" func = unittest.mock.Mock() label = Gtk.Label(sensitive=False) entry = emmental.action.ActionEntry("test-name", func, "t", enabled=(label, "sensitive")) self.assertFalse(entry.enabled) self.assertFalse(entry.action.get_enabled()) label.set_sensitive(True) self.assertTrue(entry.enabled) self.assertTrue(entry.action.get_enabled())