1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
|
""" Tests for class load hooks. """
# Standard library imports.
import sys, unittest
# Enthought library imports.
from enthought.envisage.api import ClassLoadHook
from enthought.traits.api import HasTraits
# This module's package.
PKG = 'enthought.envisage.tests'
class ClassLoadHookTestCase(unittest.TestCase):
""" Tests for class load hooks. """
###########################################################################
# 'TestCase' interface.
###########################################################################
def setUp(self):
""" Prepares the test fixture before each test method is called. """
return
def tearDown(self):
""" Called immediately after each test method has been called. """
return
###########################################################################
# Tests.
###########################################################################
def test_connect(self):
""" connect """
def on_class_loaded(cls):
""" Called when a class is loaded. """
on_class_loaded.cls = cls
return
# To register with 'MetaHasTraits' we use 'module_name.class_name'.
hook = ClassLoadHook(
class_name = ClassLoadHookTestCase.__module__ + '.Foo',
on_load = on_class_loaded
)
hook.connect()
class Foo(HasTraits):
pass
self.assertEqual(Foo, on_class_loaded.cls)
return
def test_class_already_loaded(self):
""" class already loaded """
def on_class_loaded(cls):
""" Called when a class is loaded. """
on_class_loaded.cls = cls
return
# To register with 'MetaHasTraits' we use 'module_name.class_name'.
hook = ClassLoadHook(
class_name = self._get_full_class_name(ClassLoadHookTestCase),
on_load = on_class_loaded
)
hook.connect()
# Make sure the 'on_load' got called immediately because the class is
# already loaded.
self.assertEqual(ClassLoadHookTestCase, on_class_loaded.cls)
return
def test_disconnect(self):
""" disconnect """
def on_class_loaded(cls):
""" Called when a class is loaded. """
on_class_loaded.cls = cls
return
# To register with 'MetaHasTraits' we use 'module_name.class_name'.
hook = ClassLoadHook(
class_name = ClassLoadHookTestCase.__module__ + '.Foo',
on_load = on_class_loaded
)
hook.connect()
class Foo(HasTraits):
pass
self.assertEqual(Foo, on_class_loaded.cls)
# 'Reset' the listener,
on_class_loaded.cls = None
# Now disconnect.
hook.disconnect()
class Foo(HasTraits):
pass
self.assertEqual(None, on_class_loaded.cls)
return
###########################################################################
# Private interface.
###########################################################################
def _get_full_class_name(self, cls):
""" Return the full (possibly) dotted name of a class. """
return cls.__module__ + '.' + cls.__name__
# Entry point for stand-alone testing.
if __name__ == '__main__':
unittest.main()
#### EOF ######################################################################
|