]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Clean up the sqlite3 tests (GH-93056)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Sat, 21 May 2022 16:37:04 +0000 (09:37 -0700)
committerGitHub <noreply@github.com>
Sat, 21 May 2022 16:37:04 +0000 (09:37 -0700)
Remove helper managed_connect(). Use memory_database() or
contextlib.closing() + addCleanup(unlink) instead.
(cherry picked from commit e5d8dbdd304935dbd0631ee9605efb501332f792)

Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
Lib/test/test_sqlite3/test_dbapi.py
Lib/test/test_sqlite3/test_regression.py

index 07adbc878a8f0905b16e229ca27d3313257ff7ab..a7783f30663694dbded6fc7ef7c453c73386b04c 100644 (file)
@@ -36,18 +36,6 @@ from os import SEEK_SET, SEEK_CUR, SEEK_END
 from test.support.os_helper import TESTFN, TESTFN_UNDECODABLE, unlink, temp_dir, FakePath
 
 
-# Helper for tests using TESTFN
-@contextlib.contextmanager
-def managed_connect(*args, in_mem=False, **kwargs):
-    cx = sqlite.connect(*args, **kwargs)
-    try:
-        yield cx
-    finally:
-        cx.close()
-        if not in_mem:
-            unlink(TESTFN)
-
-
 # Helper for temporary memory databases
 def memory_database(*args, **kwargs):
     cx = sqlite.connect(":memory:", *args, **kwargs)
@@ -331,7 +319,7 @@ class ModuleTests(unittest.TestCase):
     @unittest.skipIf(sqlite.sqlite_version_info <= (3, 7, 16),
                      "Requires SQLite 3.7.16 or newer")
     def test_extended_error_code_on_exception(self):
-        with managed_connect(":memory:", in_mem=True) as con:
+        with memory_database() as con:
             with con:
                 con.execute("create table t(t integer check(t > 0))")
             errmsg = "constraint failed"
@@ -398,7 +386,7 @@ class ConnectionTests(unittest.TestCase):
     def test_failed_open(self):
         YOU_CANNOT_OPEN_THIS = "/foo/bar/bla/23534/mydb.db"
         with self.assertRaises(sqlite.OperationalError):
-            con = sqlite.connect(YOU_CANNOT_OPEN_THIS)
+            sqlite.connect(YOU_CANNOT_OPEN_THIS)
 
     def test_close(self):
         self.cx.close()
@@ -662,7 +650,9 @@ class OpenTests(unittest.TestCase):
         """ Checks that we can successfully connect to a database using an object that
             is PathLike, i.e. has __fspath__(). """
         path = FakePath(TESTFN)
-        with managed_connect(path) as cx:
+        self.addCleanup(unlink, path)
+        self.assertFalse(os.path.exists(path))
+        with contextlib.closing(sqlite.connect(path)) as cx:
             self.assertTrue(os.path.exists(path))
             cx.execute(self._sql)
 
@@ -672,23 +662,26 @@ class OpenTests(unittest.TestCase):
     def test_open_with_undecodable_path(self):
         path = TESTFN_UNDECODABLE
         self.addCleanup(unlink, path)
-        with managed_connect(path, in_mem=True) as cx:
+        self.assertFalse(os.path.exists(path))
+        with contextlib.closing(sqlite.connect(path)) as cx:
             self.assertTrue(os.path.exists(path))
             cx.execute(self._sql)
 
     def test_open_uri(self):
         path = TESTFN
+        self.addCleanup(unlink, path)
         uri = "file:" + urllib.parse.quote(os.fsencode(path))
         self.assertFalse(os.path.exists(path))
-        with managed_connect(uri, uri=True) as cx:
+        with contextlib.closing(sqlite.connect(uri, uri=True)) as cx:
             self.assertTrue(os.path.exists(path))
             cx.execute(self._sql)
 
     def test_open_unquoted_uri(self):
         path = TESTFN
+        self.addCleanup(unlink, path)
         uri = "file:" + path
         self.assertFalse(os.path.exists(path))
-        with managed_connect(uri, uri=True) as cx:
+        with contextlib.closing(sqlite.connect(uri, uri=True)) as cx:
             self.assertTrue(os.path.exists(path))
             cx.execute(self._sql)
 
@@ -704,7 +697,7 @@ class OpenTests(unittest.TestCase):
         sqlite.connect(path).close()
         self.assertTrue(os.path.exists(path))
         # Cannot modify new DB
-        with managed_connect(uri, uri=True) as cx:
+        with contextlib.closing(sqlite.connect(uri, uri=True)) as cx:
             with self.assertRaises(sqlite.OperationalError):
                 cx.execute(self._sql)
 
@@ -713,14 +706,12 @@ class OpenTests(unittest.TestCase):
     @unittest.skipUnless(TESTFN_UNDECODABLE, "only works if there are undecodable paths")
     def test_open_undecodable_uri(self):
         path = TESTFN_UNDECODABLE
+        self.addCleanup(unlink, path)
         uri = "file:" + urllib.parse.quote(path)
         self.assertFalse(os.path.exists(path))
-        try:
-            with managed_connect(uri, uri=True, in_mem=True) as cx:
-                self.assertTrue(os.path.exists(path))
-                cx.execute(self._sql)
-        finally:
-            unlink(path)
+        with contextlib.closing(sqlite.connect(uri, uri=True)) as cx:
+            self.assertTrue(os.path.exists(path))
+            cx.execute(self._sql)
 
     def test_factory_database_arg(self):
         def factory(database, *args, **kwargs):
@@ -731,12 +722,11 @@ class OpenTests(unittest.TestCase):
         for database in (TESTFN, os.fsencode(TESTFN),
                          FakePath(TESTFN), FakePath(os.fsencode(TESTFN))):
             database_arg = None
-            with sqlite.connect(database, factory=factory):
-                pass
+            sqlite.connect(database, factory=factory).close()
             self.assertEqual(database_arg, database)
 
     def test_database_keyword(self):
-        with sqlite.connect(database=":memory:") as cx:
+        with contextlib.closing(sqlite.connect(database=":memory:")) as cx:
             self.assertEqual(type(cx), sqlite.Connection)
 
 
index 19bb84bf38a367a809ed3302d2977c42b1c084a6..0b727cecb0e8cb8a9ae0f3aa2ce1f0ce292583b8 100644 (file)
@@ -28,7 +28,7 @@ import functools
 
 from test import support
 from unittest.mock import patch
-from test.test_sqlite3.test_dbapi import memory_database, managed_connect, cx_limit
+from test.test_sqlite3.test_dbapi import memory_database, cx_limit
 
 
 class RegressionTests(unittest.TestCase):
@@ -422,7 +422,7 @@ class RegressionTests(unittest.TestCase):
         self.assertEqual(val, b'')
 
     def test_table_lock_cursor_replace_stmt(self):
-        with managed_connect(":memory:", in_mem=True) as con:
+        with memory_database() as con:
             cur = con.cursor()
             cur.execute("create table t(t)")
             cur.executemany("insert into t values(?)",
@@ -433,7 +433,7 @@ class RegressionTests(unittest.TestCase):
             con.commit()
 
     def test_table_lock_cursor_dealloc(self):
-        with managed_connect(":memory:", in_mem=True) as con:
+        with memory_database() as con:
             con.execute("create table t(t)")
             con.executemany("insert into t values(?)",
                             ((v,) for v in range(5)))
@@ -444,7 +444,7 @@ class RegressionTests(unittest.TestCase):
             con.commit()
 
     def test_table_lock_cursor_non_readonly_select(self):
-        with managed_connect(":memory:", in_mem=True) as con:
+        with memory_database() as con:
             con.execute("create table t(t)")
             con.executemany("insert into t values(?)",
                             ((v,) for v in range(5)))
@@ -459,7 +459,7 @@ class RegressionTests(unittest.TestCase):
             con.commit()
 
     def test_executescript_step_through_select(self):
-        with managed_connect(":memory:", in_mem=True) as con:
+        with memory_database() as con:
             values = [(v,) for v in range(5)]
             with con:
                 con.execute("create table t(t)")