diff test/test_config.py @ 8455:6d6f689d3701

fix: python < 3.12 returns ParsingError not RuntimeError; print exception RuntimeError added in 3.12. Support older configparser.ParsingError. Supporting older version also requires different test string for the two versions. Also use str(exception) rather than exception.args[0] for producing message to user. Include exception name in output.
author John Rouillard <rouilj@ieee.org>
date Mon, 22 Sep 2025 13:57:52 -0400
parents e91ff70e4563
children f7fadbac5856
line wrap: on
line diff
--- a/test/test_config.py	Sat Sep 20 16:49:38 2025 -0400
+++ b/test/test_config.py	Mon Sep 22 13:57:52 2025 -0400
@@ -1700,7 +1700,7 @@
         self.assertEqual(
             cm.exception.args[0].replace(r'\\','\\'),
             ('Error loading logging config from %s.\n\n'
-             "   Unknown level: 'DEBUF'\n\n"
+             "   ValueError: Unknown level: 'DEBUF'\n\n"
              'Inappropriate argument value (of correct type).\n' %
              log_config_filename)
         )
@@ -1718,16 +1718,31 @@
         # verify that logging was reset
         # default log config doesn't define handlers for roundup.http
         self.assertEqual(len(logging.getLogger('roundup.http').handlers), 0)
-        
-        self.assertEqual(
-            cm.exception.args[0].replace(r'\\','\\'),
-            ("Error loading logging config from %(filename)s.\n\n"
-             "   %(filename)s is invalid: Source contains parsing errors: "
-             "'%(filename)s'\n\t[line  9]: '=foo\\n'\n\n"
-             "Source contains parsing errors: '%(filename)s'\n"
-             "\t[line  9]: '=foo\\n' Unspecified run-time error.\n" %
-             {"filename": log_config_filename})
-        )
+
+        output = cm.exception.args[0].replace(r'\\','\\')
+
+        if sys.version_info >= (3, 12, 0):
+            expected = (
+                "Error loading logging config from %(filename)s.\n\n"
+                "   RuntimeError: %(filename)s is invalid: Source contains parsing errors: "
+                "'%(filename)s'\n\t[line  9]: '=foo\\n'\n\n"
+                "Source contains parsing errors: '%(filename)s'\n"
+                "\t[line  9]: '=foo\\n' Unspecified run-time error.\n" %
+                {"filename": log_config_filename})
+
+        else: # 3.7 <= x < 3.12.0
+
+            expected = (
+                "Error loading logging config from %(filename)s.\n\n"
+
+                "   ParsingError: Source contains parsing errors: "
+                "'%(filename)s'\n"
+                "\t[line  9]: '=foo\\n'\n\n"
+
+                "Raised when a configuration file does not follow legal "
+                "syntax.\n" % {"filename": log_config_filename})
+
+        self.assertEqual(output, expected)
         self.reset_logging()
         
         # handler = basic to handler = basi
@@ -1745,7 +1760,7 @@
         self.assertEqual(
             cm.exception.args[0].replace(r'\\','\\'),
             ("Error loading logging config from %(filename)s.\n\n"
-             "   basi\n\n"
+             "   KeyError: 'basi'\n\n"
              "Mapping key not found. No section found with this name.\n" %
              {"filename": log_config_filename})
         )
@@ -1767,7 +1782,7 @@
         self.assertEqual(
             cm.exception.args[0].replace(r'\\','\\'),
             ("Error loading logging config from %(filename)s.\n\n"
-             "   No module named 'SHAndler'\n\n"
+             "   ModuleNotFoundError: No module named 'SHAndler'\n\n"
              "name 'SHAndler' is not defined Module not found.\n" %
              {"filename": log_config_filename})
         )

Roundup Issue Tracker: http://roundup-tracker.org/