def test_run_output(self): base_ctx = self.cmd.success.context base_ctx.prompt = 'device#' self.context_manager.add(base_ctx) cmd = DeviceCommand(self.configuration.get('commands')[1]) cmd.run(self.terminal, self.context_manager, 'empty') assert_equals([cmd.output, base_ctx.prompt], self.terminal.output)
class TestDeviceCommand(object): def setup(self): self.configuration = DeviceConfiguration.get(sample_configuration, is_file_path=False) self.terminal = MockTerminal() self.context_manager = ContextManager() self.cmd = DeviceCommand(self.configuration.get('commands')[3]) def test_default_initialization(self): cmd = DeviceCommand(self.configuration.get('commands')[2]) assert_equals(cmd.name, 'empty') assert_equals(cmd.contexts, list()) assert_equals(cmd.type, 'cmd') assert_equals(cmd.output, None) assert_equals(cmd._time_delay, 0) assert_equals(cmd._required_input, None) for result_type in ('success', 'fail'): for result_action in ('output', 'context', 'context_method'): assert_equals(getattr(getattr(cmd, result_type), result_action), None) assert_equals(self.cmd.callback, False) def test_full_initialization(self): assert_equals(self.cmd.name, 'full') assert_is_instance(self.cmd.contexts[0], DeviceContext) assert_equals(self.cmd.contexts[0].name, 'fullctx') assert_equals(self.cmd.type, 'prompt') assert_equals(self.cmd.output, "type ok: ") assert_equals(self.cmd._time_delay, 0.5) assert_equals(self.cmd._required_input, 'ok') assert_equals(self.cmd.success.output, 'success') assert_is_instance(self.cmd.success.context, DeviceContext) assert_equals(self.cmd.success.context.name, 'success_ctx') assert_equals(self.cmd.success.context.prompt, 'success_prompt') assert_equals(self.cmd.success.context_method, 'reduce') assert_equals(self.cmd.fail.output, 'fail') assert_is_instance(self.cmd.fail.context, DeviceContext) assert_equals(self.cmd.fail.context.name, 'fail_ctx') assert_equals(self.cmd.fail.context.prompt, 'fail_prompt') assert_equals(self.cmd.fail.context_method, 'add') assert_equals(self.cmd.callback, False) def test_invalid_initialization(self): command = self.configuration.get('commands')[3] command['on_success']['context_method'] = 'invalid' assert_raises(ValueError, DeviceCommand, command) command['on_success']['context'] = None command['on_success']['context_method'] = 'add' assert_raises(ValueError, DeviceCommand, command) command['on_success']['context_method'] = 'reduce' assert_raises(ValueError, DeviceCommand, command) command['on_success']['context'] = 'success_ctx' def test_delay_simulation(self): @timed(.5) def simulated_delay(): self.cmd._delay() def test_output(self): expected_output = 'type ok: ' self.cmd._output(self.terminal) assert_equals(self.terminal.output[-1], expected_output) # self.cmd._output(self.terminal, new_line=True) # assert_equals(self.terminal.output[-2], expected_output) # assert_equals(self.terminal.output[-1], '') def test_run_full(self): base_ctx = self.cmd.success.context self.context_manager.add(base_ctx) self.cmd._time_delay = 0 pass_test = True for action in (self.cmd.success, self.cmd.fail): self.cmd.run(self.terminal, self.context_manager, self.cmd.name) assert_equals(self.terminal.output[-1], self.cmd.output) assert_true(self.cmd.callback) self.context_manager.add(action.context) self.context_manager.add('ctx01') if pass_test: self.cmd.run(self.terminal, self.context_manager, self.cmd._required_input) assert_equals(self.context_manager.current.name, action.context.name) pass_test = not pass_test else: self.cmd.run(self.terminal, self.context_manager, 'no') assert_equals(self.context_manager.current.name, action.context.name) assert_equals(self.context_manager.prompt, action.context.prompt) assert_equals(self.terminal.output[-2], action.output) assert_equals(self.terminal.output[-1], action.context.prompt) def test_run_empty(self): base_ctx = self.cmd.success.context base_ctx.prompt = 'device#' self.context_manager.add(base_ctx) cmd = DeviceCommand(self.configuration.get('commands')[2]) cmd.run(self.terminal, self.context_manager, 'empty') assert_equals([base_ctx.prompt], self.terminal.output) assert_false(cmd.callback) cmd.run(self.terminal, self.context_manager, 'empty') assert_equals([base_ctx.prompt, base_ctx.prompt], self.terminal.output) def test_run_output(self): base_ctx = self.cmd.success.context base_ctx.prompt = 'device#' self.context_manager.add(base_ctx) cmd = DeviceCommand(self.configuration.get('commands')[1]) cmd.run(self.terminal, self.context_manager, 'empty') assert_equals([cmd.output, base_ctx.prompt], self.terminal.output)