summaryrefslogtreecommitdiff
path: root/lib/python2.7/sqlite3/test/hooks.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/python2.7/sqlite3/test/hooks.py')
-rw-r--r--lib/python2.7/sqlite3/test/hooks.py207
1 files changed, 0 insertions, 207 deletions
diff --git a/lib/python2.7/sqlite3/test/hooks.py b/lib/python2.7/sqlite3/test/hooks.py
deleted file mode 100644
index 2bfae10..0000000
--- a/lib/python2.7/sqlite3/test/hooks.py
+++ /dev/null
@@ -1,207 +0,0 @@
-#-*- coding: ISO-8859-1 -*-
-# pysqlite2/test/hooks.py: tests for various SQLite-specific hooks
-#
-# Copyright (C) 2006-2007 Gerhard Häring <gh@ghaering.de>
-#
-# This file is part of pysqlite.
-#
-# This software is provided 'as-is', without any express or implied
-# warranty. In no event will the authors be held liable for any damages
-# arising from the use of this software.
-#
-# Permission is granted to anyone to use this software for any purpose,
-# including commercial applications, and to alter it and redistribute it
-# freely, subject to the following restrictions:
-#
-# 1. The origin of this software must not be misrepresented; you must not
-# claim that you wrote the original software. If you use this software
-# in a product, an acknowledgment in the product documentation would be
-# appreciated but is not required.
-# 2. Altered source versions must be plainly marked as such, and must not be
-# misrepresented as being the original software.
-# 3. This notice may not be removed or altered from any source distribution.
-
-import os, unittest
-import sqlite3 as sqlite
-
-class CollationTests(unittest.TestCase):
- def setUp(self):
- pass
-
- def tearDown(self):
- pass
-
- def CheckCreateCollationNotCallable(self):
- con = sqlite.connect(":memory:")
- try:
- con.create_collation("X", 42)
- self.fail("should have raised a TypeError")
- except TypeError, e:
- self.assertEqual(e.args[0], "parameter must be callable")
-
- def CheckCreateCollationNotAscii(self):
- con = sqlite.connect(":memory:")
- try:
- con.create_collation("collä", cmp)
- self.fail("should have raised a ProgrammingError")
- except sqlite.ProgrammingError, e:
- pass
-
- def CheckCollationIsUsed(self):
- if sqlite.version_info < (3, 2, 1): # old SQLite versions crash on this test
- return
- def mycoll(x, y):
- # reverse order
- return -cmp(x, y)
-
- con = sqlite.connect(":memory:")
- con.create_collation("mycoll", mycoll)
- sql = """
- select x from (
- select 'a' as x
- union
- select 'b' as x
- union
- select 'c' as x
- ) order by x collate mycoll
- """
- result = con.execute(sql).fetchall()
- if result[0][0] != "c" or result[1][0] != "b" or result[2][0] != "a":
- self.fail("the expected order was not returned")
-
- con.create_collation("mycoll", None)
- try:
- result = con.execute(sql).fetchall()
- self.fail("should have raised an OperationalError")
- except sqlite.OperationalError, e:
- self.assertEqual(e.args[0].lower(), "no such collation sequence: mycoll")
-
- def CheckCollationReturnsLargeInteger(self):
- def mycoll(x, y):
- # reverse order
- return -((x > y) - (x < y)) * 2**32
- con = sqlite.connect(":memory:")
- con.create_collation("mycoll", mycoll)
- sql = """
- select x from (
- select 'a' as x
- union
- select 'b' as x
- union
- select 'c' as x
- ) order by x collate mycoll
- """
- result = con.execute(sql).fetchall()
- self.assertEqual(result, [('c',), ('b',), ('a',)],
- msg="the expected order was not returned")
-
- def CheckCollationRegisterTwice(self):
- """
- Register two different collation functions under the same name.
- Verify that the last one is actually used.
- """
- con = sqlite.connect(":memory:")
- con.create_collation("mycoll", cmp)
- con.create_collation("mycoll", lambda x, y: -cmp(x, y))
- result = con.execute("""
- select x from (select 'a' as x union select 'b' as x) order by x collate mycoll
- """).fetchall()
- if result[0][0] != 'b' or result[1][0] != 'a':
- self.fail("wrong collation function is used")
-
- def CheckDeregisterCollation(self):
- """
- Register a collation, then deregister it. Make sure an error is raised if we try
- to use it.
- """
- con = sqlite.connect(":memory:")
- con.create_collation("mycoll", cmp)
- con.create_collation("mycoll", None)
- try:
- con.execute("select 'a' as x union select 'b' as x order by x collate mycoll")
- self.fail("should have raised an OperationalError")
- except sqlite.OperationalError, e:
- if not e.args[0].startswith("no such collation sequence"):
- self.fail("wrong OperationalError raised")
-
-class ProgressTests(unittest.TestCase):
- def CheckProgressHandlerUsed(self):
- """
- Test that the progress handler is invoked once it is set.
- """
- con = sqlite.connect(":memory:")
- progress_calls = []
- def progress():
- progress_calls.append(None)
- return 0
- con.set_progress_handler(progress, 1)
- con.execute("""
- create table foo(a, b)
- """)
- self.assertTrue(progress_calls)
-
-
- def CheckOpcodeCount(self):
- """
- Test that the opcode argument is respected.
- """
- con = sqlite.connect(":memory:")
- progress_calls = []
- def progress():
- progress_calls.append(None)
- return 0
- con.set_progress_handler(progress, 1)
- curs = con.cursor()
- curs.execute("""
- create table foo (a, b)
- """)
- first_count = len(progress_calls)
- progress_calls = []
- con.set_progress_handler(progress, 2)
- curs.execute("""
- create table bar (a, b)
- """)
- second_count = len(progress_calls)
- self.assertTrue(first_count > second_count)
-
- def CheckCancelOperation(self):
- """
- Test that returning a non-zero value stops the operation in progress.
- """
- con = sqlite.connect(":memory:")
- progress_calls = []
- def progress():
- progress_calls.append(None)
- return 1
- con.set_progress_handler(progress, 1)
- curs = con.cursor()
- self.assertRaises(
- sqlite.OperationalError,
- curs.execute,
- "create table bar (a, b)")
-
- def CheckClearHandler(self):
- """
- Test that setting the progress handler to None clears the previously set handler.
- """
- con = sqlite.connect(":memory:")
- action = []
- def progress():
- action.append(1)
- return 0
- con.set_progress_handler(progress, 1)
- con.set_progress_handler(None, 1)
- con.execute("select 1 union select 2 union select 3").fetchall()
- self.assertEqual(len(action), 0, "progress handler was not cleared")
-
-def suite():
- collation_suite = unittest.makeSuite(CollationTests, "Check")
- progress_suite = unittest.makeSuite(ProgressTests, "Check")
- return unittest.TestSuite((collation_suite, progress_suite))
-
-def test():
- runner = unittest.TextTestRunner()
- runner.run(suite())
-
-if __name__ == "__main__":
- test()