]> git.ipfire.org Git - thirdparty/tornado.git/commitdiff
test: Streamline test configurations 3260/head
authorBen Darnell <ben@bendarnell.com>
Mon, 1 May 2023 21:10:27 +0000 (17:10 -0400)
committerBen Darnell <ben@bendarnell.com>
Mon, 1 May 2023 21:58:04 +0000 (17:58 -0400)
- LANG tests were no longer having the intended effect because C locales
  now default to utf8 instead of ascii. There's a new warning we can turn
  on with an env var instead. (after cleaing up some tests)
- The tox install_command issue was reverted in tox 1.9
- Python now guarantees that __file__ is absolute
- Remove some obsolete warning manipulations

tornado/test/autoreload_test.py
tornado/test/log_test.py
tornado/test/runtests.py
tornado/test/web_test.py
tox.ini

index be481e106f055d6a771b3fe328e02a16fce9a6ac..fff602811b32111ca0794eb13c92e3e20bcbd08d 100644 (file)
@@ -43,8 +43,12 @@ if 'TESTAPP_STARTED' not in os.environ:
 
         # Create temporary test application
         os.mkdir(os.path.join(self.path, "testapp"))
-        open(os.path.join(self.path, "testapp/__init__.py"), "w").close()
-        with open(os.path.join(self.path, "testapp/__main__.py"), "w") as f:
+        open(
+            os.path.join(self.path, "testapp/__init__.py"), "w", encoding="utf-8"
+        ).close()
+        with open(
+            os.path.join(self.path, "testapp/__main__.py"), "w", encoding="utf-8"
+        ) as f:
             f.write(main)
 
         # Make sure the tornado module under test is available to the test
@@ -59,6 +63,7 @@ if 'TESTAPP_STARTED' not in os.environ:
             cwd=self.path,
             env=dict(os.environ, PYTHONPATH=pythonpath),
             universal_newlines=True,
+            encoding="utf-8",
         )
         out = p.communicate()[0]
         self.assertEqual(out, "Starting\nStarting\n")
@@ -94,9 +99,9 @@ else:
         # Create temporary test application
         os.mkdir(os.path.join(self.path, "testapp"))
         init_file = os.path.join(self.path, "testapp", "__init__.py")
-        open(init_file, "w").close()
+        open(init_file, "w", encoding="utf-8").close()
         main_file = os.path.join(self.path, "testapp", "__main__.py")
-        with open(main_file, "w") as f:
+        with open(main_file, "w", encoding="utf-8") as f:
             f.write(main)
 
         # Make sure the tornado module under test is available to the test
@@ -111,6 +116,7 @@ else:
             cwd=self.path,
             env=dict(os.environ, PYTHONPATH=pythonpath),
             universal_newlines=True,
+            encoding="utf-8",
         )
 
         # This timeout needs to be fairly generous for pypy due to jit
index 9130ae7e8d8748c7a19963dccb46a3d2b4b9c5f8..fec4c389e21465f15fe417b6953a60d984064704 100644 (file)
@@ -66,11 +66,7 @@ class LogFormatterTest(unittest.TestCase):
         os.rmdir(self.tempdir)
 
     def make_handler(self, filename):
-        # Base case: default setup without explicit encoding.
-        # In python 2, supports arbitrary byte strings and unicode objects
-        # that contain only ascii.  In python 3, supports ascii-only unicode
-        # strings (but byte strings will be repr'd automatically).
-        return logging.FileHandler(filename)
+        return logging.FileHandler(filename, encoding="utf-8")
 
     def get_output(self):
         with open(self.filename, "rb") as f:
@@ -116,14 +112,6 @@ class LogFormatterTest(unittest.TestCase):
         # The traceback contains newlines, which should not have been escaped.
         self.assertNotIn(rb"\n", output)
 
-
-class UnicodeLogFormatterTest(LogFormatterTest):
-    def make_handler(self, filename):
-        # Adding an explicit encoding configuration allows non-ascii unicode
-        # strings in both python 2 and 3, without changing the behavior
-        # for byte strings.
-        return logging.FileHandler(filename, encoding="utf8")
-
     def test_unicode_logging(self):
         self.logger.error("\u00e9")
         self.assertEqual(self.get_output(), utf8("\u00e9"))
@@ -147,7 +135,7 @@ class EnablePrettyLoggingTest(unittest.TestCase):
             self.logger.handlers[0].flush()
             filenames = glob.glob(tmpdir + "/test_log*")
             self.assertEqual(1, len(filenames))
-            with open(filenames[0]) as f:
+            with open(filenames[0], encoding="utf-8") as f:
                 self.assertRegex(f.read(), r"^\[E [^]]*\] hello$")
         finally:
             for handler in self.logger.handlers:
@@ -167,7 +155,7 @@ class EnablePrettyLoggingTest(unittest.TestCase):
             self.logger.handlers[0].flush()
             filenames = glob.glob(tmpdir + "/test_log*")
             self.assertEqual(1, len(filenames))
-            with open(filenames[0]) as f:
+            with open(filenames[0], encoding="utf-8") as f:
                 self.assertRegex(f.read(), r"^\[E [^]]*\] hello$")
         finally:
             for handler in self.logger.handlers:
index 6075b1e2bd981a45fa6b902d9162ba36c5f1da72..58cecd383e0f417c734f8cb687fd54c7b404c52e 100644 (file)
@@ -128,37 +128,6 @@ def main():
     warnings.filterwarnings(
         "error", category=PendingDeprecationWarning, module=r"tornado\..*"
     )
-    # The unittest module is aggressive about deprecating redundant methods,
-    # leaving some without non-deprecated spellings that work on both
-    # 2.7 and 3.2
-    warnings.filterwarnings(
-        "ignore", category=DeprecationWarning, message="Please use assert.* instead"
-    )
-    warnings.filterwarnings(
-        "ignore",
-        category=PendingDeprecationWarning,
-        message="Please use assert.* instead",
-    )
-    # Twisted 15.0.0 triggers some warnings on py3 with -bb.
-    warnings.filterwarnings("ignore", category=BytesWarning, module=r"twisted\..*")
-    if (3,) < sys.version_info < (3, 6):
-        # Prior to 3.6, async ResourceWarnings were rather noisy
-        # and even
-        # `python3.4 -W error -c 'import asyncio; asyncio.get_event_loop()'`
-        # would generate a warning.
-        warnings.filterwarnings(
-            "ignore", category=ResourceWarning, module=r"asyncio\..*"
-        )
-    # This deprecation warning is introduced in Python 3.8 and is
-    # triggered by pycurl. Unforunately, because it is raised in the C
-    # layer it can't be filtered by module and we must match the
-    # message text instead (Tornado's C module uses PY_SSIZE_T_CLEAN
-    # so it's not at risk of running into this issue).
-    warnings.filterwarnings(
-        "ignore",
-        category=DeprecationWarning,
-        message="PY_SSIZE_T_CLEAN will be required",
-    )
 
     logging.getLogger("tornado.access").setLevel(logging.CRITICAL)
 
index c2d057c5389b8029d553244d7b8db8886e9b24c3..56900d9a00294903c0ad7980e772c96da794378d 100644 (file)
@@ -1271,7 +1271,7 @@ class StaticFileTest(WebTestCase):
         # to ``Range: bytes=0-`` :(
         self.assertEqual(response.code, 200)
         robots_file_path = os.path.join(self.static_dir, "robots.txt")
-        with open(robots_file_path) as f:
+        with open(robots_file_path, encoding="utf-8") as f:
             self.assertEqual(response.body, utf8(f.read()))
         self.assertEqual(response.headers.get("Content-Length"), "26")
         self.assertEqual(response.headers.get("Content-Range"), None)
@@ -1282,7 +1282,7 @@ class StaticFileTest(WebTestCase):
         )
         self.assertEqual(response.code, 200)
         robots_file_path = os.path.join(self.static_dir, "robots.txt")
-        with open(robots_file_path) as f:
+        with open(robots_file_path, encoding="utf-8") as f:
             self.assertEqual(response.body, utf8(f.read()))
         self.assertEqual(response.headers.get("Content-Length"), "26")
         self.assertEqual(response.headers.get("Content-Range"), None)
@@ -1293,7 +1293,7 @@ class StaticFileTest(WebTestCase):
         )
         self.assertEqual(response.code, 206)
         robots_file_path = os.path.join(self.static_dir, "robots.txt")
-        with open(robots_file_path) as f:
+        with open(robots_file_path, encoding="utf-8") as f:
             self.assertEqual(response.body, utf8(f.read()[1:]))
         self.assertEqual(response.headers.get("Content-Length"), "25")
         self.assertEqual(response.headers.get("Content-Range"), "bytes 1-25/26")
@@ -1320,7 +1320,7 @@ class StaticFileTest(WebTestCase):
         )
         self.assertEqual(response.code, 200)
         robots_file_path = os.path.join(self.static_dir, "robots.txt")
-        with open(robots_file_path) as f:
+        with open(robots_file_path, encoding="utf-8") as f:
             self.assertEqual(response.body, utf8(f.read()))
         self.assertEqual(response.headers.get("Content-Length"), "26")
         self.assertEqual(response.headers.get("Content-Range"), None)
diff --git a/tox.ini b/tox.ini
index f7b5bd384de7222c5fd85f272452c6bde6d751c7..73a14a7fd5c023c52dcce65fc8f5b277ae4c7721 100644 (file)
--- a/tox.ini
+++ b/tox.ini
@@ -47,7 +47,7 @@ deps =
 
 setenv =
        # Treat the extension as mandatory in testing (but not on pypy)
-       {py3,py38,py39,py310,py311}: TORNADO_EXTENSION=1
+       {py3,py38,py39,py310,py311,py312}: TORNADO_EXTENSION=1
        # CI workers are often overloaded and can cause our tests to exceed
        # the default timeout of 5s.
        ASYNC_TEST_TIMEOUT=25
@@ -60,7 +60,10 @@ setenv =
        # possible to set environment variables during that phase of
        # tox).
        {py3,py38,py39,py310,py311,pypy3}: PYTHONWARNINGS=error:::tornado
-
+       # Warn if we try to open a file with an unspecified encoding.
+       # (New in python 3.10, becomes obsolete when utf8 becomes the
+       # default in 3.15)
+       PYTHONWARNDEFAULTENCODING=1
 
 # Allow shell commands in tests
 allowlist_externals = sh
@@ -77,33 +80,17 @@ commands =
          # the trap of relying on an assertion's side effects or using
          # them for things that should be runtime errors.
          full: python -O -m tornado.test
-         # In python 3, opening files in text mode uses a
-         # system-dependent encoding by default.  Run the tests with "C"
-         # (ascii) and "utf-8" locales to ensure we don't have hidden
-         # dependencies on this setting.
-         full: sh -c 'LANG=C python -m tornado.test'
-         full: sh -c 'LANG=en_US.utf-8 python -m tornado.test'
          # Note that httpclient_test is always run with both client
          # implementations; this flag controls which client all the
          # other tests use.
          full: python -m tornado.test --httpclient=tornado.curl_httpclient.CurlAsyncHTTPClient
          full: python -m tornado.test --resolver=tornado.platform.caresresolver.CaresResolver
-         # Run the tests once from the source directory to detect issues
-         # involving relative __file__ paths; see
-         # https://github.com/tornadoweb/tornado/issues/1780
-         full: sh -c '(cd {toxinidir} && unset TORNADO_EXTENSION && python -m tornado.test)'
-
 
 # python will import relative to the current working directory by default,
 # so cd into the tox working directory to avoid picking up the working
 # copy of the files (especially important for the speedups module).
 changedir = {toxworkdir}
 
-# tox 1.6 passes --pre to pip by default, which currently has problems
-# installing pycurl (https://github.com/pypa/pip/issues/1405).
-# Remove it (it's not a part of {opts}) to only install real releases.
-install_command = pip install {opts} {packages}
-
 [testenv:docs]
 changedir = docs
 # For some reason the extension fails to load in this configuration,