1 """welcome the land of off-by-one. enjoy your stay!"""
2
3 import unittest
4 from grassyknoll.backend.lucene.HitsWrapper import HitsWrapper
5
8
10 return hits._HitsWrapper__cache
11
13
15 hits=wrapper([])
16 self.assertEqual(len(hits), 0)
17 self.assertRaises(IndexError, hits.__getitem__, 0)
18 self.assertRaises(IndexError, hits.__getitem__, 1)
19 self.assertEquals(hits[0:3], [])
20 self.assertEquals(hits[:3], [])
21 self.assertEquals(hits[3:], [])
22 self.assertRaises(StopIteration, iter(hits).next)
23
25 hits=wrapper(range(0, 10))
26
27 self.assertRaises(TypeError, lambda: hits['foo'])
28
29 for i in xrange(0, 10):
30 self.assertEquals(hits[i], i*10)
31 self.assertEquals(len(getCache(hits)), i+1)
32 self.assertEquals(getCache(hits), [j*10 for j in xrange(i+1)])
33
35 hits=wrapper(range(0, 10))
36
37 for i in xrange(0, 10, 2):
38 self.assertEquals(hits[i], i*10)
39 self.assertEquals(len(getCache(hits)), i+1)
40 self.assertEquals(getCache(hits), [j*10 for j in xrange(0, i+1)])
41
43 hits=wrapper(range(10))
44
45 self.assertRaises(IndexError, hits.__getitem__, -1)
46
47 self.assertRaises(IndexError, hits.__getitem__, slice(-5, -2, -1))
48 self.assertRaises(IndexError, hits.__getitem__, slice(None, None, -1))
49 self.assertRaises(IndexError, hits.__getitem__, slice(None, -2, None))
50 self.assertRaises(IndexError, hits.__getitem__, slice(-4, None, None))
51
53 hits=wrapper(range(0, 10))
54
55 self.assertEquals(hits[:3], [j*10 for j in xrange(3)])
56 self.assertEquals(getCache(hits), [j*10 for j in xrange(3)])
57
58 self.assertEquals(hits[:8], [j*10 for j in xrange(8)])
59 self.assertEquals(getCache(hits), [j*10 for j in xrange(8)])
60
61 self.assertEquals(hits[:5], [j*10 for j in xrange(5)])
62
63 self.assertEquals(getCache(hits), [j*10 for j in xrange(8)])
64
65 self.assertEquals(hits[:12], [j*10 for j in xrange(10)])
66 self.assertEquals(getCache(hits), [j*10 for j in xrange(10)])
67
69 hits=wrapper(range(0, 10))
70
71
72
73 self.assertEquals(hits[:3:2], [j*10 for j in xrange(0, 3, 2)])
74 self.assertEquals(getCache(hits), [j*10 for j in xrange(3)])
75
76 self.assertEquals(hits[:8:2], [j*10 for j in xrange(0, 8, 2)])
77 self.assertEquals(getCache(hits), [j*10 for j in xrange(8)])
78
79 self.assertEquals(hits[:5:2], [j*10 for j in xrange(0, 5, 2)])
80
81 self.assertEquals(getCache(hits), [j*10 for j in xrange(8)])
82
83 self.assertEquals(hits[:12:2], [j*10 for j in xrange(0, 10, 2)])
84 self.assertEquals(getCache(hits), [j*10 for j in xrange(10)])
85
87 hits=wrapper(range(0, 10))
88
89 self.assertEquals(hits[2:5], [j*10 for j in xrange(2,5)])
90 self.assertEquals(getCache(hits), [j*10 for j in xrange(5)])
91
92 self.assertEquals(hits[1:8:3], [j*10 for j in xrange(1,8,3)])
93 self.assertEquals(getCache(hits), [j*10 for j in xrange(8)])
94
95
96 self.assertEquals(hits[4:12:2], [j*10 for j in xrange(4, 10, 2)])
97 self.assertEquals(getCache(hits), [j*10 for j in xrange(10)])
98
100 hits=wrapper(range(0, 10))
101
102 self.assertEquals(hits[42:], [])
103
104 self.assertEquals(hits[3:], [j*10 for j in xrange(3, 10)])
105 self.assertEquals(getCache(hits), [j*10 for j in xrange(10)])
106
108 hits=wrapper(range(0, 10))
109
110 for i, h in enumerate(hits):
111 self.assertEquals(i*10, h)
112 self.assertEquals(getCache(hits), [j * 10 for j in xrange(i+1)])
113
115
116
117 hits=wrapper(range(0, 5))
118
119 i1=iter(hits)
120 i2=iter(hits)
121
122 self.assertEquals(i1.next(), 0)
123
124 self.assertEquals(i2.next(), 0)
125 self.assertEquals(getCache(hits), [j*10 for j in xrange(1)])
126
127 self.assertEquals(i1.next(), 10)
128 self.assertEquals(i1.next(), 20)
129 self.assertEquals(getCache(hits), [j*10 for j in xrange(3)])
130
131 self.assertEquals(i2.next(), 10)
132
133 self.assertEquals(i1.next(), 30)
134
135 self.assertEquals(i2.next(), 20)
136 self.assertEquals(i2.next(), 30)
137 self.assertEquals(i2.next(), 40)
138 self.assertEquals(getCache(hits), [j*10 for j in xrange(5)])
139
140 self.assertRaises(StopIteration, i2.next)
141
142 self.assertEquals(i1.next(), 40)
143 self.assertRaises(StopIteration, i1.next)
144
145 if __name__ == '__main__':
146 unittest.main()
147