#!/usr/bin/env python
-# -*- coding: utf-8 -*-
"""Regression test script for the mudpy engine."""
-# Copyright (c) 2004-2013 Jeremy Stanley <fungi@yuggoth.org>. Permission
+# Copyright (c) 2004-2015 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.
-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."', ""),
+
+ # 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)