-#!/usr/bin/env python
+#!/usr/bin/env python3
"""Regression test script for the mudpy engine."""
-# Copyright (c) 2004-2015 Jeremy Stanley <fungi@yuggoth.org>. Permission
+# Copyright (c) 2004-2016 Jeremy Stanley <fungi@yuggoth.org>. Permission
# to use, copy, modify, and distribute this software is granted under
# terms provided in the LICENSE file distributed with this software.
+import re
import sys
import telnetlib
import time
test_chat_mode = (
(1, '> ', "chat"),
- (1, '> \(chat\) ', "Feeling chatty."),
+ (1, '(?s)Entering chat mode .*> \(chat\) ', "Feeling chatty."),
(1, 'You say, "Feeling chatty\."', "!chat"),
(0, 'says, "Feeling chatty\."', ""),
(1, '> ', "say Now less chatty."),
(0, "You suddenly wonder where .* went\.", ""),
)
-test_account0_teardown = (
- (0, "> ", "quit"),
- (0, "What would you like to do?", "d"),
- (0, "Whom would you like to delete?", ""),
- (0, "What would you like to do?", "p"),
- (0, "permanently delete your account?", "y"),
- (0, "Disconnecting...", ""),
-)
-
test_account1_teardown = (
(1, "What would you like to do?", "d"),
(1, "Whom would you like to delete?", ""),
(1, "Disconnecting...", ""),
)
+test_admin_setup = (
+ (2, "Identify yourself:", "testadmin"),
+ (2, "Enter your choice:", "n"),
+ (2, "Enter a new password for \"testadmin\":", "Test789"),
+ (2, "Enter the same new password again:", "Test789"),
+ (2, "What would you like to do\?", "c"),
+ (2, "Pick a birth gender for your new avatar:", "m"),
+ (2, "Choose a name for him:", "1"),
+ (2, "What would you like to do?", "a"),
+ (2, "Whom would you like to awaken?", ""),
+)
+
+test_admin_restriction = (
+ (0, "> ", "help halt"),
+ (0, "That is not an available command\.", "halt"),
+ (0, '(not sure what "halt" means|Arglebargle, glop-glyf)', ""),
+)
+
+test_admin_help = (
+ (2, "> ", "help"),
+ (2, "halt.*Shut down the world\.", "help halt"),
+ (2, "This will save all active accounts", ""),
+)
+
+test_show_element = (
+ (2, "> ", "show element internal:counters"),
+ (2, "These are the properties of the \"internal:counters\" element "
+ "\(in.*data/internal\.yaml\"\):.* \x1b\[32melapsed: "
+ "\x1b\[31m[0-9]+\x1b\[0m", ""),
+)
+
+test_show_log = (
+ (2, "> ", "show log"),
+ (2, "There are [0-9]+ log lines in memory and [0-9]+ at or above level "
+ "[0-9]+\. The matching lines\r\nfrom [0-9]+ to [0-9]+ are:", ""),
+)
+
+test_log_no_errors = (
+ (2, "> ", "show log 7"),
+ (2, "None of the [0-9]+ lines in memory matches your request\.", ""),
+)
+
dialogue = (
(test_account0_setup, "first account setup"),
(test_account1_setup, "second account setup"),
(test_chat_mode, "chat mode"),
(test_movement, "movement"),
(test_actor_disappears, "actor spontaneous disappearance"),
- (test_account0_teardown, "first account teardown"),
(test_account1_teardown, "second account teardown"),
+ (test_admin_setup, "admin account setup"),
+ (test_admin_restriction, "restricted admin commands"),
+ (test_admin_help, "admin help"),
+ (test_show_element, "show element"),
+ (test_show_log, "show log"),
+ (test_log_no_errors, "no errors logged"),
)
-captures = ["", ""]
-lusers = [telnetlib.Telnet(), telnetlib.Telnet()]
+captures = ["", "", ""]
+lusers = [telnetlib.Telnet(), telnetlib.Telnet(), telnetlib.Telnet()]
success = True
start = time.time()
for luser in lusers:
for conversant, question, answer in test:
print("luser%s waiting for: %s" % (conversant, question))
index, match, received = lusers[conversant].expect(
- [question.encode("utf-8")], 5)
+ [re.compile(question.encode("utf-8"), flags=re.DOTALL)], 5)
captures[conversant] += received.decode("utf-8")
try:
captures[conversant] += lusers[