X-Git-Url: https://mudpy.org/gitweb?p=mudpy.git;a=blobdiff_plain;f=bin%2Ftest;h=62a6202ef0ade36080649b99bbc0d8c87c05bc36;hp=e090fb724b4960fa5c9cd2d273fd888b8da92e92;hb=c55f6d9a9658ccaa0b668612161fe651037ca7af;hpb=1780ed9b09e7d34c2e5d3dd1d7e4693593401f61 diff --git a/bin/test b/bin/test index e090fb7..62a6202 100755 --- a/bin/test +++ b/bin/test @@ -1,15 +1,15 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 """Regression test script for the mudpy engine.""" -# Copyright (c) 2004-2015 Jeremy Stanley . Permission +# Copyright (c) 2004-2016 Jeremy Stanley . Permission # to use, copy, modify, and distribute this software is granted under # terms provided in the LICENSE file distributed with this software. import sys import telnetlib +import time -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,8 +19,9 @@ dialogue = ( (0, "Choose a name for her:", "1"), (0, "What would you like to do?", "a"), (0, "Whom would you like to awaken?", ""), +) - # Create account 1 +test_account1_setup = ( (1, "Identify yourself:", "luser1"), (1, "Enter your choice:", "n"), (1, "Enter a new password for \"luser1\":", "Test456"), @@ -30,11 +31,13 @@ dialogue = ( (1, "Choose a name for him:", "1"), (1, "What would you like to do?", "a"), (1, "Whom would you like to awaken?", ""), +) - # Actor appears from nowhere +test_actor_appears = ( (0, "You suddenly realize that .* is here\.", ""), +) - # Explicit punctuation +test_explicit_punctuation = ( (0, "> ", "say Hello there!"), (0, 'You exclaim, "Hello there\!"', ""), (1, 'exclaims, "Hello there\!"', "say And you are?"), @@ -52,44 +55,76 @@ dialogue = ( (1, 'begins, "Don\'t interrupt:"', "say I wasn't interrupting;"), (1, 'You begin, "I wasn\'t interrupting;"', ""), (0, 'begins, "I wasn\'t interrupting;"', ""), +) - # Implicit punctuation +test_implicit_punctuation = ( (0, '> ', "say Whatever"), - (0, 'You say, "Whatever."', ""), - (1, 'says, "Whatever."', ""), + (0, 'You say, "Whatever\."', ""), + (1, 'says, "Whatever\."', ""), +) - # Typo replacement +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."', ""), - - # Actor disappears - (1, "> ", "quit"), - (0, "You suddenly wonder where .* went\.", ""), + (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\."', ""), +) - # Quit - (0, "> ", "quit"), +test_sentence_capitalization = ( + (0, "> ", "say this sentence should start with a capital T."), + (0, 'You say, "This sentence', ""), + (1, 'says, "This sentence', ""), +) + +test_chat_mode = ( + (1, '> ', "chat"), + (1, '(?s)Entering chat mode .*> \(chat\) ', "Feeling chatty."), + (1, 'You say, "Feeling chatty\."', "!chat"), + (0, 'says, "Feeling chatty\."', ""), + (1, '> ', "say Now less chatty."), + (1, 'You say, "Now less chatty\."', ""), + (0, 'says, "Now less chatty\."', ""), +) + +test_movement = ( + (0, "> ", "move north"), + (0, "You exit to the north\.", ""), + (1, "exits to the north\.", "move north"), + (0, "arrives from the south\.", "move south"), + (0, "You exit to the south\.", ""), + (1, "exits to the south\.", "move south"), + (0, "arrives from the north\.", "move east"), + (0, "You exit to the east\.", ""), + (1, "exits to the east\.", "move east"), + (0, "arrives from the west\.", "move west"), + (0, "You exit to the west\.", ""), + (1, "exits to the west\.", "move west"), + (0, "arrives from the east\.", "move up"), + (0, "You exit upward\.", ""), + (1, "exits upward\.", "move up"), + (0, "arrives from below\.", "move down"), + (0, "You exit downward\.", ""), + (1, "exits downward\.", "move down"), + (0, "arrives from above\.", ""), +) - # Delete account 0 - (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_actor_disappears = ( + (1, "> ", "quit"), + (0, "You suddenly wonder where .* went\.", ""), +) - # Delete account 1 +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"), @@ -97,29 +132,87 @@ dialogue = ( (1, "Disconnecting...", ""), ) -captures = ["", ""] -lusers = [telnetlib.Telnet(), telnetlib.Telnet()] +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_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:", ""), +) + +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_chat_mode, "chat mode"), + (test_movement, "movement"), + (test_actor_disappears, "actor spontaneous disappearance"), + (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_log, "show log"), +) + +captures = ["", "", ""] +lusers = [telnetlib.Telnet(), telnetlib.Telnet(), telnetlib.Telnet()] success = True +start = time.time() 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") - 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 +for test, description in dialogue: + print("\nTesting %s..." % description) + test_start = time.time() + 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\n\n" + "Check the end of capture_%s.log for received data." + % (conversant, question, conversant)) + 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 + if not success: break - print("luser%s sending: %s" % (conversant, answer)) - lusers[conversant].write(("%s\r\n" % answer).encode("utf-8")) - captures[conversant] += "%s\r\n" % answer + print("Completed in %.3f seconds." % (time.time() - test_start)) +duration = time.time() - start +print("") for conversant in range(len(captures)): try: captures[conversant] += lusers[ @@ -127,8 +220,14 @@ for conversant in range(len(captures)): except: pass lusers[conversant].close() - log = open("capture_%s.log" % conversant, "w") + logfile = "capture_%s.log" % conversant + print("Recording session %s as %s." % (conversant, logfile)) + log = open(logfile, "w") log.write(captures[conversant]) log.close() -if not success: +print("\nRan %s tests in %.3f seconds." % (len(dialogue), duration)) +if success: + print("SUCCESS") +else: + print("FAILURE") sys.exit(1)