X-Git-Url: https://mudpy.org/gitweb?p=mudpy.git;a=blobdiff_plain;f=bin%2Ftest;h=76cebe0fbae7081ef112df4fa667b700bd6d2b06;hp=480c7be252f93b74152c43c2cfd27e91a78e76bb;hb=4f56e519d6f937208ff91cf14c2e2741d9d64217;hpb=761af6ff61bb547f76c761acbe41d0ef11d51681 diff --git a/bin/test b/bin/test index 480c7be..76cebe0 100755 --- a/bin/test +++ b/bin/test @@ -1,33 +1,139 @@ #!/usr/bin/env python -# -*- coding: utf-8 -*- """Regression test script for the mudpy engine.""" -# Copyright (c) 2004-2013 Jeremy Stanley . Permission +# Copyright (c) 2004-2015 Jeremy Stanley . Permission # to use, copy, modify, and distribute this software is granted under # terms provided in the LICENSE file distributed with this software. -conversation = ( - (b"Identify yourself:", b"testuser"), - (b"Enter your choice:", b"n"), - (b"Enter a new password for \"testuser\":", b"Test123"), - (b"Enter the same new password again:", b"Test123"), - (b"What would you like to do?", b"c"), - (b"Pick a gender for your new avatar:", b"f"), - (b"Choose a name for her:", b"1"), - (b"What would you like to do?", b"a"), - (b"Whom would you like to awaken?", b""), - (b">", b"quit"), - (b"What would you like to do?", b"d"), - (b"Whom would you like to delete?", b""), - (b"What would you like to do?", b"p"), - (b"permanently delete your account?", b"y"), - (b"Disconnecting...", b""), +import sys +import telnetlib + +dialogue = ( + # Create account 0 + (0, "Identify yourself:", "luser0"), + (0, "Enter your choice:", "n"), + (0, "Enter a new password for \"luser0\":", "Test123"), + (0, "Enter the same new password again:", "Test123"), + (0, "What would you like to do\?", "c"), + (0, "Pick a birth gender for your new avatar:", "f"), + (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 + (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?", ""), + + # Actor appears from nowhere + (0, "You suddenly realize that .* is here\.", ""), + + # 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;"', ""), + + # Implicit punctuation + (0, '> ', "say Whatever"), + (0, 'You say, "Whatever."', ""), + (1, 'says, "Whatever."', ""), + + # 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."', ""), + + # Sentence capitalization + (0, "> ", "say this sentence should start with a capital T."), + (0, 'You say, "This sentence', ""), + (1, 'says, "This sentence', ""), + + # Actor disappears + (1, "> ", "quit"), + (0, "You suddenly wonder where .* went\.", ""), + + # Quit + (0, "> ", "quit"), + + # 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...", ""), + + # Delete account 1 + (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...", ""), ) -import telnetlib -mud = telnetlib.Telnet() -mud.open("::1", 6669) -for question, answer in conversation: - mud.read_until(b"%s " % question) - mud.write(b"%s\r\n" % answer) -mud.close() +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") + 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[ + conversant].read_very_eager().decode("utf-8") + except: + pass + lusers[conversant].close() + log = open("capture_%s.log" % conversant, "w") + log.write(captures[conversant]) + log.close() +if not success: + sys.exit(1)