diff --git a/evennia/utils/tests/test_text2html.py b/evennia/utils/tests/test_text2html.py new file mode 100644 index 0000000000..439cd96c43 --- /dev/null +++ b/evennia/utils/tests/test_text2html.py @@ -0,0 +1,187 @@ +"""Tests for text2html """ + +import unittest +from django.test import TestCase +from evennia.utils import ansi, text2html +import mock + + +class TestText2Html(TestCase): + + def test_re_color(self): + parser = text2html.HTML_PARSER + self.assertEqual("foo", parser.re_color("foo")) + self.assertEqual( + "redfoo", + parser.re_color(ansi.ANSI_UNHILITE + ansi.ANSI_RED + "red" + ansi.ANSI_NORMAL + "foo")) + self.assertEqual( + "redfoo", + parser.re_color(ansi.ANSI_BACK_RED + "red" + ansi.ANSI_NORMAL + "foo")) + self.assertEqual( + "redfoo", + parser.re_color(ansi.ANSI_BACK_RED + ansi.ANSI_UNHILITE + ansi.ANSI_GREEN + "red" + ansi.ANSI_NORMAL + "foo")) + + @unittest.skip("parser issues") + def test_re_bold(self): + parser = text2html.HTML_PARSER + self.assertEqual("foo", parser.re_bold("foo")) + self.assertEqual( + # "a redfoo", # TODO: why not? + "a redfoo", + parser.re_bold( + "a " + ansi.ANSI_HILITE + "red" + ansi.ANSI_UNHILITE + "foo")) + + @unittest.skip("parser issues") + def test_re_underline(self): + parser = text2html.HTML_PARSER + self.assertEqual("foo", parser.re_underline("foo")) + self.assertEqual( + "a red" + ansi.ANSI_NORMAL + "foo", + parser.re_underline( + "a " + ansi.ANSI_UNDERLINE + "red" + + ansi.ANSI_NORMAL # TODO: why does it keep it? + + "foo")) + + @unittest.skip("parser issues") + def test_re_blinking(self): + parser = text2html.HTML_PARSER + self.assertEqual("foo", parser.re_blinking("foo")) + self.assertEqual( + "a red" + ansi.ANSI_NORMAL + "foo", + parser.re_blinking( + "a " + ansi.ANSI_BLINK + "red" + + ansi.ANSI_NORMAL # TODO: why does it keep it? + + "foo")) + + @unittest.skip("parser issues") + def test_re_inversing(self): + parser = text2html.HTML_PARSER + self.assertEqual("foo", parser.re_inversing("foo")) + self.assertEqual( + "a red" + ansi.ANSI_NORMAL + "foo", + parser.re_inversing( + "a " + ansi.ANSI_INVERSE + "red" + + ansi.ANSI_NORMAL # TODO: why does it keep it? + + "foo")) + + @unittest.skip("parser issues") + def test_remove_bells(self): + parser = text2html.HTML_PARSER + self.assertEqual("foo", parser.remove_bells("foo")) + self.assertEqual( + "a red" + ansi.ANSI_NORMAL + "foo", + parser.remove_bells( + "a " + ansi.ANSI_BEEP + "red" + + ansi.ANSI_NORMAL # TODO: why does it keep it? + + "foo")) + + def test_remove_backspaces(self): + parser = text2html.HTML_PARSER + self.assertEqual("foo", parser.remove_backspaces("foo")) + self.assertEqual("redfoo", + parser.remove_backspaces("a\010redfoo")) + + def test_convert_linebreaks(self): + parser = text2html.HTML_PARSER + self.assertEqual("foo", parser.convert_linebreaks("foo")) + self.assertEqual( + "a
redfoo
", + parser.convert_linebreaks("a\n redfoo\n")) + + @unittest.skip("parser issues") + def test_convert_urls(self): + parser = text2html.HTML_PARSER + self.assertEqual("foo", parser.convert_urls("foo")) + self.assertEqual( + "a http://redfoo runs", + parser.convert_urls("a http://redfoo runs")) + # TODO: doesn't URL encode correctly + + def test_re_double_space(self): + parser = text2html.HTML_PARSER + self.assertEqual("foo", parser.re_double_space("foo")) + self.assertEqual( + "a  red    foo", + parser.re_double_space("a red foo")) + + def test_sub_mxp_links(self): + parser = text2html.HTML_PARSER + mocked_match = mock.Mock() + mocked_match.groups.return_value = ["cmd", "text"] + self.assertEqual( + r"""text""", + parser.sub_mxp_links(mocked_match)) + + def test_sub_text(self): + parser = text2html.HTML_PARSER + mocked_match = mock.Mock() + mocked_match.groupdict.return_value = { + "htmlchars": "foo" + } + self.assertEqual( + "foo", + parser.sub_text(mocked_match)) + mocked_match.groupdict.return_value = { + "htmlchars": "", + "lineend": "foo", + } + self.assertEqual( + "
", + parser.sub_text(mocked_match)) + mocked_match.groupdict.return_value = { + "htmlchars": "", + "lineend": "", + "firstspace": "foo" + } + self.assertEqual( + "  ", + parser.sub_text(mocked_match)) + parser.tabstop = 2 + mocked_match.groupdict.return_value = { + "htmlchars": "", + "lineend": "", + "firstspace": "", + "space": "\t" + } + self.assertEqual( + "   ", + parser.sub_text(mocked_match)) + mocked_match.groupdict.return_value = { + "htmlchars": "", + "lineend": "", + "firstspace": "", + "space": " ", + "spacestart": " " + } + mocked_match.group.return_value = " \t " + self.assertEqual( + "    ", + parser.sub_text(mocked_match)) + mocked_match.groupdict.return_value = { + "htmlchars": "", + "lineend": "", + "firstspace": "", + "space": "", + "spacestart": "" + } + self.assertEqual( + None, + parser.sub_text(mocked_match)) + + def test_parse_html(self): + self.assertEqual("foo", text2html.parse_html("foo")) + self.maxDiff = None + self.assertEqual( + """Hello World!!""", + text2html.parse_html( + ansi.ANSI_BLINK + ansi.ANSI_BACK_CYAN + "Hello " + ansi.ANSI_NORMAL + + ansi.ANSI_UNDERLINE + ansi.ANSI_RED + "W" + + ansi.ANSI_GREEN + "o" + + ansi.ANSI_YELLOW + "r" + + ansi.ANSI_BLUE + "l" + + ansi.ANSI_MAGENTA + "d" + + ansi.ANSI_CYAN + "!" + + ansi.ANSI_BACK_GREEN + "!")) + diff --git a/evennia/utils/text2html.py b/evennia/utils/text2html.py index 453779f453..011d6efb34 100644 --- a/evennia/utils/text2html.py +++ b/evennia/utils/text2html.py @@ -246,8 +246,7 @@ class TextToHTMLparser(object): text (str): Processed text. """ - return text - return text.replace(r"\n", r"
") + return text.replace("\n", r"
") def convert_urls(self, text): """ @@ -277,7 +276,7 @@ class TextToHTMLparser(object): replaces MXP links with HTML code. Args: - text (str): Text to process. + match (re.Matchobject): Match for substitution. Returns: text (str): Processed text. @@ -311,8 +310,7 @@ class TextToHTMLparser(object): elif cdict["firstspace"]: return "  " elif cdict["space"] == "\t": - text = match.group() - return " " if tabstop == 1 else " " + " " * tabstop + return " " if self.tabstop == 1 else " " + " " * self.tabstop elif cdict["space"] or cdict["spacestart"]: text = match.group().replace("\t", " " * self.tabstop) text = text.replace(" ", " ")