diff --git a/traits/testing/optional_dependencies.py b/traits/testing/optional_dependencies.py index e88eadc0f..d2d55743d 100644 --- a/traits/testing/optional_dependencies.py +++ b/traits/testing/optional_dependencies.py @@ -42,6 +42,9 @@ def optional_import(name): numpy = optional_import("numpy") requires_numpy = unittest.skipIf(numpy is None, "NumPy not available") +pyface = optional_import("pyface") +requires_pyface = unittest.skipIf(pyface is None, "Pyface not available") + sphinx = optional_import("sphinx") requires_sphinx = unittest.skipIf(sphinx is None, "Sphinx not available") diff --git a/traits/tests/test_enum.py b/traits/tests/test_enum.py index c87de3729..2b14b1a27 100644 --- a/traits/tests/test_enum.py +++ b/traits/tests/test_enum.py @@ -13,6 +13,14 @@ from traits.api import ( Any, BaseEnum, Enum, HasTraits, List, Property, TraitError) +from traits.testing.optional_dependencies import pyface, requires_traitsui + +if pyface is not None: + GuiTestAssistant = pyface.toolkit.toolkit_object( + "util.gui_test_assistant:GuiTestAssistant") +else: + class GuiTestAssistant: + pass class FooEnum(enum.Enum): @@ -110,6 +118,13 @@ class EnumCollectionExample(HasTraits): slow_enum = BaseEnum("yes", "no", "maybe") +class EnumCollectionGUIExample(EnumCollectionExample): + # Override attributes that may fail GUI test + # until traitsui #781 is fixed. + int_set_enum = Enum("int", "set") + correct_int_set_enum = Enum("int", "set") + + class EnumTestCase(unittest.TestCase): def test_valid_enum(self): example_model = ExampleModel(root="model1") @@ -296,3 +311,18 @@ def test_base_enum(self): with self.assertRaises(TraitError): obj.slow_enum = "perhaps" self.assertEqual(obj.slow_enum, "no") + + +@requires_traitsui +class TestGui(GuiTestAssistant, unittest.TestCase): + + def test_create_editor(self): + obj = EnumCollectionGUIExample() + + # Create a UI window + ui = obj.edit_traits() + try: + self.gui.process_events() + finally: + with self.delete_widget(ui.control): + ui.dispose()