Fix unhandled exception in show file command
[mudpy.git] / mudpy / tests / selftest.py
index 7251b90..a7fefc2 100644 (file)
@@ -2,6 +2,7 @@
 # to use, copy, modify, and distribute this software is granted under
 # terms provided in the LICENSE file distributed with this software.
 
 # to use, copy, modify, and distribute this software is granted under
 # terms provided in the LICENSE file distributed with this software.
 
+import os
 import re
 import sys
 import telnetlib
 import re
 import sys
 import telnetlib
@@ -10,7 +11,7 @@ import time
 test_account0_setup = (
     (0, "Identify yourself:", "luser0"),
     (0, "Enter your choice:", "n"),
 test_account0_setup = (
     (0, "Identify yourself:", "luser0"),
     (0, "Enter your choice:", "n"),
-    (0, "Enter a new password for \"luser0\":", "Test123"),
+    (0, 'Enter a new password for "luser0":', "Test123"),
     (0, "Enter the same new password again:", "Test123"),
     (0, r"What would you like to do\?", "c"),
     (0, "Pick a birth gender for your new avatar:", "f"),
     (0, "Enter the same new password again:", "Test123"),
     (0, r"What would you like to do\?", "c"),
     (0, "Pick a birth gender for your new avatar:", "f"),
@@ -22,7 +23,7 @@ test_account0_setup = (
 test_account1_setup = (
     (1, "Identify yourself:", "luser1"),
     (1, "Enter your choice:", "n"),
 test_account1_setup = (
     (1, "Identify yourself:", "luser1"),
     (1, "Enter your choice:", "n"),
-    (1, "Enter a new password for \"luser1\":", "Test456"),
+    (1, 'Enter a new password for "luser1":', "Test456"),
     (1, "Enter the same new password again:", "Test456"),
     (1, r"What would you like to do\?", "c"),
     (1, "Pick a birth gender for your new avatar:", "m"),
     (1, "Enter the same new password again:", "Test456"),
     (1, r"What would you like to do\?", "c"),
     (1, "Pick a birth gender for your new avatar:", "m"),
@@ -41,18 +42,18 @@ test_explicit_punctuation = (
     (1, r'exclaims, "Hello there\!"', "say And you are?"),
     (1, r'You ask, "And you are\?"', ""),
     (0, r'asks, "And you are\?"', "say I'm me, of course."),
     (1, r'exclaims, "Hello there\!"', "say And you are?"),
     (1, r'You ask, "And you are\?"', ""),
     (0, r'asks, "And you are\?"', "say I'm me, of course."),
-    (0, r'You say, "I\'m me, of course\."', ""),
-    (1, r'says, "I\'m me, of course\."', "say I wouldn't be so sure..."),
-    (1, r'You muse, "I wouldn\'t be so sure\.\.\."', ""),
-    (0, r'muses, "I wouldn\'t be so sure\.\.\."', "say You mean,"),
+    (0, r'''You say, "I'm me, of course\."''', ""),
+    (1, r'''says, "I'm me, of course\."''', "say I wouldn't be so sure..."),
+    (1, r'''You muse, "I wouldn't be so sure\.\.\."''', ""),
+    (0, r'''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, "You mean,"', ""),
     (1, 'begins, "You mean,"', "say I know-"),
     (1, 'You begin, "I know-"', ""),
     (0, 'begins, "I know-"', "say Don't interrupt:"),
-    (0, r'You begin, "Don\'t interrupt:"', ""),
-    (1, r'begins, "Don\'t interrupt:"', "say I wasn't interrupting;"),
-    (1, r'You begin, "I wasn\'t interrupting;"', ""),
-    (0, r'begins, "I wasn\'t interrupting;"', ""),
+    (0, r'''You begin, "Don't interrupt:"''', ""),
+    (1, r'''begins, "Don't interrupt:"''', "say I wasn't interrupting;"),
+    (1, r'''You begin, "I wasn't interrupting;"''', ""),
+    (0, r'''begins, "I wasn't interrupting;"''', ""),
 )
 
 test_implicit_punctuation = (
 )
 
 test_implicit_punctuation = (
@@ -63,20 +64,20 @@ test_implicit_punctuation = (
 
 test_typo_replacement = (
     (1, '> ', "say That's what i think."),
 
 test_typo_replacement = (
     (1, '> ', "say That's what i think."),
-    (1, r'You say, "That\'s what I think\."', ""),
-    (0, r'says, "That\'s what I think\."', "say You know what i'd like."),
-    (0, r'You say, "You know what I\'d like\."', ""),
-    (1, r'says, "You know what I\'d like\."', "say Then i'll tell you."),
-    (1, r'You say, "Then I\'ll tell you\."', ""),
-    (0, r'says, "Then I\'ll tell you\."', "say Now i'm ready."),
-    (0, r'You say, "Now I\'m ready\."', ""),
-    (1, r'says, "Now I\'m ready\."', "say That's teh idea."),
-    (1, r'You say, "That\'s the idea\."', ""),
-    (0, r'says, "That\'s the idea\."', "say It's what theyre saying."),
-    (0, r'You say, "It\'s what they\'re saying\."', ""),
-    (1, r'says, "It\'s what they\'re saying\."', "say Well, youre right."),
-    (1, r'You say, "Well, you\'re right\."', ""),
-    (0, r'says, "Well, you\'re right\."', ""),
+    (1, r'''You say, "That's what I think\."''', ""),
+    (0, r'''says, "That's what I think\."''', "say You know what i'd like."),
+    (0, r'''You say, "You know what I'd like\."''', ""),
+    (1, r'''says, "You know what I'd like\."''', "say Then i'll tell you."),
+    (1, r'''You say, "Then I'll tell you\."''', ""),
+    (0, r'''says, "Then I'll tell you\."''', "say Now i'm ready."),
+    (0, r'''You say, "Now I'm ready\."''', ""),
+    (1, r'''says, "Now I'm ready\."''', "say That's teh idea."),
+    (1, r'''You say, "That's the idea\."''', ""),
+    (0, r'''says, "That's the idea\."''', "say It's what theyre saying."),
+    (0, r'''You say, "It's what they're saying\."''', ""),
+    (1, r'''says, "It's what they're saying\."''', "say Well, youre right."),
+    (1, r'''You say, "Well, you're right\."''', ""),
+    (0, r'''says, "Well, you're right\."''', ""),
 )
 
 test_sentence_capitalization = (
 )
 
 test_sentence_capitalization = (
@@ -133,7 +134,7 @@ test_account1_teardown = (
 test_admin_setup = (
     (2, "Identify yourself:", "admin"),
     (2, "Enter your choice:", "n"),
 test_admin_setup = (
     (2, "Identify yourself:", "admin"),
     (2, "Enter your choice:", "n"),
-    (2, "Enter a new password for \"admin\":", "Test789"),
+    (2, 'Enter a new password for "admin":', "Test789"),
     (2, "Enter the same new password again:", "Test789"),
     (2, r"What would you like to do\?", "c"),
     (2, "Pick a birth gender for your new avatar:", "m"),
     (2, "Enter the same new password again:", "Test789"),
     (2, r"What would you like to do\?", "c"),
     (2, "Pick a birth gender for your new avatar:", "m"),
@@ -154,11 +155,42 @@ test_admin_help = (
     (2, "This will save all active accounts", ""),
 )
 
     (2, "This will save all active accounts", ""),
 )
 
+test_reload = (
+    (2, "> ", "reload"),
+    (2, r"Reloading all code modules, configs and data\."
+        r".* User admin reloaded the world\.", ""),
+)
+
+test_set_facet = (
+    (2, "> ", "set actor:avatar:admin:0 gender female"),
+    (2, r'You have successfully \(re\)set the "gender" facet of element', ""),
+)
+
+test_set_refused = (
+    (2, "> ", "set mudpy.limit password_tries 10"),
+    (2, r'The "mudpy\.limit" element is kept in read-only file', ""),
+)
+
+test_show_files = (
+    (2, "> ", "show files"),
+    (2, r'These are the current files containing the universe:.*'
+        r'  \x1b\[31m\(rw\) \x1b\[32m/.*/account.yaml\x1b\[0m'
+        r' \x1b\[33m\[private\]\x1b\[0m.*> ', ""),
+)
+
+test_show_file = (
+    (2, "> ", "show file %s" %
+        os.path.join(os.getcwd(), "data/internal.yaml")),
+    (2, "These are the nodes in the.*file:.*internal:counters.*> ", ""),
+)
+
 test_show_element = (
 test_show_element = (
-    (2, "> ", "show element internal:counters"),
-    (2, r'These are the properties of the "internal:counters" element '
-        r'\(in.*data/internal\.yaml"\):.*   \x1b\[32melapsed: '
-        r'\x1b\[31m[0-9]+\x1b\[0m', ""),
+    (2, "> ", "show element mudpy.limit"),
+    (2, r'These are the properties of the "mudpy\.limit" element.*'
+        r'  \x1b\[32mpassword_tries: \x1b\[31m3.*> ',
+     "show element actor:avatar:admin:0"),
+    (2, r'These are the properties of the "actor:avatar:admin:0" element.*'
+        r'  \x1b\[32mgender: \x1b\[31mfemale.*> ', ""),
 )
 
 test_show_log = (
 )
 
 test_show_log = (
@@ -176,7 +208,7 @@ test_custom_loglevel = (
 
 test_invalid_loglevel = (
     (2, "> ", "set account:admin loglevel two"),
 
 test_invalid_loglevel = (
     (2, "> ", "set account:admin loglevel two"),
-    (2, r'Value "two" of type "<class \'str\'>" cannot be coerced .*> ', ""),
+    (2, r'''Value "two" of type "<class 'str'>" cannot be coerced .*> ''', ""),
 )
 
 test_log_no_errors = (
 )
 
 test_log_no_errors = (
@@ -199,6 +231,11 @@ dialogue = (
     (test_admin_setup, "admin account setup"),
     (test_admin_restriction, "restricted admin commands"),
     (test_admin_help, "admin help"),
     (test_admin_setup, "admin account setup"),
     (test_admin_restriction, "restricted admin commands"),
     (test_admin_help, "admin help"),
+    (test_reload, "reload"),
+    (test_set_facet, "set facet"),
+    (test_set_refused, "refuse altering read-only element"),
+    (test_show_files, "show a list of loaded files"),
+    (test_show_file, "show nodes from a specific file"),
     (test_show_element, "show element"),
     (test_show_log, "show log"),
     (test_custom_loglevel, "custom loglevel"),
     (test_show_element, "show element"),
     (test_show_log, "show log"),
     (test_custom_loglevel, "custom loglevel"),
@@ -213,7 +250,7 @@ def main():
     success = True
     start = time.time()
     for luser in lusers:
     success = True
     start = time.time()
     for luser in lusers:
-        luser.open("::1", 6669)
+        luser.open("::1", 4000)
     for test, description in dialogue:
         print("\nTesting %s..." % description)
         test_start = time.time()
     for test, description in dialogue:
         print("\nTesting %s..." % description)
         test_start = time.time()