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(" ", " ")