[Checkins] SVN: zope.index/trunk/src/zope/index/text/tests/test_parsetree.py Finish 'eyeball' coverage for zope.index.text.parsetree module.

Tres Seaver tseaver at palladion.com
Wed Jun 10 22:50:08 EDT 2009


Log message for revision 100827:
  Finish 'eyeball' coverage for zope.index.text.parsetree module.

Changed:
  U   zope.index/trunk/src/zope/index/text/tests/test_parsetree.py

-=-
Modified: zope.index/trunk/src/zope/index/text/tests/test_parsetree.py
===================================================================
--- zope.index/trunk/src/zope/index/text/tests/test_parsetree.py	2009-06-11 01:03:32 UTC (rev 100826)
+++ zope.index/trunk/src/zope/index/text/tests/test_parsetree.py	2009-06-11 02:50:07 UTC (rev 100827)
@@ -50,6 +50,12 @@
         node = self._makeOne()
         self.assertEqual(repr(node), "ParseTreeNode([FV:XXX])")
 
+    def test___repr___subclass(self):
+        class Derived(self._getTargetClass()):
+            pass
+        node = Derived('XXX')
+        self.assertEqual(repr(node), "Derived('XXX')")
+
     def test_terms(self):
         node = self._makeOne()
         self.assertEqual(list(node.terms()), ['XXX'])
@@ -73,12 +79,8 @@
         node = self._makeOne()
         self.assertEqual(node.nodeType(), 'NOT')
 
-    def test___repr__(self):
-        node = self._makeOne()
-        self.assertEqual(repr(node), "NotNode([FV:XXX])")
-
     def test_terms(self):
-        node = self._makeOne()
+        node = self._makeOne(object())
         self.assertEqual(list(node.terms()), [])
 
     def test_executeQuery_raises(self):
@@ -86,8 +88,16 @@
         node = self._makeOne()
         self.assertRaises(QueryError, node.executeQuery, FauxIndex())
 
-class AndNodeTests(unittest.TestCase, ConformsToIQueryParseTree):
+class BucketMaker:
 
+    def _makeBucket(self, index, count, start=0):
+        bucket = index.family.IF.Bucket()
+        for i in range(start, count):
+            bucket[i] = count * 3.1415926
+        return bucket
+
+class AndNodeTests(unittest.TestCase, ConformsToIQueryParseTree, BucketMaker):
+
     def _getTargetClass(self):
         from zope.index.text.parsetree import AndNode
         return AndNode
@@ -101,21 +111,34 @@
         node = self._makeOne()
         self.assertEqual(node.nodeType(), 'AND')
 
-    def test___repr__(self):
-        node = self._makeOne()
-        self.assertEqual(repr(node), "AndNode([FV:XXX])")
-
     def test_executeQuery_no_results(self):
-        from zope.index.text.parsetree import QueryError
         node = self._makeOne([FauxSubnode('FOO', None)])
         result = node.executeQuery(FauxIndex())
         self.assertEqual(dict(result), {})
 
-class OrNodeTests(unittest.TestCase, ConformsToIQueryParseTree):
+    def test_executeQuery_w_positive_results(self):
+        index = FauxIndex()
+        node = self._makeOne(
+                    [FauxSubnode('FOO', self._makeBucket(index, 5)),
+                     FauxSubnode('FOO', self._makeBucket(index, 6)),
+                    ])
+        result = node.executeQuery(index)
+        self.assertEqual(sorted(result.keys()), [0, 1, 2, 3, 4])
 
+    def test_executeQuery_w_negative_results(self): # TODO
+        index = FauxIndex()
+        node = self._makeOne(
+                    [FauxSubnode('NOT', self._makeBucket(index, 5)),
+                     FauxSubnode('FOO', self._makeBucket(index, 6)),
+                    ])
+        result = node.executeQuery(index)
+        self.assertEqual(sorted(result.keys()), [5])
+
+class OrNodeTests(unittest.TestCase, ConformsToIQueryParseTree, BucketMaker):
+
     def _getTargetClass(self):
-        from zope.index.text.parsetree import AtomNode
-        return AtomNode
+        from zope.index.text.parsetree import OrNode
+        return OrNode
 
     def _makeOne(self, value=None):
         if value is None:
@@ -124,14 +147,24 @@
 
     def test_nodeType(self):
         node = self._makeOne()
-        self.assertEqual(node.nodeType(), 'ATOM')
+        self.assertEqual(node.nodeType(), 'OR')
 
-    def test___repr__(self):
-        node = self._makeOne()
-        self.assertEqual(repr(node), "AtomNode([FV:XXX])")
+    def test_executeQuery_no_results(self):
+        node = self._makeOne([FauxSubnode('FOO', None)])
+        result = node.executeQuery(FauxIndex())
+        self.assertEqual(dict(result), {})
 
-class AtomNodeTests(unittest.TestCase, ConformsToIQueryParseTree):
+    def test_executeQuery_w_results(self):
+        index = FauxIndex()
+        node = self._makeOne(
+                    [FauxSubnode('FOO', self._makeBucket(index, 5)),
+                     FauxSubnode('FOO', self._makeBucket(index, 6)),
+                    ])
+        result = node.executeQuery(index)
+        self.assertEqual(sorted(result.keys()), [0, 1, 2, 3, 4, 5])
 
+class AtomNodeTests(unittest.TestCase, ConformsToIQueryParseTree, BucketMaker):
+
     def _getTargetClass(self):
         from zope.index.text.parsetree import AtomNode
         return AtomNode
@@ -145,14 +178,17 @@
         node = self._makeOne()
         self.assertEqual(node.nodeType(), 'ATOM')
 
-    def test___repr__(self):
-        node = self._makeOne()
-        self.assertEqual(repr(node), "AtomNode('XXX')")
-
     def test_terms(self):
         node = self._makeOne()
         self.assertEqual(node.terms(), ['XXX'])
 
+    def test_executeQuery(self):
+        node = self._makeOne()
+        index = FauxIndex()
+        index.search = lambda term:  self._makeBucket(index, 5)
+        result = node.executeQuery(index)
+        self.assertEqual(sorted(result.keys()), [0, 1, 2, 3, 4])
+
 class PhraseNodeTests(unittest.TestCase, ConformsToIQueryParseTree):
 
     def _getTargetClass(self):
@@ -168,10 +204,6 @@
         node = self._makeOne()
         self.assertEqual(node.nodeType(), 'PHRASE')
 
-    def test___repr__(self):
-        node = self._makeOne()
-        self.assertEqual(repr(node), "PhraseNode('XXX YYY')")
-
     def test_executeQuery(self):
         _called_with = []
         def _search(*args, **kw):
@@ -198,10 +230,6 @@
         node = self._makeOne()
         self.assertEqual(node.nodeType(), 'GLOB')
 
-    def test___repr__(self):
-        node = self._makeOne()
-        self.assertEqual(repr(node), "GlobNode('XXX*')")
-
     def test_executeQuery(self):
         _called_with = []
         def _search(*args, **kw):
@@ -233,13 +261,18 @@
 
 
 class FauxSubnode:
-    def __init__(self, node_type, query_results):
+    def __init__(self, node_type, query_results, value=None):
         self._nodeType = node_type
         self._query_results = query_results
+        self._value = value
     def nodeType(self):
         return self._nodeType
     def executeQuery(self, index):
         return self._query_results
+    def getValue(self):
+        if self._value is not None:
+            return self._value
+        return self
 
 def test_suite():
     return unittest.TestSuite((



More information about the Checkins mailing list