From 9e38cef5ff1ab6934f4082d39d242b6e10a03e1f Mon Sep 17 00:00:00 2001 From: Henddher Pedroza Date: Sat, 19 Oct 2019 18:32:42 -0400 Subject: [PATCH 1/7] Unit tests for evennia/utils/text2html. --- evennia/utils/tests/test_text2html.py | 92 +++++++++++++++++++++++++++ evennia/utils/text2html.py | 5 +- 2 files changed, 94 insertions(+), 3 deletions(-) create mode 100644 evennia/utils/tests/test_text2html.py diff --git a/evennia/utils/tests/test_text2html.py b/evennia/utils/tests/test_text2html.py new file mode 100644 index 0000000000..b4f631208c --- /dev/null +++ b/evennia/utils/tests/test_text2html.py @@ -0,0 +1,92 @@ +"""Tests for text2html """ + +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_RED + "red" + ansi.ANSI_NORMAL + "foo")) + + 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")) + + 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")) + + 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")) + + 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")) + + 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")) + + 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")) diff --git a/evennia/utils/text2html.py b/evennia/utils/text2html.py index 453779f453..6d49b6a445 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. From 77965fadd396d9c94f19fdf9b4425378272ff36c Mon Sep 17 00:00:00 2001 From: Henddher Pedroza Date: Sat, 19 Oct 2019 19:16:36 -0400 Subject: [PATCH 2/7] Increase coverage for evennia/utils/text2html --- evennia/utils/tests/test_text2html.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/evennia/utils/tests/test_text2html.py b/evennia/utils/tests/test_text2html.py index b4f631208c..506c920a1b 100644 --- a/evennia/utils/tests/test_text2html.py +++ b/evennia/utils/tests/test_text2html.py @@ -2,7 +2,6 @@ from django.test import TestCase from evennia.utils import ansi, text2html -import mock class TestText2Html(TestCase): @@ -90,3 +89,19 @@ class TestText2Html(TestCase): self.assertEqual( "a  red    foo", parser.re_double_space("a red foo")) + + 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 + "!")) + From cea0e1a0a42cc5b4c7c8bf8bd637e2e2470d3129 Mon Sep 17 00:00:00 2001 From: Henddher Pedroza Date: Sat, 19 Oct 2019 20:39:40 -0400 Subject: [PATCH 3/7] Increase coverage in evennia/utils/text2html --- evennia/utils/tests/test_text2html.py | 57 +++++++++++++++++++++++++++ evennia/utils/text2html.py | 3 +- 2 files changed, 58 insertions(+), 2 deletions(-) diff --git a/evennia/utils/tests/test_text2html.py b/evennia/utils/tests/test_text2html.py index 506c920a1b..e288feb53d 100644 --- a/evennia/utils/tests/test_text2html.py +++ b/evennia/utils/tests/test_text2html.py @@ -2,6 +2,7 @@ from django.test import TestCase from evennia.utils import ansi, text2html +import mock class TestText2Html(TestCase): @@ -90,6 +91,62 @@ class TestText2Html(TestCase): "a  red    foo", parser.re_double_space("a red foo")) + 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 diff --git a/evennia/utils/text2html.py b/evennia/utils/text2html.py index 6d49b6a445..011d6efb34 100644 --- a/evennia/utils/text2html.py +++ b/evennia/utils/text2html.py @@ -310,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(" ", " ") From 7d05b3ac0db7c09aaebe00c7eeb39892ccef0bf4 Mon Sep 17 00:00:00 2001 From: Henddher Pedroza Date: Sat, 19 Oct 2019 21:10:26 -0400 Subject: [PATCH 4/7] Increase coverage in evennia/utils/text2html. --- evennia/utils/tests/test_text2html.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/evennia/utils/tests/test_text2html.py b/evennia/utils/tests/test_text2html.py index e288feb53d..9af75d6adb 100644 --- a/evennia/utils/tests/test_text2html.py +++ b/evennia/utils/tests/test_text2html.py @@ -91,6 +91,16 @@ class TestText2Html(TestCase): "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() From 7ceef9a54ad686b41e8b31b6c79df6e421f01bc3 Mon Sep 17 00:00:00 2001 From: Henddher Pedroza Date: Sat, 19 Oct 2019 21:55:32 -0400 Subject: [PATCH 5/7] Increase coverage in evennia/utils/text2html. --- evennia/utils/tests/test_text2html.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/evennia/utils/tests/test_text2html.py b/evennia/utils/tests/test_text2html.py index 9af75d6adb..a9003adabe 100644 --- a/evennia/utils/tests/test_text2html.py +++ b/evennia/utils/tests/test_text2html.py @@ -13,6 +13,12 @@ class TestText2Html(TestCase): self.assertEqual( "redfoo", parser.re_color(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_GREEN + "red" + ansi.ANSI_NORMAL + "foo")) def test_re_bold(self): parser = text2html.HTML_PARSER From 56026253dc774ac5680e6c2b2d688378e68559c5 Mon Sep 17 00:00:00 2001 From: Henddher Pedroza Date: Sat, 19 Oct 2019 22:16:51 -0400 Subject: [PATCH 6/7] Increase coverage in evennia/utils/text2html. --- evennia/utils/tests/test_text2html.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/evennia/utils/tests/test_text2html.py b/evennia/utils/tests/test_text2html.py index a9003adabe..02b900bed8 100644 --- a/evennia/utils/tests/test_text2html.py +++ b/evennia/utils/tests/test_text2html.py @@ -11,14 +11,14 @@ class TestText2Html(TestCase): parser = text2html.HTML_PARSER self.assertEqual("foo", parser.re_color("foo")) self.assertEqual( - "redfoo", - parser.re_color(ansi.ANSI_RED + "red" + ansi.ANSI_NORMAL + "foo")) + "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_GREEN + "red" + ansi.ANSI_NORMAL + "foo")) + "redfoo", + parser.re_color(ansi.ANSI_BACK_RED + ansi.ANSI_UNHILITE + ansi.ANSI_GREEN + "red" + ansi.ANSI_NORMAL + "foo")) def test_re_bold(self): parser = text2html.HTML_PARSER From e9a48d57d6ad7bd891b5064e2df18caa16a6b1f7 Mon Sep 17 00:00:00 2001 From: Henddher Pedroza Date: Thu, 24 Oct 2019 20:34:07 -0400 Subject: [PATCH 7/7] Skip tests that accept errors in text2html/ansi parser. --- evennia/utils/tests/test_text2html.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/evennia/utils/tests/test_text2html.py b/evennia/utils/tests/test_text2html.py index 02b900bed8..439cd96c43 100644 --- a/evennia/utils/tests/test_text2html.py +++ b/evennia/utils/tests/test_text2html.py @@ -1,5 +1,6 @@ """Tests for text2html """ +import unittest from django.test import TestCase from evennia.utils import ansi, text2html import mock @@ -20,6 +21,7 @@ class TestText2Html(TestCase): "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")) @@ -29,6 +31,7 @@ class TestText2Html(TestCase): 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")) @@ -39,6 +42,7 @@ class TestText2Html(TestCase): + 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")) @@ -49,6 +53,7 @@ class TestText2Html(TestCase): + 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")) @@ -59,6 +64,7 @@ class TestText2Html(TestCase): + 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")) @@ -82,6 +88,7 @@ class TestText2Html(TestCase): "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"))