diff --git a/evennia/contrib/tests.py b/evennia/contrib/tests.py index be58d83fc1..eed5193b04 100644 --- a/evennia/contrib/tests.py +++ b/evennia/contrib/tests.py @@ -988,81 +988,61 @@ class TestUnixCommand(CommandTest): self.assertTrue(any(l.startswith("dummy: error:") for l in lines)) +import re from evennia.contrib import color_markups -from evennia.utils import ansi - class TestColorMarkup(EvenniaTest): - - def test_default_markup(self): - reload(ansi) - self.assertEqual(ansi.parse_ansi("A |rred test"), 'A \x1b[1m\x1b[31mred test') - self.assertEqual(ansi.parse_ansi("A {rred test"), 'A {rred test') - self.assertEqual(ansi.parse_ansi("A %crred test"), "A %crred test") - - @override_settings( - COLOR_ANSI_EXTRA_MAP=[], - COLOR_XTERM256_EXTRA_FG=[], - COLOR_XTERM256_EXTRA_BG=[], - COLOR_XTERM256_EXTRA_GFG=[], - COLOR_XTERM256_EXTRA_GBG=[], - COLOR_ANSI_XTERM256_BRIGHT_BG_EXTRA_MAP=[], - COLOR_NO_DEFAULT=False) - def tearDown(self): - reload(ansi) - - @override_settings( - COLOR_ANSI_EXTRA_MAP=color_markups.CURLY_COLOR_ANSI_EXTRA_MAP, - COLOR_XTERM256_EXTRA_FG=color_markups.CURLY_COLOR_XTERM256_EXTRA_FG, - COLOR_XTERM256_EXTRA_BG=color_markups.CURLY_COLOR_XTERM256_EXTRA_BG, - COLOR_XTERM256_EXTRA_GFG=color_markups.CURLY_COLOR_XTERM256_EXTRA_GFG, - COLOR_XTERM256_EXTRA_GBG=color_markups.CURLY_COLOR_XTERM256_EXTRA_GBG, - COLOR_ANSI_XTERM256_BRIGHT_BG_EXTRA_MAP=color_markups.CURLY_COLOR_ANSI_XTERM256_BRIGHT_BG_EXTRA_MAP) + """ + Note: Normally this would be tested by importing the ansi parser and run + the mappings through it. This is not possible since the ansi module creates + its mapping at the module/class level; since the ansi module is used by so + many other modules it appears that trying to overload + settings to test it causes issues with unrelated tests. + """ def test_curly_markup(self): - reload(ansi) # this is important since the module is initialized - self.assertEqual(ansi.parse_ansi("A |rred test"), 'A \x1b[1m\x1b[31mred test') - self.assertEqual(ansi.parse_ansi("A {rred test"), 'A \x1b[1m\x1b[31mred test') - self.assertEqual(ansi.parse_ansi("A {[Rred test"), 'A \x1b[41mred test') - self.assertEqual(ansi.parse_ansi("A |500red test"), 'A \x1b[1m\x1b[31mred test') - self.assertEqual(ansi.parse_ansi("A {500red test"), 'A \x1b[1m\x1b[31mred test') - self.assertEqual(ansi.parse_ansi("A {[500red test"), 'A \x1b[41mred test') - self.assertEqual(ansi.parse_ansi("A {=hgray test"), 'A \x1b[1m\x1b[30mgray test') - self.assertEqual(ansi.parse_ansi("A {[=hgray test"), 'A \x1b[40mgray test') - self.assertEqual(ansi.parse_ansi("A %crred test"), "A %crred test") - # fake ansi bright background - self.assertEqual(ansi.parse_ansi("A {[rred test"), 'A \x1b[41mred test') + ansi_map = color_markups.CURLY_COLOR_ANSI_EXTRA_MAP + self.assertIsNotNone(re.match(re.escape(ansi_map[7][0]), '{r')) + self.assertIsNotNone(re.match(re.escape(ansi_map[-1][0]), '{[X')) + xterm_fg = color_markups.CURLY_COLOR_XTERM256_EXTRA_FG + self.assertIsNotNone(re.match(xterm_fg[0], '{001')) + self.assertIsNotNone(re.match(xterm_fg[0], '{123')) + self.assertIsNotNone(re.match(xterm_fg[0], '{455')) + xterm_bg = color_markups.CURLY_COLOR_XTERM256_EXTRA_BG + self.assertIsNotNone(re.match(xterm_bg[0], '{[001')) + self.assertIsNotNone(re.match(xterm_bg[0], '{[123')) + self.assertIsNotNone(re.match(xterm_bg[0], '{[455')) + xterm_gfg = color_markups.CURLY_COLOR_XTERM256_EXTRA_GFG + self.assertIsNotNone(re.match(xterm_gfg[0], '{=h')) + self.assertIsNotNone(re.match(xterm_gfg[0], '{=e')) + self.assertIsNotNone(re.match(xterm_gfg[0], '{=w')) + xterm_gbg = color_markups.CURLY_COLOR_XTERM256_EXTRA_GBG + self.assertIsNotNone(re.match(xterm_gbg[0], '{[=a')) + self.assertIsNotNone(re.match(xterm_gbg[0], '{[=k')) + self.assertIsNotNone(re.match(xterm_gbg[0], '{[=z')) + bright_map = color_markups.CURLY_COLOR_ANSI_XTERM256_BRIGHT_BG_EXTRA_MAP + self.assertEqual(bright_map[0][1], '{[500') + self.assertEqual(bright_map[-1][1], '{[222') - @override_settings( - COLOR_ANSI_EXTRA_MAP=color_markups.MUX_COLOR_ANSI_EXTRA_MAP, - COLOR_XTERM256_EXTRA_FG=color_markups.MUX_COLOR_XTERM256_EXTRA_FG, - COLOR_XTERM256_EXTRA_BG=color_markups.MUX_COLOR_XTERM256_EXTRA_BG, - COLOR_XTERM256_EXTRA_GFG=color_markups.MUX_COLOR_XTERM256_EXTRA_GFG, - COLOR_XTERM256_EXTRA_GBG=color_markups.MUX_COLOR_XTERM256_EXTRA_GBG, - COLOR_ANSI_XTERM256_BRIGHT_BG_EXTRA_MAP=color_markups.MUX_COLOR_ANSI_XTERM256_BRIGHT_BG_EXTRA_MAP) def test_mux_markup(self): - reload(ansi) - self.assertEqual(ansi.parse_ansi("A |rred test"), 'A \x1b[1m\x1b[31mred test') - self.assertEqual(ansi.parse_ansi("A %ch%crred test"), 'A \x1b[1m\x1b[31mred test') - self.assertEqual(ansi.parse_ansi("A %ch%crred test"), 'A \x1b[1m\x1b[31mred test') - self.assertEqual(ansi.parse_ansi("A |500red test"), 'A \x1b[1m\x1b[31mred test') - self.assertEqual(ansi.parse_ansi("A %c500red test"), 'A \x1b[1m\x1b[31mred test') - self.assertEqual(ansi.parse_ansi("A %c[500red test"), 'A \x1b[41mred test') - self.assertEqual(ansi.parse_ansi("A %c=hgray test"), 'A \x1b[1m\x1b[30mgray test') - self.assertEqual(ansi.parse_ansi("A %c[=hgray test"), 'A \x1b[40mgray test') - self.assertEqual(ansi.parse_ansi("A {rred test"), "A {rred test") - # fake ansi bright background - self.assertEqual(ansi.parse_ansi("A %ch%cRred test"), 'A \x1b[41mred test') - - @override_settings( - COLOR_ANSI_EXTRA_MAP=color_markups.MUX_COLOR_ANSI_EXTRA_MAP, - COLOR_XTERM256_EXTRA_FG=color_markups.MUX_COLOR_XTERM256_EXTRA_FG, - COLOR_XTERM256_EXTRA_BG=color_markups.MUX_COLOR_XTERM256_EXTRA_BG, - COLOR_XTERM256_EXTRA_GFG=color_markups.MUX_COLOR_XTERM256_EXTRA_GFG, - COLOR_XTERM256_EXTRA_GBG=color_markups.MUX_COLOR_XTERM256_EXTRA_GBG, - COLOR_ANSI_XTERM256_BRIGHT_BG_EXTRA_MAP=color_markups.MUX_COLOR_ANSI_XTERM256_BRIGHT_BG_EXTRA_MAP, - COLOR_NO_DEFAULT=True) - def test_override(self): - reload(ansi) - self.assertEqual(ansi.parse_ansi("A |rred test"), "A |rred test") - self.assertEqual(ansi.parse_ansi("A {rred test"), "A {rred test") - self.assertEqual(ansi.parse_ansi("A %ch%crred test"), 'A \x1b[1m\x1b[31mred test') + ansi_map = color_markups.MUX_COLOR_ANSI_EXTRA_MAP + self.assertIsNotNone(re.match(re.escape(ansi_map[10][0]), '%cr')) + self.assertIsNotNone(re.match(re.escape(ansi_map[-1][0]), '%cX')) + xterm_fg = color_markups.MUX_COLOR_XTERM256_EXTRA_FG + self.assertIsNotNone(re.match(xterm_fg[0], '%c001')) + self.assertIsNotNone(re.match(xterm_fg[0], '%c123')) + self.assertIsNotNone(re.match(xterm_fg[0], '%c455')) + xterm_bg = color_markups.MUX_COLOR_XTERM256_EXTRA_BG + self.assertIsNotNone(re.match(xterm_bg[0], '%c[001')) + self.assertIsNotNone(re.match(xterm_bg[0], '%c[123')) + self.assertIsNotNone(re.match(xterm_bg[0], '%c[455')) + xterm_gfg = color_markups.MUX_COLOR_XTERM256_EXTRA_GFG + self.assertIsNotNone(re.match(xterm_gfg[0], '%c=h')) + self.assertIsNotNone(re.match(xterm_gfg[0], '%c=e')) + self.assertIsNotNone(re.match(xterm_gfg[0], '%c=w')) + xterm_gbg = color_markups.MUX_COLOR_XTERM256_EXTRA_GBG + self.assertIsNotNone(re.match(xterm_gbg[0], '%c[=a')) + self.assertIsNotNone(re.match(xterm_gbg[0], '%c[=k')) + self.assertIsNotNone(re.match(xterm_gbg[0], '%c[=z')) + bright_map = color_markups.MUX_COLOR_ANSI_XTERM256_BRIGHT_BG_EXTRA_MAP + self.assertEqual(bright_map[0][1], '%c[500') + self.assertEqual(bright_map[-1][1], '%c[222') diff --git a/evennia/settings_default.py b/evennia/settings_default.py index 33c72b70d9..f7faf24e2d 100644 --- a/evennia/settings_default.py +++ b/evennia/settings_default.py @@ -331,9 +331,9 @@ PROTOTYPE_MODULES = ["world.prototypes"] # dummyrunner for more information) DUMMYRUNNER_SETTINGS_MODULE = "evennia.server.profiling.dummyrunner_settings" # Mapping to extend Evennia's normal ANSI color tags. The mapping is a list of -# tuples mapping the tag to the ANSI convertion, like `(r"%c%r", ansi.ANSI_RED)` -# (the evennia.utils.ansi module contains all ANSI escape sequences). Default -# is to use `|` and `|[` prefixes. +# tuples mapping the exact tag (not a regex!) to the ANSI convertion, like +# `(r"%c%r", ansi.ANSI_RED)` (the evennia.utils.ansi module contains all +# ANSI escape sequences). Default is to use `|` and `|[` -prefixes. COLOR_ANSI_EXTRA_MAP = [] # Extend the available regexes for adding XTERM256 colors in-game. This is given # as a list of regexes, where each regex must contain three anonymous groups for @@ -353,7 +353,7 @@ COLOR_XTERM256_EXTRA_GFG = [] COLOR_XTERM256_EXTRA_GBG = [] # ANSI does not support bright backgrounds, so Evennia fakes this by mapping it to # XTERM256 backgrounds where supported. This is a list of tuples that maps the wanted -# regex to a valid XTERM256 background tag, such as `(r'{[r', r'{[500')`. +# ansi tag (not a regex!) to a valid XTERM256 background tag, such as `(r'{[r', r'{[500')`. COLOR_ANSI_XTERM256_BRIGHT_BG_EXTRA_MAP = [] # If set True, the above color settings *replace* the default |-style color markdown # rather than extend it.