# encoding: utf-8 """This file contains unittests for the kernel.engineservice.py module. Things that should be tested: - Should the EngineService return Deferred objects? - Run the same tests that are run in shell.py. - Make sure that the Interface is really implemented. - The startService and stopService methods. """ __docformat__ = "restructuredtext en" #------------------------------------------------------------------------------- # Copyright (C) 2008 The IPython Development Team # # Distributed under the terms of the BSD License. The full license is in # the file COPYING, distributed as part of this software. #------------------------------------------------------------------------------- #------------------------------------------------------------------------------- # Imports #------------------------------------------------------------------------------- from twisted.internet import defer import zope.interface as zi from IPython.kernel import engineservice as es from IPython.kernel import error from IPython.testutils.util import DeferredTestCase from IPython.kernel.controllerservice import \ IControllerCore class IControllerCoreTestCase(object): """Tests for objects that implement IControllerCore. This test assumes that self.controller is defined and implements IControllerCore. """ def testIControllerCoreInterface(self): """Does self.engine claim to implement IEngineCore?""" self.assert_(IControllerCore.providedBy(self.controller)) def testIControllerCoreInterfaceMethods(self): """Does self.engine have the methods and attributes in IEngireCore.""" for m in list(IControllerCore): self.assert_(hasattr(self.controller, m)) def testRegisterUnregisterEngine(self): engine = es.EngineService() qengine = es.QueuedEngine(engine) regDict = self.controller.register_engine(qengine, 0) self.assert_(isinstance(regDict, dict)) self.assert_(regDict.has_key('id')) self.assert_(regDict['id']==0) self.controller.unregister_engine(0) self.assert_(self.controller.engines.get(0, None) == None) def testRegisterUnregisterMultipleEngines(self): e1 = es.EngineService() qe1 = es.QueuedEngine(e1) e2 = es.EngineService() qe2 = es.QueuedEngine(e2) rd1 = self.controller.register_engine(qe1, 0) self.assertEquals(rd1['id'], 0) rd2 = self.controller.register_engine(qe2, 1) self.assertEquals(rd2['id'], 1) self.controller.unregister_engine(0) rd1 = self.controller.register_engine(qe1, 0) self.assertEquals(rd1['id'], 0) self.controller.unregister_engine(1) rd2 = self.controller.register_engine(qe2, 0) self.assertEquals(rd2['id'], 1) self.controller.unregister_engine(0) self.controller.unregister_engine(1) self.assertEquals(self.controller.engines,{}) def testRegisterCallables(self): e1 = es.EngineService() qe1 = es.QueuedEngine(e1) self.registerCallableCalled = ';lkj' self.unregisterCallableCalled = ';lkj' self.controller.on_register_engine_do(self._registerCallable, False) self.controller.on_unregister_engine_do(self._unregisterCallable, False) self.controller.register_engine(qe1, 0) self.assertEquals(self.registerCallableCalled, 'asdf') self.controller.unregister_engine(0) self.assertEquals(self.unregisterCallableCalled, 'asdf') self.controller.on_register_engine_do_not(self._registerCallable) self.controller.on_unregister_engine_do_not(self._unregisterCallable) def _registerCallable(self): self.registerCallableCalled = 'asdf' def _unregisterCallable(self): self.unregisterCallableCalled = 'asdf' def testBadUnregister(self): self.assertRaises(AssertionError, self.controller.unregister_engine, 'foo')