mirror of
https://github.com/python/cpython.git
synced 2025-07-29 22:24:49 +00:00
bpo-43553: Improve sqlite3
test coverage (GH-26886)
This commit is contained in:
parent
9049ea51ec
commit
2c1ae09764
4 changed files with 100 additions and 2 deletions
|
@ -21,11 +21,36 @@
|
|||
# misrepresented as being the original software.
|
||||
# 3. This notice may not be removed or altered from any source distribution.
|
||||
|
||||
import contextlib
|
||||
import functools
|
||||
import io
|
||||
import unittest
|
||||
import unittest.mock
|
||||
import gc
|
||||
import sqlite3 as sqlite
|
||||
|
||||
def with_tracebacks(strings):
|
||||
"""Convenience decorator for testing callback tracebacks."""
|
||||
strings.append('Traceback')
|
||||
|
||||
def decorator(func):
|
||||
@functools.wraps(func)
|
||||
def wrapper(self, *args, **kwargs):
|
||||
# First, run the test with traceback enabled.
|
||||
sqlite.enable_callback_tracebacks(True)
|
||||
buf = io.StringIO()
|
||||
with contextlib.redirect_stderr(buf):
|
||||
func(self, *args, **kwargs)
|
||||
tb = buf.getvalue()
|
||||
for s in strings:
|
||||
self.assertIn(s, tb)
|
||||
|
||||
# Then run the test with traceback disabled.
|
||||
sqlite.enable_callback_tracebacks(False)
|
||||
func(self, *args, **kwargs)
|
||||
return wrapper
|
||||
return decorator
|
||||
|
||||
def func_returntext():
|
||||
return "foo"
|
||||
def func_returnunicode():
|
||||
|
@ -228,6 +253,7 @@ class FunctionTests(unittest.TestCase):
|
|||
val = cur.fetchone()[0]
|
||||
self.assertEqual(val, 1<<31)
|
||||
|
||||
@with_tracebacks(['func_raiseexception', '5/0', 'ZeroDivisionError'])
|
||||
def test_func_exception(self):
|
||||
cur = self.con.cursor()
|
||||
with self.assertRaises(sqlite.OperationalError) as cm:
|
||||
|
@ -387,6 +413,7 @@ class AggregateTests(unittest.TestCase):
|
|||
val = cur.fetchone()[0]
|
||||
self.assertEqual(str(cm.exception), "user-defined aggregate's 'finalize' method raised error")
|
||||
|
||||
@with_tracebacks(['__init__', '5/0', 'ZeroDivisionError'])
|
||||
def test_aggr_exception_in_init(self):
|
||||
cur = self.con.cursor()
|
||||
with self.assertRaises(sqlite.OperationalError) as cm:
|
||||
|
@ -394,6 +421,7 @@ class AggregateTests(unittest.TestCase):
|
|||
val = cur.fetchone()[0]
|
||||
self.assertEqual(str(cm.exception), "user-defined aggregate's '__init__' method raised error")
|
||||
|
||||
@with_tracebacks(['step', '5/0', 'ZeroDivisionError'])
|
||||
def test_aggr_exception_in_step(self):
|
||||
cur = self.con.cursor()
|
||||
with self.assertRaises(sqlite.OperationalError) as cm:
|
||||
|
@ -401,6 +429,7 @@ class AggregateTests(unittest.TestCase):
|
|||
val = cur.fetchone()[0]
|
||||
self.assertEqual(str(cm.exception), "user-defined aggregate's 'step' method raised error")
|
||||
|
||||
@with_tracebacks(['finalize', '5/0', 'ZeroDivisionError'])
|
||||
def test_aggr_exception_in_finalize(self):
|
||||
cur = self.con.cursor()
|
||||
with self.assertRaises(sqlite.OperationalError) as cm:
|
||||
|
@ -502,6 +531,14 @@ class AuthorizerRaiseExceptionTests(AuthorizerTests):
|
|||
raise ValueError
|
||||
return sqlite.SQLITE_OK
|
||||
|
||||
@with_tracebacks(['authorizer_cb', 'ValueError'])
|
||||
def test_table_access(self):
|
||||
super().test_table_access()
|
||||
|
||||
@with_tracebacks(['authorizer_cb', 'ValueError'])
|
||||
def test_column_access(self):
|
||||
super().test_table_access()
|
||||
|
||||
class AuthorizerIllegalTypeTests(AuthorizerTests):
|
||||
@staticmethod
|
||||
def authorizer_cb(action, arg1, arg2, dbname, source):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue