def testUpDownStopArray(self, mock_logging): udsr1 = MagicMock() udsr1.deviceID = "udsr1" udsr2 = MagicMock() udsr2.deviceID = "udsr2" c = Controller() c.addDevice(udsr1) c.addDevice(udsr2) udsa = UpDownStopArray("Test", c, {1: 'udsr1'}) udsa.add(udsr2, 2) self.assertEqual(2, len(udsa.relays.items())) udsa.raiseUp(1) udsr1.raiseUp.assert_called_once_with() self.assertEqual(0, udsr2.raiseUp.call_count) udsa.lower(0) udsr1.lower.assert_called_once_with() udsr2.lower.assert_called_once_with() udsa.stop(2) udsr2.stop.assert_called_once_with() udsa.raiseUp(3) mock_logging.error.assert_called_once_with("Tried to raise relay channel 3 but no such device attached to Test") mock_logging.reset_mock() udsa.lower(-123) mock_logging.error.assert_called_once_with("Tried to lower relay channel -123 but no such device attached to Test") mock_logging.reset_mock() udsa.stop(42) mock_logging.error.assert_called_once_with("Tried to stop relay channel 42 but no such device attached to Test")
def testSimpleEvent(self): m = MagicMock() m.deviceID = "Mock" e1 = Event(m.frobnicate, "badger") self.performSequenceTest(e1) m.frobnicate.assert_called_once_with("badger")
def testDeviceEvent(self): m = MagicMock() m.deviceID = "Mock" self.controller.addDevice(m) e = DeviceEvent("Mock", "frobnicate", "badger") self.performSequenceTest(e) m.frobnicate.assert_called_once_with("badger")
def testInitAndDeinitDevices(self, atexit): c = Controller() d = MagicMock() d.deviceID = "Test" c.addDevice(d) c.initialise() d.initialise.assert_called_once_with() atexit.register.assert_called_once_with(c.deinitialise) c.deinitialise() d.deinitialise.assert_called_once_with()
def testUpDownStopRelay(self): card = MagicMock() directionRelay = MagicMock() startStopRelay = MagicMock() card.createDevice.side_effect = [directionRelay, startStopRelay] card.deviceID = "Test" c = Controller() c.addDevice(card) udsr = UpDownStopRelay("TestUDSR", c, ("Test", 1), ("Test", 2)) card.createDevice.assert_has_calls([ call("TestUDSR_direction", 1), call("TestUDSR_startStop", 2) ]) udsr.raiseUp() directionRelay.on.assert_called_once_with() startStopRelay.on.assert_called_once_with() startStopRelay.reset_mock() directionRelay.reset_mock() udsr.stop() startStopRelay.off.assert_called_once_with() self.assertEqual(0, directionRelay.call_count) startStopRelay.reset_mock() directionRelay.reset_mock() udsr.lower() directionRelay.off.assert_called_once_with() startStopRelay.on.assert_called_once_with()
def testMomentaryUpDownStopRelay(self): card = MagicMock() upRelay = MagicMock() downRelay = MagicMock() stopRelay = MagicMock() card.createDevice.side_effect = [upRelay, downRelay, stopRelay] card.deviceID = "Test" c = Controller() c.addDevice(card) mudsr = MomentaryUpDownStopRelay("TestUDSR", c, ("Test", 1), ("Test", 2), ("Test", 3)) card.createDevice.assert_has_calls([ call("TestUDSR_up", 1), call("TestUDSR_down", 2), call("TestUDSR_stop", 3) ]) mudsr.raiseUp() sleep(0.1) with mudsr.lock: # wait for sequence to complete upRelay.on.assert_called_once() upRelay.off.assert_called_once() downRelay.on.assert_not_called() downRelay.off.assert_not_called() stopRelay.on.assert_not_called() stopRelay.off.assert_not_called() upRelay.reset_mock() mudsr.lower() sleep(0.1) with mudsr.lock: upRelay.on.assert_not_called() upRelay.off.assert_not_called() downRelay.on.assert_called_once() downRelay.off.assert_called_once() stopRelay.on.assert_not_called() stopRelay.off.assert_not_called() downRelay.reset_mock() mudsr.stop() sleep(0.1) with mudsr.lock: upRelay.on.assert_not_called() upRelay.off.assert_not_called() downRelay.on.assert_not_called() downRelay.off.assert_not_called() stopRelay.on.assert_called_once() stopRelay.off.assert_called_once() stopRelay.reset_mock() synctest = MagicMock() relay = MagicMock() synctest.createDevice.side_effect = [relay, relay, relay] synctest.deviceID = "synctest" c2 = Controller() c2.addDevice(synctest) mudsr2 = MomentaryUpDownStopRelay("testsync", c2, ("synctest", 1), ("synctest", 2), ("synctest", 3)) mudsr2.raiseUp() mudsr2.lower() sleep(1) with mudsr2.lock: relay.assert_has_calls([ call.on(), call.off(), # Specifically: this off() is called before the second on() call.on(), call.off() ])