#! /usr/bin/env python
# -*- coding: iso-8859-1 -*-
#-----------------------------------------------------------------------------
# Modeling Framework: an Object-Relational Bridge for python
#
# Copyright (c) 2001-2004 Sbastien Bigaret <sbigaret@users.sourceforge.net>
# All rights reserved.
#
# This file is part of the Modeling Framework.
#
# This code is distributed under a "3-clause BSD"-style license;
# see the LICENSE file for details.
#-----------------------------------------------------------------------------
"""Tests for Qualifiers"""
import unittest
if __name__ == "__main__":
import utils, sys
utils.fixpath()
from Modeling import SortOrdering
from Modeling.KeyValueCoding import KeyValueCoding
# Classes for tests
from testPackages.AuthorBook.Writer import Writer
from testPackages.AuthorBook.Book import Book
## Tests begin here
class TestSortOrderings(unittest.TestCase):
def setUp(self):
self.john=Writer('John', 'Cleese', age=30, bookName='Flying Circus Diary')
self.jean=Writer('Jean', 'Gabin', age=70, bookName='Quai des brumes')
self.douglas=Writer('Douglas', 'Adams', age=12,bookName='Hitchhiker Guide')
self.victor=Writer('Victor', 'Hugo', age=143, bookName='Les Miserables')
self.robert=Writer('Robert', 'Hugo', age=45, bookName='Ma vie, mon oeuvre')
self.authors=(self.john, self.jean, self.douglas, self.victor, self.robert)
def test_01_simpleKeyPath(self):
"[SortOrdering] Tests with simple keyPath"
ageOrdering=SortOrdering.SortOrdering('age', SortOrdering.compareAscending)
authors_age=SortOrdering.sortedArrayUsingKeyOrderArray(self.authors,
(ageOrdering,))
self.failUnlessEqual(authors_age, [self.douglas, self.john, self.robert,
self.jean, self.victor])
nameOrdering=SortOrdering.SortOrdering('lastName', SortOrdering.compareCaseInsensitiveDescending)
authors_name=SortOrdering.sortedArrayUsingKeyOrderArray(self.authors,
(nameOrdering,))
self.failIf(authors_name[-3:]!=[self.jean, self.john, self.douglas])
#self.jean, self.victor])
nameAndAgeOrdering=(nameOrdering, ageOrdering)
authors_nameAge=SortOrdering.sortedArrayUsingKeyOrderArray(self.authors, nameAndAgeOrdering)
self.assertEqual(authors_nameAge,[self.robert, self.victor,
self.jean, self.john, self.douglas])
def test_02_compoundKeyPath(self):
"[SortOrdering] Tests with compound keyPath"
bookTitleOrdering=SortOrdering.SortOrdering('book.title',
SortOrdering.compareAscending)
sorted_authors=SortOrdering.sortedArrayUsingKeyOrderArray(self.authors, (bookTitleOrdering,))
self.failUnlessEqual(sorted_authors, [self.john, self.douglas, self.victor, self.robert, self.jean])
def test_03_sortOrderingsWithString(self):
"[SortOrdering] sortOrderingsWithString"
from Modeling.SortOrdering import sortOrderingsWithString
s=sortOrderingsWithString('name')
self.failUnless(len(s)==1)
self.assertEqual(s[0].key(), 'name')
self.assertEqual(s[0].operator(), SortOrdering.compareAscending)
s=sortOrderingsWithString('name desc, age asc')
self.failUnless(len(s)==2)
self.assertEqual(s[0].key(), 'name')
self.assertEqual(s[0].operator(), SortOrdering.compareDescending)
self.assertEqual(s[1].key(), 'age')
self.assertEqual(s[1].operator(), SortOrdering.compareAscending)
def test_04_multipleSort(self):
"[SortOrdering] "
from Modeling.SortOrdering import
import sortOrderingsWithString, sortedArrayUsingKeyOrderArray
name_age=sortOrderingsWithString('lastName, age desc')
authors_name_age=sortedArrayUsingKeyOrderArray(self.authors, name_age)
self.failUnlessEqual(authors_name_age, [self.douglas, self.john, self.jean,
self.victor, self.robert])
# Build the test suite
def test_suite():
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(TestSortOrderings, "test_"))
return suite
if __name__ == "__main__":
errs = utils.run_suite(test_suite())
sys.exit(errs and 1 or 0)
|