[Zope-Checkins] CVS: Zope3/lib/python/Zope/App/OFS/Container/Find/tests - __init__.py:1.2 testFind.py:1.2
Jim Fulton
jim@zope.com
Mon, 10 Jun 2002 19:28:26 -0400
Update of /cvs-repository/Zope3/lib/python/Zope/App/OFS/Container/Find/tests
In directory cvs.zope.org:/tmp/cvs-serv17445/lib/python/Zope/App/OFS/Container/Find/tests
Added Files:
__init__.py testFind.py
Log Message:
Merged Zope-3x-branch into newly forked Zope3 CVS Tree.
=== Zope3/lib/python/Zope/App/OFS/Container/Find/tests/__init__.py 1.1 => 1.2 ===
=== Zope3/lib/python/Zope/App/OFS/Container/Find/tests/testFind.py 1.1 => 1.2 ===
+#
+# Copyright (c) 2001, 2002 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.
+#
+##############################################################################
+"""
+
+Revision information:
+$Id$
+"""
+
+from unittest import TestCase, TestSuite, main, makeSuite
+from Zope.App.OFS.Container.IContainer import IReadContainer
+from Zope.App.OFS.Container.Find.IFind import IObjectFindFilter
+from Zope.App.OFS.Container.Find.FindAdapter\
+ import FindAdapter, SimpleIdFindFilter
+
+class FakeContainer:
+ __implements__ = IReadContainer
+
+ def __init__(self, id, objects):
+ self._id = id
+ self._objects = objects
+
+ def keys(self):
+ return [object._id for object in self._objects]
+
+ def values(self):
+ return self._objects
+
+ def items(self):
+ return [(object._id, object) for object in self._objects]
+
+ def __getitem__(self, id):
+ for object in self._objects:
+ if object._id == id:
+ return object
+ raise KeyError, "Could not find %s" % id
+
+ def get(self, id, default=None):
+ for object in self._objects:
+ if object._id == id:
+ return object
+
+ return default
+
+ def __contains__(self, id):
+ for object in self._objects:
+ if object.id == id:
+ return 1
+ return 0
+
+ def __len__(self):
+ return len(self._objects)
+
+class TestObjectFindFilter(object):
+ __implements__ = IObjectFindFilter
+
+ def __init__(self, count):
+ self._count = count
+
+ def matches(self, object):
+ if IReadContainer.isImplementedBy(object):
+ return len(object) == self._count
+ else:
+ return 0
+
+class Test(TestCase):
+ def test_idFind(self):
+ alpha = FakeContainer('alpha', [])
+ delta = FakeContainer('delta', [])
+ beta = FakeContainer('beta', [delta])
+ gamma = FakeContainer('gamma', [])
+ tree = FakeContainer(
+ 'tree',
+ [alpha, beta, gamma])
+ find = FindAdapter(tree)
+ # some simple searches
+ result = find.find([SimpleIdFindFilter(['beta'])])
+ self.assertEquals([beta], result)
+ result = find.find([SimpleIdFindFilter(['gamma'])])
+ self.assertEquals([gamma], result)
+ result = find.find([SimpleIdFindFilter(['delta'])])
+ self.assertEquals([delta], result)
+ # we should not find the container we search on
+ result = find.find([SimpleIdFindFilter(['tree'])])
+ self.assertEquals([], result)
+ # search for multiple ids
+ result = find.find([SimpleIdFindFilter(['alpha', 'beta'])])
+ self.assertEquals([alpha, beta], result)
+ result = find.find([SimpleIdFindFilter(['beta', 'delta'])])
+ self.assertEquals([beta, delta], result)
+ # search without any filters, find everything
+ result = find.find([])
+ self.assertEquals([alpha, beta, delta, gamma], result)
+ # search for something that doesn't exist
+ result = find.find([SimpleIdFindFilter(['foo'])])
+ self.assertEquals([], result)
+ # find for something that has two ids at the same time,
+ # can't ever be the case
+ result = find.find([SimpleIdFindFilter(['alpha']),
+ SimpleIdFindFilter(['beta'])])
+ self.assertEquals([], result)
+
+ def test_objectFind(self):
+ alpha = FakeContainer('alpha', [])
+ delta = FakeContainer('delta', [])
+ beta = FakeContainer('beta', [delta])
+ gamma = FakeContainer('gamma', [])
+ tree = FakeContainer(
+ 'tree',
+ [alpha, beta, gamma])
+ find = FindAdapter(tree)
+ result = find.find(object_filters=[TestObjectFindFilter(0)])
+ self.assertEquals([alpha, delta, gamma], result)
+ result = find.find(object_filters=[TestObjectFindFilter(1)])
+ self.assertEquals([beta], result)
+ result = find.find(object_filters=[TestObjectFindFilter(2)])
+ self.assertEquals([], result)
+
+ def test_combinedFind(self):
+ alpha = FakeContainer('alpha', [])
+ delta = FakeContainer('delta', [])
+ beta = FakeContainer('beta', [delta])
+ gamma = FakeContainer('gamma', [])
+ tree = FakeContainer(
+ 'tree',
+ [alpha, beta, gamma])
+ find = FindAdapter(tree)
+ result = find.find(id_filters=[SimpleIdFindFilter(['alpha'])],
+ object_filters=[TestObjectFindFilter(0)])
+ self.assertEquals([alpha], result)
+
+ result = find.find(id_filters=[SimpleIdFindFilter(['alpha'])],
+ object_filters=[TestObjectFindFilter(1)])
+ self.assertEquals([], result)
+
+def test_suite():
+ return TestSuite((
+ makeSuite(Test),
+ ))
+
+if __name__=='__main__':
+ main(defaultTest='test_suite')