Testing Enable ComponentsΒΆ

In order to assist in the testing of enable Component and Interactor objects, Enable provides the EnableTestAssistant class. This is a mixin class intended to work along side unittest.TestCase. Often times in order to effectively test an enable component and its supported interactivity, one needs to simulate user interactions such as moving/clicking/dragging the mouse, using keys, etc. This involves manually creating the corresponding events with appropriate state and dispatching them appropriately. This can be rather tedious and EnableTestAssistant provides a number of helper methods to greatly simplify the process, making tests both faster/cleaner to write and easier to read. Furthermore, in test scenarios it is ofen unnecessary to launch the full application window and as such EnableTestAssistant provides a create_mock_window() method for simply mocking out the window itself. This allows for specifically testing the component of interest alone, as is the goal in a unit test. Please see the api docs (EnableTestAssistant) for the full list of methods available.

Here is an example

import unittest
from unittest import mock

from enable.api import Component
from enable.testing import EnableTestAssistant

class TestExample(unittest.TestCase):
    def test_example(self):
        test_assistant = EnableTestAssistant()
        component = Component(bounds=[100, 200])

        event = test_assistant.mouse_move(component, 10, 20)
        self.assertEqual(event.x, 10)
        self.assertEqual(event.y, 20)
        self.assertFalse(event.alt_down)
        self.assertFalse(event.control_down)
        self.assertFalse(event.shift_down)
        self.assertFalse(sevent.left_down)
        self.assertEqual(event.window.get_pointer_position(), (10, 20))

        component.normal_left_down = mock.Mock()
        test_assistant.mouse_down(component, x=0, y=0)
        component.normal_left_down.assert_called_once()

        event = test_assistant.mouse_move(component, 20, 30, left_down=True)
        self.assertEqual(event.x, 20)
        self.assertEqual(event.y, 30)
        self.assertIs(event.left_down, True)