def test_close_screen(self): screen = UIScreen() App.initialize() App.get_scheduler().schedule_screen(screen) # Program will quit in close_screen when stack is empty App.get_scheduler().schedule_screen(UIScreen()) screen.close()
def test_basic_connect(self): connect_screen = UIScreen() App.initialize(scheduler=MagicMock()) connect_screen.connect(TestSignal, self._callback) App.get_event_loop().enqueue_signal(TestSignal(self)) App.get_event_loop().process_signals() self.assertTrue(self.callback_called)
def test_create_signal(self): connect_screen = UIScreen() App.initialize(scheduler=MagicMock()) signal = connect_screen.create_signal(TestSignal, priority=20) self.assertEqual(signal.priority, 20) self.assertTrue(isinstance(signal, TestSignal)) # source is set by create_signal self.assertEqual(signal.source, connect_screen)
def test_replace_screen_with_args(self): self.create_scheduler_with_stack() old_screen = UIScreen() screen = UIScreen() self.scheduler.schedule_screen(old_screen) self.scheduler.replace_screen(screen, "test") test_screen = self.pop_last_item() self.assertEqual(test_screen.ui_screen, screen) self.assertEqual(test_screen.args, "test") # The old_screen was replaced so the stack is empty now self.assertTrue(self.stack.empty())
def test_switch_screen_modal(self, _): self.create_scheduler_with_stack() screen = UIScreen() new_screen = UIScreen() self.scheduler.schedule_screen(screen) self.scheduler.push_screen_modal(new_screen) test_screen = self.pop_last_item() self.assertEqual(test_screen.ui_screen, new_screen) self.assertEqual(test_screen.args, None) self.assertEqual(test_screen.execute_new_loop, True)
def test_replace_screen(self): self.create_scheduler_with_stack() old_screen = UIScreen() screen = UIScreen() self.scheduler.schedule_screen(old_screen) self.scheduler.replace_screen(screen) self.assertEqual(self.pop_last_item(False).ui_screen, screen) new_screen = UIScreen() self.scheduler.replace_screen(new_screen) self.assertEqual(self.pop_last_item().ui_screen, new_screen) # The old_screen was replaced so the stack is empty now self.assertTrue(self.stack.empty())
def test_uiscreen_default_concurrency_check(self, input_handler_class_mock): # Replace default InputHandler instance created by InputManager by our mock to have # it stored after use. input_handler_instance_mock = InputHandlerMock() input_handler_class_mock.return_value = input_handler_instance_mock screen = UIScreen() screen.get_user_input("test") self.assertFalse(screen.input_manager.skip_concurrency_check) # Check that the created InputHandler instance has the flag correctly set. # We don't need to check the concurrency check functionality, it is tested # elsewhere already. self.assertFalse(input_handler_instance_mock.skip_concurrency_check)
def test_switch_screen_with_args(self): self.create_scheduler_with_stack() screen = UIScreen() self.scheduler.push_screen(screen, args="test") self.assertEqual(self.pop_last_item(False).ui_screen, screen) self.assertEqual(self.pop_last_item().args, "test")
def test_schedule_screen(self): self.create_scheduler_with_stack() screen = UIScreen() self.scheduler.schedule_screen(screen) test_screen = self.pop_last_item(False) self.assertEqual(test_screen.ui_screen, screen) self.assertEqual(test_screen.args, None) # empty field - no arguments self.assertFalse(test_screen.execute_new_loop) # Schedule another screen, new one will be added to the bottom of the stack new_screen = UIScreen() self.scheduler.schedule_screen(new_screen) # Here should still be the old screen self.assertEqual(self.pop_last_item().ui_screen, screen) # After removing the first we would find the second screen self.assertEqual(self.pop_last_item().ui_screen, new_screen)
def test_switch_screen(self): self.create_scheduler_with_stack() screen = UIScreen() new_screen = UIScreen() self.scheduler.schedule_screen(screen) self.scheduler.push_screen(new_screen) test_screen = self.pop_last_item() self.assertEqual(test_screen.ui_screen, new_screen) self.assertEqual(test_screen.args, None) self.assertEqual(test_screen.execute_new_loop, False) # We popped the new_screen so the old screen should stay here self.assertEqual(self.pop_last_item().ui_screen, screen) self.assertTrue(self.stack.empty())
def test_nothing_to_render(self): self.create_scheduler_with_stack() self.assertTrue(self.scheduler.nothing_to_render) self.assertTrue(self.stack.empty()) self.scheduler.schedule_screen(UIScreen()) self.assertFalse(self.scheduler.nothing_to_render) self.assertFalse(self.stack.empty())
def test_continue_input(self, mock_stdin, mock_stdout): mock_stdin.return_value = "c" screen = UIScreen() screen2 = EmptyScreenMock() App.get_scheduler().schedule_screen(screen) App.get_scheduler().schedule_screen(screen2) App.run() self.assertTrue(screen.screen_ready) self.assertTrue(screen.screen_ready)
def test_emit(self): connect_screen = UIScreen() App.initialize(scheduler=MagicMock()) connect_screen.connect(SignalMock, self._callback) connect_screen.emit(SignalMock(self)) App.get_event_loop().process_signals() self.assertTrue(self.callback_called)
def test_replace_screen_with_empty_stack(self): self.create_scheduler_with_stack() with self.assertRaises(ScreenStackEmptyException): self.scheduler.replace_screen(UIScreen())
def refresh(self, args=None): """Put everything to display into self.window list.""" UIScreen.refresh(self, args)
def test_switch_screen_modal_empty_stack(self, _): self.create_scheduler_with_stack() screen = UIScreen() self.scheduler.push_screen_modal(screen) self.assertEqual(self.pop_last_item().ui_screen, screen)
def _prepare(self): self.ui_screen = UIScreen()
def __init__(self, data): UIScreen.__init__(self) common.UIObject.__init__(self, data) self.title = u"Default title"
def refresh(self, args=None): """Put everything to display into self.window list.""" UIScreen.refresh(self, args)
def test_close_screen_closed_from_other_source_error(self): App.initialize() App.get_scheduler().schedule_screen(UIScreen()) with self.assertRaises(RenderUnexpectedError): App.get_scheduler().close_screen(closed_from=mock.MagicMock())
def __init__(self, data): UIScreen.__init__(self) common.UIObject.__init__(self, data) self.title = "Default title"
def test_quit_input(self, mock_stdin, mock_stdout): mock_stdin.return_value = "q" screen = UIScreen() App.get_scheduler().schedule_screen(screen) App.run()