def testMessageContainsAnsiCodes(self): self.StartEnvPatch({'TERM': 'screen'}) self.SetEncoding('utf8') self.console_size = self.SetConsoleSize(20) message = ('This is a line constructed from \x1b[31;1mcolorized\x1b[39;0m ' 'parts and long enough to be split into \x1b[34;1m' 'multiple\x1b[39;0m lines at \x1b[32mwidth=20\x1b[39;0m.') stream = io.StringIO() mco = multiline.MultilineConsoleOutput(stream) mco.AddMessage(message) mco.UpdateConsole() self.assertEqual( '\r' + ' ' * self.console_size + '\r' + 'This is a line const\n' + '\r' + ' ' * self.console_size + '\r' + 'ructed from \x1b[31;1mcolorize\n' + '\r' + ' ' * self.console_size + '\r' + 'd\x1b[39;0m parts and long eno\n' + '\r' + ' ' * self.console_size + '\r' + 'ugh to be split into\n' + '\r' + ' ' * self.console_size + '\r' + ' \x1b[34;1mmultiple\x1b[39;0m lines at \x1b[32mw\n' + '\r' + ' ' * self.console_size + '\r' + 'idth=20\x1b[39;0m.\n', stream.getvalue())
def testMessagesGetShorter(self): stream = io.StringIO() mco = multiline.MultilineConsoleOutput(stream) message1 = mco.AddMessage('a' * 20) message2 = mco.AddMessage('b' * 20) mco.UpdateConsole() mco.UpdateMessage(message1, 'c' * 5) mco.UpdateMessage(message2, 'd' * 5) mco.UpdateConsole() self.assertEqual( # Update 1 '\r' + ' ' * self.console_size + '\r' + 'a' * 15 + '\n' + '\r' + ' ' * self.console_size + '\r' + 'a' * 5 + '\n' + '\r' + ' ' * self.console_size + '\r' + 'b' * 15 + '\n' + '\r' + ' ' * self.console_size + '\r' + 'b' * 5 + '\n' + # Update 2 self.ansi_cursor_up.format(4) + '\r' + ' ' * self.console_size + '\r' + 'c' * 5 + '\n' + '\r' + ' ' * self.console_size + '\r' + 'd' * 5 + '\n', stream.getvalue())
def testUpdateMessageInvalidMessage(self): stream = io.StringIO() mco = multiline.MultilineConsoleOutput(stream) stray_message = multiline.MultilineConsoleMessage('asdf', stream) with self.assertRaisesRegex( ValueError, 'The given message does not belong to this output object.'): mco.UpdateMessage(stray_message, 'fdsa')
def testAddAndUpdateConsole(self): stream = io.StringIO() mco = multiline.MultilineConsoleOutput(stream) mco.AddMessage('message') self.assertEqual('', stream.getvalue()) mco.UpdateConsole() mco.UpdateConsole() self.assertEqual( # Update 1 (Update 2 is empty as no update necessary) '\r' + ' ' * self.console_size + '\r' + 'message\n', stream.getvalue())
def _SetupOutput(self): # Console outputting objects self._maintain_queue = False self._console_output = multiline.MultilineConsoleOutput(self._stream) self._header_message = self._console_output.AddMessage(self._message) self._stage_messages = dict() for stage in self._stages: self._stage_messages[stage] = self._console_output.AddMessage( stage.header, indentation_level=1) self._UpdateStageTickMark(stage) self._console_output.UpdateConsole()
def _SetupOutput(self): # Console outputting objects self._maintain_queue = False self._console_output = multiline.MultilineConsoleOutput(self._stream) self._header_message = self._AddMessage(self._message) self._header_stage = Stage('') # Use a Stage object to hold header state. self._header_stage.status = StageCompletionStatus.RUNNING self._stage_messages = dict() for stage in self._stages.values(): self._stage_messages[stage] = self._AddMessage(stage.header, indentation_level=1) self._UpdateStageTickMark(stage) self._console_output.UpdateConsole()
def testAddAndUpdateMessage(self): stream = io.StringIO() mco = multiline.MultilineConsoleOutput(stream) message = mco.AddMessage('message') mco.UpdateConsole() mco.UpdateMessage(message, 'egassem') mco.UpdateConsole() self.assertEqual( # Update 1 '\r' + ' ' * self.console_size + '\r' + 'message\n' + # Update 2 self.ansi_cursor_up.format(1) + '\r' + ' ' * self.console_size + '\r' + 'egassem\n', stream.getvalue())
def testUpdateMessageNoMessage(self): stream = io.StringIO() mco = multiline.MultilineConsoleOutput(stream) with self.assertRaisesRegex(ValueError, 'A message must be passed.'): mco.UpdateMessage(None, 'fdsa')
def testUpdateNoMessages(self): stream = io.StringIO() mco = multiline.MultilineConsoleOutput(stream) mco.UpdateConsole() self.assertEqual('', stream.getvalue())