From 94eb9e7a09b1edf0d4c600c4f3c1cc4e709af1c9 Mon Sep 17 00:00:00 2001
From: Jeremy Stanley <fungi@yuggoth.org>
Date: Sun, 1 Nov 2020 16:52:07 +0000
Subject: [PATCH] Switch the selftest dialogue to a normal dict

Starting with Python 3.6, dicts are implicitly ordered (albeit as a
side effect in 3.6, 3.7 is consistent with 3.6 and guarantees
ordering in interpreter versions from that point on). We no longer
need to use collections.OrderedDict for the selftest dialogue as a
result, so use a regular dict there now to simplify it.
---
 mudpy/tests/selftest.py | 105 ++++++++++++++++++++++--------------------------
 1 file changed, 49 insertions(+), 56 deletions(-)

diff --git a/mudpy/tests/selftest.py b/mudpy/tests/selftest.py
index bb19d33..c14baff 100644
--- a/mudpy/tests/selftest.py
+++ b/mudpy/tests/selftest.py
@@ -13,13 +13,6 @@ import time
 
 import yaml
 
-# TODO(fungi) Clean this up once Python 3.5 is no longer supported
-if sys.version < "3.6":
-    import collections
-    odict = collections.OrderedDict
-else:
-    odict = dict
-
 pidfile = "var/mudpy.pid"
 
 test_account0_setup = (
@@ -402,54 +395,54 @@ final_cleanup = (
     (2, r"Disconnecting\.\.\.", ""),
 )
 
-dialogue = odict((
-    (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_wrapping, "wrapping"),
-    (test_forbid_ansi_input, "raw escape input is filtered"),
-    (test_escape_macros, "replacement macros are escaped"),
-    (test_movement, "movement"),
-    (test_actor_disappears, "actor spontaneous disappearance"),
-    (test_abort_avatar_deletion, "abort avatar deletion"),
-    (test_avatar_creation_limit, "avatar creation limit"),
-    (test_avatar_deletion, "avatar deletion"),
-    (test_abort_account_deletion, "abort account deletion"),
-    (test_account_deletion, "account deletion"),
-    (test_admin_setup, "admin account setup"),
-    (test_preferences, "set and show preferences"),
-    (test_crlf_eol, "send crlf from the client as eol"),
-    (test_telnet_iac, "escape stray telnet iac bytes"),
-    (test_telnet_unknown_command, "strip unknown telnet command"),
-    (test_telnet_unknown_option, "log unknown telnet option"),
-    (test_admin_restriction, "restricted admin commands"),
-    (test_admin_help, "admin help"),
-    (test_help, "help command"),
-    (test_abbrev, "command abbreviation"),
-    (test_reload, "reload"),
-    (test_set_facet, "set facet"),
-    (test_set_refused, "refuse altering read-only element"),
-    (test_show_version, "show version and diagnostic info"),
-    (test_show_time, "show elapsed world clock increments"),
-    (test_show_files, "show a list of loaded files"),
-    (test_show_file, "show nodes from a specific file"),
-    (test_show_groups, "show groups"),
-    (test_show_group, "show group"),
-    (test_show_element, "show element"),
-    (test_evaluate, "show results of python expressions"),
-    (test_debug_restricted, "only admins can run debug commands"),
-    (test_debug_disabled, "debugging commands only in debug mode"),
-    (test_show_log, "show log"),
-    (test_custom_loglevel, "custom loglevel"),
-    (test_invalid_loglevel, "invalid loglevel"),
-    (test_log_no_errors, "no errors logged"),
-    (final_cleanup, "delete remaining accounts"),
-))
+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_wrapping: "wrapping",
+    test_forbid_ansi_input: "raw escape input is filtered",
+    test_escape_macros: "replacement macros are escaped",
+    test_movement: "movement",
+    test_actor_disappears: "actor spontaneous disappearance",
+    test_abort_avatar_deletion: "abort avatar deletion",
+    test_avatar_creation_limit: "avatar creation limit",
+    test_avatar_deletion: "avatar deletion",
+    test_abort_account_deletion: "abort account deletion",
+    test_account_deletion: "account deletion",
+    test_admin_setup: "admin account setup",
+    test_preferences: "set and show preferences",
+    test_crlf_eol: "send crlf from the client as eol",
+    test_telnet_iac: "escape stray telnet iac bytes",
+    test_telnet_unknown_command: "strip unknown telnet command",
+    test_telnet_unknown_option: "log unknown telnet option",
+    test_admin_restriction: "restricted admin commands",
+    test_admin_help: "admin help",
+    test_help: "help command",
+    test_abbrev: "command abbreviation",
+    test_reload: "reload",
+    test_set_facet: "set facet",
+    test_set_refused: "refuse altering read-only element",
+    test_show_version: "show version and diagnostic info",
+    test_show_time: "show elapsed world clock increments",
+    test_show_files: "show a list of loaded files",
+    test_show_file: "show nodes from a specific file",
+    test_show_groups: "show groups",
+    test_show_group: "show group",
+    test_show_element: "show element",
+    test_evaluate: "show results of python expressions",
+    test_debug_restricted: "only admins can run debug commands",
+    test_debug_disabled: "debugging commands only in debug mode",
+    test_show_log: "show log",
+    test_custom_loglevel: "custom loglevel",
+    test_invalid_loglevel: "invalid loglevel",
+    test_log_no_errors: "no errors logged",
+    final_cleanup: "delete remaining accounts",
+}
 
 debug_tests = (
     test_evaluate,
@@ -573,7 +566,7 @@ def main():
     for luser in lusers:
         luser.open("::1", 4000)
         luser.set_option_negotiation_callback(option_callback)
-    selected_dialogue = odict(dialogue)
+    selected_dialogue = dict(dialogue)
     if check_debug():
         for test in nondebug_tests:
             del selected_dialogue[test]
-- 
2.11.0