def test_init(self): logging.info("***** init") sequence = Sequence( machines=[self.stopped_1, self.stopped_2, self.stopped_3]) self.assertEqual(len(sequence.machines), 3)
def test_is_running(self): logging.info("***** is_running") sequence = Sequence( machines=[self.stopped_1, self.stopped_2, self.stopped_3]) self.assertFalse(sequence.is_running)
def test_stop(self): logging.info("***** stop") sequence = Sequence( machines=[self.stopped_1, self.running_1, self.stopped_2]) process = sequence.start() while sequence.machines[0].mutables.get('started') != True: time.sleep(0.001) while sequence.machines[0].mutables.get('ran') != True: time.sleep(0.001) while sequence.machines[1].mutables.get('started') != True: time.sleep(0.001) while sequence.machines[1].mutables.get('ran') != True: time.sleep(0.001) self.assertFalse(sequence.machines[1].mutables.get('stopped')) self.assertFalse(sequence.machines[2].mutables.get('started')) self.assertFalse(sequence.machines[2].mutables.get('ran')) sequence.stop() process.join() self.assertTrue(sequence.machines[0].mutables.get('started')) self.assertTrue(sequence.machines[0].mutables.get('ran')) self.assertTrue(sequence.machines[1].mutables.get('started')) self.assertTrue(sequence.machines[1].mutables.get('ran')) self.assertTrue(sequence.machines[1].mutables.get('stopped')) self.assertFalse(sequence.machines[2].mutables.get('started')) self.assertFalse(sequence.machines[2].mutables.get('ran'))
def test_reset(self): logging.info("***** reset") sequence = Sequence( machines=[self.stopped_1, self.stopped_2, self.stopped_3]) self.assertTrue(sequence.reset()) self.assertTrue(sequence.machines[0].mutables.get('reset')) self.assertTrue(sequence.machines[1].mutables.get('reset')) self.assertTrue(sequence.machines[2].mutables.get('reset'))
def test_run(self): logging.info("***** run") sequence = Sequence( machines=[self.stopped_1, self.stopped_2, self.stopped_3]) sequence.run() self.assertTrue(sequence.machines[0].mutables.get('started')) self.assertTrue(sequence.machines[0].mutables.get('ran')) self.assertTrue(sequence.machines[1].mutables.get('started')) self.assertTrue(sequence.machines[1].mutables.get('ran')) self.assertTrue(sequence.machines[2].mutables.get('started')) self.assertTrue(sequence.machines[2].mutables.get('ran'))
def test_start(self): logging.info("***** start") sequence = Sequence( machines=[self.stopped_1, self.stopped_2, self.stopped_3]) process = sequence.start() process.join() self.assertTrue(sequence.machines[0].mutables.get('started')) self.assertTrue(sequence.machines[0].mutables.get('ran')) self.assertTrue(sequence.machines[1].mutables.get('started')) self.assertTrue(sequence.machines[1].mutables.get('ran')) self.assertTrue(sequence.machines[2].mutables.get('started')) self.assertTrue(sequence.machines[2].mutables.get('ran'))
def test_getter(self): logging.info("***** get and set") sequence = Sequence( machines=[self.stopped_1, self.stopped_2, self.stopped_3]) # undefined key self.assertEqual(sequence.get('hello'), None) # undefined key with default value whatever = 'whatever' self.assertEqual(sequence.get('hello', whatever), whatever) # set the key sequence.set('hello', 'world') self.assertEqual(sequence.get('hello'), 'world') # default value is meaningless when key has been set self.assertEqual(sequence.get('hello', 'whatever'), 'world') # except when set to None sequence.set('special', None) self.assertEqual(sequence.get('special', []), [])
if __name__ == '__main__': Context.set_logger() engine = Engine(type='local', command='shellbot.commands.input') engine.configure() # ensure that all components are ready bot = engine.get_bot() # get generic group channel for this bot order_id = Input( # use a mask to validate input bot=bot, question="PO number please?", mask="9999A", on_answer="Ok, PO number has been noted: {}", on_retry="PO number should have 4 digits and a letter", on_cancel="Ok, forget about the PO number", key='order.id') description = Input( # free form bot=bot, question="Issue description please?", on_answer="Ok, description noted: {}", on_retry="Please enter a one-line description of the issue", on_cancel="Ok, forget about the description", key='description') sequence = Sequence(machines=[order_id, description]) sequence.start() engine.run() # until Ctl-C