def test_0_loops(self): stdout = io.StringIO() txt_frames = self.txt_frames num_loops = 0 error_after_num_loops = 5 error_after_num_sleep_calls = error_after_num_loops * len(txt_frames) with patch('time.sleep') as mock_sleep: num_sleep_calls = 0 def sleep_side_effect(s): nonlocal num_sleep_calls num_sleep_calls += 1 if num_sleep_calls >= error_after_num_sleep_calls: raise KeyboardInterrupt() return mock_sleep.side_effect = sleep_side_effect display_txt_frames(txt_frames, stdout, num_loops, self.seconds_per_frame) self.assertEqual(mock_sleep.call_count, error_after_num_loops * len(txt_frames)) for call in mock_sleep.call_args_list: self.assertEqual(call[0][0], self.seconds_per_frame) output_ending = '\n' + ANSI_RESET + '\n' output = stdout.getvalue() self.assertEqual(output[-len(output_ending):], output_ending) output = output[:-len(output_ending)] output = output.split('\n' + (ANSI_CURSOR_UP * self.height)) self.assertEqual(output, self.txt_frames * error_after_num_loops)
def test_3_loops(self): stdout = io.StringIO() txt_frames = self.txt_frames num_loops = 3 with patch('time.sleep') as mock_sleep: display_txt_frames(txt_frames, stdout, num_loops, self.seconds_per_frame) self.assertEqual(mock_sleep.call_count, num_loops * len(txt_frames)) for call in mock_sleep.call_args_list: self.assertEqual(call[0][0], self.seconds_per_frame) output_ending = '\n' + ANSI_RESET output = stdout.getvalue() self.assertEqual(output[-len(output_ending):], output_ending) output = output[:-len(output_ending)] output = output.split('\n' + (ANSI_CURSOR_UP * self.height)) self.assertEqual(output, self.txt_frames * num_loops)