Escape replacement macros in preferences
[mudpy.git] / mudpy / tests / selftest.py
index 2cbed03..d98755a 100644 (file)
@@ -111,6 +111,11 @@ test_forbid_ansi_input = (
     (1, r'says, "\[35mfoo\[0m\."', ""),
 )
 
+test_escape_macros = (
+    (0, '> ', "say $(red)bar$(nrm)"),
+    (1, r'says, "\$\(red\)bar\$\(nrm\)."', ""),
+)
+
 test_movement = (
     (0, "> ", "move north"),
     (0, r"You exit to the north\.", ""),
@@ -160,9 +165,9 @@ test_admin_setup = (
 
 test_preferences = (
     (0, "> ", "preferences"),
-    (0, r"prompt \x1b\[32m.*> ", "preferences prompt #"),
-    (0, r"# ", "preferences prompt"),
-    (0, r"#.*# ", "preferences prompt >"),
+    (0, r"prompt \x1b\[32m.*> ", "preferences prompt $(foo)"),
+    (0, r"\$\(foo\) ", "preferences prompt"),
+    (0, r"\$\(foo\).*\$\(foo\) ", "preferences prompt >"),
     (2, "> ", "preferences loglevel 0"),
     (2, "> ", "preferences"),
     (2, r"loglevel \x1b\[32m0\x1b\[0m.*> ", "preferences loglevel zero"),
@@ -181,7 +186,7 @@ test_telnet_iac = (
     # unescaped and deduplicated to a single \xff in the buffer and then
     # the line of input discarded as a non-ASCII sequence
     (2, "> ", b"say argle\xff\xffbargle\r\0"),
-    (2, r"Non-ASCII characters from admin: b'say argle\\xffbargle'.*> ", ""),
+    (2, r"Non-ASCII characters from admin: b'say.*argle\\xffbargle'.*> ", ""),
 )
 
 test_telnet_unknown_command = (
@@ -316,6 +321,7 @@ dialogue = (
     (test_chat_mode, "chat mode"),
     (test_wrapping, "wrapping"),
     (test_forbid_ansi_input, "raw escape input is filtered"),
+    (test_escape_macros, "replacement macros are escaped"),
     (test_movement, "movement"),
     (test_actor_disappears, "actor spontaneous disappearance"),
     (test_account1_teardown, "second account teardown"),
@@ -432,9 +438,9 @@ def option_callback(telnet_socket, command, option):
         # any response to avoid endlessly looping
         pass
     elif command in (telnetlib.DO, telnetlib.DONT):
-        telnet_socket.send(b"%s%s%s" % (telnetlib.IAC, telnetlib.WONT, option))
+        telnet_socket.send(telnetlib.IAC + telnetlib.WONT + option)
     elif command in (telnetlib.WILL, telnetlib.WONT):
-        telnet_socket.send(b"%s%s%s" % (telnetlib.IAC, telnetlib.DONT, option))
+        telnet_socket.send(telnetlib.IAC + telnetlib.DONT + option)
 
 
 def main():