# -*- coding: utf-8 -*- # pylint: disable=C0103,R0201,W0401,W0614,W0621 # C0103 Invalid name (setUp(), ...) # R0201 Method could be a function # W0401 Wildcard import # W0614 Unused import ... from wildcard import # W0621 Redefining name ... from outer scope from __future__ import absolute_import from nose import tools from behave.formatter import ansi_escapes import unittest from six.moves import range class StripEscapesTest(unittest.TestCase): ALL_COLORS = list(ansi_escapes.colors.keys()) CURSOR_UPS = [ ansi_escapes.up(count) for count in range(10) ] TEXTS = [ u"lorem ipsum", u"Alice\nBob\nCharly\nDennis", ] @classmethod def colorize(cls, text, color): color_escape = "" if color: color_escape = ansi_escapes.colors[color] return color_escape + text + ansi_escapes.escapes["reset"] @classmethod def colorize_text(cls, text, colors=None): if not colors: colors = [] colors_size = len(colors) color_index = 0 colored_chars = [] for char in text: color = colors[color_index] colored_chars.append(cls.colorize(char, color)) color_index += 1 if color_index >= colors_size: color_index = 0 return "".join(colored_chars) def test_should_return_same_text_without_escapes(self): for text in self.TEXTS: tools.eq_(text, ansi_escapes.strip_escapes(text)) def test_should_return_empty_string_for_any_ansi_escape(self): # XXX-JE-CHECK-PY23: If list() is really needed. for text in list(ansi_escapes.colors.values()): tools.eq_("", ansi_escapes.strip_escapes(text)) for text in list(ansi_escapes.escapes.values()): tools.eq_("", ansi_escapes.strip_escapes(text)) def test_should_strip_color_escapes_from_text(self): for text in self.TEXTS: colored_text = self.colorize_text(text, self.ALL_COLORS) tools.eq_(text, ansi_escapes.strip_escapes(colored_text)) self.assertNotEqual(text, colored_text) for color in self.ALL_COLORS: colored_text = self.colorize(text, color) tools.eq_(text, ansi_escapes.strip_escapes(colored_text)) self.assertNotEqual(text, colored_text) def test_should_strip_cursor_up_escapes_from_text(self): for text in self.TEXTS: for cursor_up in self.CURSOR_UPS: colored_text = cursor_up + text + ansi_escapes.escapes["reset"] tools.eq_(text, ansi_escapes.strip_escapes(colored_text)) self.assertNotEqual(text, colored_text)