[Zope-CVS] CVS: Packages/pypes/pypes/tests - test_query.py:1.1
runtests.py:1.6
Casey Duncan
casey at zope.com
Tue Mar 30 23:58:10 EST 2004
Update of /cvs-repository/Packages/pypes/pypes/tests
In directory cvs.zope.org:/tmp/cvs-serv9981/tests
Modified Files:
runtests.py
Added Files:
test_query.py
Log Message:
Add basic scan and sort query primitives w/tests
=== Added File Packages/pypes/pypes/tests/test_query.py ===
##############################################################################
#
# Copyright (c) 2004 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.0 (ZPL). A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
#
##############################################################################
"""Query tests
$Id: test_query.py,v 1.1 2004/03/31 04:58:09 caseman Exp $"""
import unittest
from sets import Set
from zope.interface import implements
from zope.interface.verify import verifyObject
from persistent import Persistent
from pypes.interfaces import IExpression
from pypes.tests.common import sort, PypesTestCase, TestClass
class DummyExpr:
implements(IExpression)
def __init__(self, func, names=[]):
self._func = func
self._names = Set(names)
def names(self):
return self._names
def freeNames(self, free_names=[]):
return self._names
def freeOperands(self, free_names=[]):
return []
def optimize(self, free_names=[]):
pass
def __call__(self, *args, **kw):
return self._func(*args, **kw)
class TestScanner(unittest.TestCase):
def setUp(self):
self.foos = [TestClass(foo=i) for i in range(10)]
self.bars = [TestClass(bar=chr(i+65)) for i in range(26)]
def test_scan_one_input(self):
from pypes.query import scan
rows = [row.copy() for row in scan(foo=self.foos)]
for foo, row in zip(self.foos, rows):
self.assertEqual(len(row), 1)
self.failUnless(row['foo'] is foo)
def test_scan_one_self_named_input(self):
from pypes.query import scan
from UserList import UserList
foos = UserList(self.foos)
foos.__name__ = 'yahoozie'
rows = [row.copy() for row in scan(foos)]
for foo, row in zip(self.foos, rows):
self.assertEqual(len(row), 1)
self.failUnless(row['yahoozie'] is foo)
def test_scan_unnamed_fails(self):
from pypes.query import scan
from pypes.exceptions import PypesQueryInputError
rows = scan(self.foos)
self.assertRaises(PypesQueryInputError, list, rows)
def test_scan_with_dupe_names_fails(self):
from pypes.query import scan
from pypes.exceptions import PypesQueryInputError
from UserList import UserList
foos = UserList(self.foos)
foos.__name__ = 'johndoe'
bars = UserList(self.bars)
bars.__name__ = 'johndoe'
rows = scan(foos, bars)
self.assertRaises(PypesQueryInputError, list, rows)
rows = scan(bars, johndoe=foos)
self.assertRaises(PypesQueryInputError, list, rows)
def test_scan_multiple_inputs(self):
from sets import Set
from pypes.query import scan
rows = [row.copy() for row in scan(foo=self.foos, bar=self.bars)]
self.assertEqual(len(rows), len(self.foos) * len(self.bars))
expected = [{'foo':foo, 'bar':bar}
for foo in self.foos for bar in self.bars]
self.assertEqual(sort(rows), sort(expected))
def test_scan_multiple_self_named_inputs(self):
from sets import Set
from pypes.query import scan
from UserList import UserList
foos = UserList(self.foos)
foos.__name__ = 'yup'
bars = UserList(self.bars)
bars.__name__ = 'nope'
rows = [row.copy() for row in scan(foos, bars)]
self.assertEqual(len(rows), len(self.foos) * len(self.bars))
expected = [{'yup':foo, 'nope':bar}
for foo in self.foos for bar in self.bars]
self.assertEqual(sort(rows), sort(expected))
class TestSort(unittest.TestCase):
def setUp(self):
self.ordered = [TestClass(foo=i) for i in range(10)]
scrambled = []
for i in range(5):
scrambled.insert(-1, self.ordered[i])
scrambled.insert(1, self.ordered[9-i])
self.scrambled = scrambled
def test_sort_simple(self):
from pypes.query import sort
sorted = list(sort(self.scrambled, lambda x: x.foo))
self.assertEqual(sorted, self.ordered)
def test_sort_descending(self):
from pypes.query import sort, descending
sorted = list(sort(self.scrambled, lambda x: x.foo, descending))
self.ordered.reverse()
self.assertEqual(sorted, self.ordered)
def test_sort_limit_ascending(self):
from pypes.query import sort
sorted = list(sort(self.scrambled, lambda x: x.foo, limit=3))
self.assertEqual(sorted, self.ordered[:3])
def test_sort_limit_descending(self):
from pypes.query import sort, descending
sorted = list(
sort(self.scrambled, lambda x: x.foo, descending, limit=3))
self.ordered.reverse()
self.assertEqual(sorted, self.ordered[:3])
if __name__ == '__main__':
unittest.main()
=== Packages/pypes/pypes/tests/runtests.py 1.5 => 1.6 ===
--- Packages/pypes/pypes/tests/runtests.py:1.5 Sun Mar 7 05:09:13 2004
+++ Packages/pypes/pypes/tests/runtests.py Tue Mar 30 23:58:09 2004
@@ -11,6 +11,7 @@
from test_graph import *
from test_expression import *
from test_extent import *
+from test_query import *
from test_util import *
if __name__ == '__main__':
More information about the Zope-CVS
mailing list