Be more explicit with periods in test matches
[mudpy.git] / bin / test
index 0ceb4eb..25a171b 100755 (executable)
--- a/bin/test
+++ b/bin/test
@@ -8,8 +8,7 @@
 import sys
 import telnetlib
 
-dialogue = (
-    # Create account 0
+test_account0_setup = (
     (0, "Identify yourself:", "luser0"),
     (0, "Enter your choice:", "n"),
     (0, "Enter a new password for \"luser0\":", "Test123"),
@@ -19,11 +18,81 @@ dialogue = (
     (0, "Choose a name for her:", "1"),
     (0, "What would you like to do?", "a"),
     (0, "Whom would you like to awaken?", ""),
+)
 
-    # Quit
-    (0, "> ", "quit"),
+test_account1_setup = (
+    (1, "Identify yourself:", "luser1"),
+    (1, "Enter your choice:", "n"),
+    (1, "Enter a new password for \"luser1\":", "Test456"),
+    (1, "Enter the same new password again:", "Test456"),
+    (1, "What would you like to do\?", "c"),
+    (1, "Pick a birth gender for your new avatar:", "m"),
+    (1, "Choose a name for him:", "1"),
+    (1, "What would you like to do?", "a"),
+    (1, "Whom would you like to awaken?", ""),
+)
+
+test_actor_appears = (
+    (0, "You suddenly realize that .* is here\.", ""),
+)
+
+test_explicit_punctuation = (
+    (0, "> ", "say Hello there!"),
+    (0, 'You exclaim, "Hello there\!"', ""),
+    (1, 'exclaims, "Hello there\!"', "say And you are?"),
+    (1, 'You ask, "And you are\?"', ""),
+    (0, 'asks, "And you are\?"', "say I'm me, of course."),
+    (0, 'You say, "I\'m me, of course\."', ""),
+    (1, 'says, "I\'m me, of course\."', "say I wouldn't be so sure..."),
+    (1, 'You muse, "I wouldn\'t be so sure\.\.\."', ""),
+    (0, 'muses, "I wouldn\'t be so sure\.\.\."', "say You mean,"),
+    (0, 'You begin, "You mean,"', ""),
+    (1, 'begins, "You mean,"', "say I know-"),
+    (1, 'You begin, "I know-"', ""),
+    (0, 'begins, "I know-"', "say Don't interrupt:"),
+    (0, 'You begin, "Don\'t interrupt:"', ""),
+    (1, 'begins, "Don\'t interrupt:"', "say I wasn't interrupting;"),
+    (1, 'You begin, "I wasn\'t interrupting;"', ""),
+    (0, 'begins, "I wasn\'t interrupting;"', ""),
+)
+
+test_implicit_punctuation = (
+    (0, '> ', "say Whatever"),
+    (0, 'You say, "Whatever\."', ""),
+    (1, 'says, "Whatever\."', ""),
+)
+
+test_typo_replacement = (
+    (1, '> ', "say That's what i think."),
+    (1, 'You say, "That\'s what I think\."', ""),
+    (0, 'says, "That\'s what I think\."', "say You know what i'd like."),
+    (0, 'You say, "You know what I\'d like\."', ""),
+    (1, 'says, "You know what I\'d like\."', "say Then i'll tell you."),
+    (1, 'You say, "Then I\'ll tell you\."', ""),
+    (0, 'says, "Then I\'ll tell you\."', "say Now i'm ready."),
+    (0, 'You say, "Now I\'m ready\."', ""),
+    (1, 'says, "Now I\'m ready\."', "say That's teh idea."),
+    (1, 'You say, "That\'s the idea\."', ""),
+    (0, 'says, "That\'s the idea\."', "say It's what theyre saying."),
+    (0, 'You say, "It\'s what they\'re saying\."', ""),
+    (1, 'says, "It\'s what they\'re saying\."', "say Well, youre right."),
+    (1, 'You say, "Well, you\'re right\."', ""),
+    (0, 'says, "Well, you\'re right\."', ""),
+)
+
+test_sentence_capitalization = (
+    (0, "> ", "say this sentence should start with a capital T."),
+    (0, 'You say, "This sentence', ""),
+    (1, 'says, "This sentence', ""),
+)
 
-    # Delete account 0
+test_actor_disappears = (
+    (1, "> ", "quit"),
+    (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"),
@@ -31,24 +100,52 @@ dialogue = (
     (0, "Disconnecting...", ""),
 )
 
+test_account1_teardown = (
+    (1, "What would you like to do?", "d"),
+    (1, "Whom would you like to delete?", ""),
+    (1, "What would you like to do?", "p"),
+    (1, "permanently delete your account?", "y"),
+    (1, "Disconnecting...", ""),
+)
+
+dialogue = (
+    (test_account0_setup, "first account setup"),
+    (test_account1_setup, "second account setup"),
+    (test_actor_appears, "actor spontaneous appearance"),
+    (test_explicit_punctuation, " explicit punctuation"),
+    (test_implicit_punctuation, "implicit punctuation"),
+    (test_typo_replacement, "typo replacement"),
+    (test_sentence_capitalization, "sentence capitalization"),
+    (test_actor_disappears, "actor spontaneous disappearance"),
+    (test_account0_teardown, "first account teardown"),
+    (test_account1_teardown, "second account teardown"),
+)
+
 captures = ["", ""]
 lusers = [telnetlib.Telnet(), telnetlib.Telnet()]
 success = True
 for luser in lusers:
     luser.open("::1", 6669)
-for conversant, question, answer in dialogue:
-    print("luser%s waiting for: %s" % (conversant, question))
-    index, match, received = lusers[conversant].expect(
-        [question.encode("utf-8")], 5)
-    captures[conversant] += received.decode("utf-8")
-    if index is not 0:
-        print("ERROR: luser%s did not receive expected string:\n\n%s"
-              % (conversant, question))
-        success = False
-        break
-    print("luser%s sending: %s" % (conversant, answer))
-    lusers[conversant].write(("%s\r\n" % answer).encode("utf-8"))
-    captures[conversant] += "%s\r\n" % answer
+for test, description in dialogue:
+    print("\nTesting %s..." % description)
+    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)
+        captures[conversant] += received.decode("utf-8")
+        try:
+            captures[conversant] += lusers[
+                conversant].read_very_eager().decode("utf-8")
+        except:
+            pass
+        if index is not 0:
+            print("ERROR: luser%s did not receive expected string:\n\n%s"
+                  % (conversant, question))
+            success = False
+            break
+        print("luser%s sending: %s" % (conversant, answer))
+        lusers[conversant].write(("%s\r\n" % answer).encode("utf-8"))
+        captures[conversant] += "%s\r\n" % answer
 for conversant in range(len(captures)):
     try:
         captures[conversant] += lusers[