1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
|
#
# Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/)
# This module is free software, and you may redistribute it and/or modify
# under the same terms as Python, so long as this copyright message and
# disclaimer are retained in their original form.
#
# IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR
# DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING
# OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
# BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
# BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
# FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS"
# BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
# SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
#
# $Id$
import unittest
from roundup.hyperdb import DatabaseError
from db_test_base import DBTest, ROTest, config, SchemaTest, ClassicInitTest
from roundup.backends import get_backend, have_backend
class tsearch2Opener:
if have_backend('tsearch2'):
module = get_backend('tsearch2')
def setUp(self):
pass
def tearDown(self):
self.nuke_database()
def nuke_database(self):
# clear out the database - easiest way is to nuke and re-create it
self.module.db_nuke(config)
class tsearch2DBTest(tsearch2Opener, DBTest):
def setUp(self):
tsearch2Opener.setUp(self)
DBTest.setUp(self)
def tearDown(self):
DBTest.tearDown(self)
tsearch2Opener.tearDown(self)
def testFilteringIntervalSort(self):
# Tsearch2 sorts NULLs differently to other databases (others
# treat it as lower than real values, PG treats it as higher)
ae, filt = self.filteringSetup()
# ascending should sort None, 1:10, 1d
ae(filt(None, {}, ('+','foo'), (None,None)), ['4', '1', '2', '3'])
# descending should sort 1d, 1:10, None
ae(filt(None, {}, ('-','foo'), (None,None)), ['3', '2', '1', '4'])
def testTransactions(self):
# XXX: in its current form, this test doesn't make sense for tsearch2.
# It tests the transactions mechanism by counting the number of files
# in the FileStorage. As tsearch2 doesn't use the FileStorage, this
# fails. The test should probably be rewritten with some other way of
# checking rollbacks/commits.
pass
class tsearch2ROTest(tsearch2Opener, ROTest):
def setUp(self):
tsearch2Opener.setUp(self)
ROTest.setUp(self)
def tearDown(self):
ROTest.tearDown(self)
tsearch2Opener.tearDown(self)
class tsearch2SchemaTest(tsearch2Opener, SchemaTest):
def setUp(self):
tsearch2Opener.setUp(self)
SchemaTest.setUp(self)
def tearDown(self):
SchemaTest.tearDown(self)
tsearch2Opener.tearDown(self)
class tsearch2ClassicInitTest(tsearch2Opener, ClassicInitTest):
backend = 'tsearch2'
def setUp(self):
tsearch2Opener.setUp(self)
ClassicInitTest.setUp(self)
def tearDown(self):
ClassicInitTest.tearDown(self)
tsearch2Opener.tearDown(self)
from session_common import RDBMSTest
class tsearch2SessionTest(tsearch2Opener, RDBMSTest):
def setUp(self):
tsearch2Opener.setUp(self)
RDBMSTest.setUp(self)
def tearDown(self):
RDBMSTest.tearDown(self)
tsearch2Opener.tearDown(self)
def test_suite():
suite = unittest.TestSuite()
if not have_backend('tsearch2'):
print "Skipping tsearch2 tests"
return suite
# make sure we start with a clean slate
if tsearch2Opener.module.db_exists(config):
tsearch2Opener.module.db_nuke(config, 1)
# TODO: Check if we can run postgresql tests
print 'Including tsearch2 tests'
suite.addTest(unittest.makeSuite(tsearch2DBTest))
suite.addTest(unittest.makeSuite(tsearch2ROTest))
suite.addTest(unittest.makeSuite(tsearch2SchemaTest))
suite.addTest(unittest.makeSuite(tsearch2ClassicInitTest))
suite.addTest(unittest.makeSuite(tsearch2SessionTest))
return suite
# vim: set et sts=4 sw=4 :
|