summaryrefslogtreecommitdiffstats
path: root/share/extensions/tests/test_inkex_gui_window.py
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--share/extensions/tests/test_inkex_gui_window.py102
1 files changed, 102 insertions, 0 deletions
diff --git a/share/extensions/tests/test_inkex_gui_window.py b/share/extensions/tests/test_inkex_gui_window.py
new file mode 100644
index 0000000..81da56f
--- /dev/null
+++ b/share/extensions/tests/test_inkex_gui_window.py
@@ -0,0 +1,102 @@
+# coding=utf-8
+#
+# Copyright 2022 Martin Owens <doctormo@geek-2.com>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>
+#
+"""
+Test the various features of a Gtk/Inkex Window.
+"""
+
+import os
+import sys
+import time
+import pytest
+
+from inkex.tester import TestCase
+from inkex.utils import DependencyError
+
+try:
+ from inkex.gui.tester import MainLoopProtection
+ from inkex.gui import GtkApp, Window, ChildWindow, asyncme
+except DependencyError:
+ Window = object
+ ChildWindow = object
+ GtkApp = None
+
+
+class BadNamedWindow(Window):
+ name = "bad-name"
+
+
+class BasicWindow(Window):
+ name = "basic-window"
+
+
+class ChildWindow(ChildWindow):
+ name = "child-window"
+
+
+@pytest.mark.skipif(GtkApp is None, reason="PyGObject is required")
+class GtkWindowTest(TestCase):
+ """Tests for GUI Window"""
+
+ def construct_app(self, windows=()):
+ """Create a gtk app based on some inputs"""
+ return type(
+ "_GtkApp",
+ (GtkApp,),
+ {
+ "app_name": "window-test",
+ "windows": list(windows),
+ "ui_dir": self.datadir(),
+ "prefix": "ui",
+ "ui_file": "window-test",
+ },
+ )
+
+ def test_window(self):
+ """Various consruction errors"""
+ app = self.construct_app([BadNamedWindow])
+
+ def test_load_window_extract(self):
+ """Test extracting widgets"""
+ app = self.construct_app([BasicWindow])()
+ widget = app.load_window_extract("basic-window")
+ self.assertEqual(Window.get_widget_name(widget), "box1")
+ # original window widget is untouched
+ self.assertTrue(list(app.window.window.get_children()))
+ # Destroy origial widgets
+ app.window.exit(widget)
+
+ def test_child_window(self):
+ """Test the loading of child windows"""
+ app = self.construct_app([BasicWindow, ChildWindow])()
+ window = app.window
+ child = window.load_window("child-window")
+ self.assertEqual(Window.get_widget_name(child.widget("box2")), "box2")
+ self.assertEqual(child.name, "child-window")
+ child.exit(child)
+
+ def test_if_widget(self):
+ """Test getting a widget with a fake fallback"""
+ app = self.construct_app([BasicWindow])()
+ faker = app.window.if_widget("fake")
+ self.assertFalse(faker)
+ self.assertFalse(faker.get_name())
+
+ def test_replace_widget(self):
+ """Replace a widget in a window"""
+ app = self.construct_app([BasicWindow])()
+ app.window.replace("button1", "button2")