|
1 """unit tests for selectors mechanism |
|
2 |
|
3 :organization: Logilab |
|
4 :copyright: 2001-2009 LOGILAB S.A. (Paris, FRANCE), all rights reserved. |
|
5 :contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr |
|
6 """ |
|
7 |
|
8 from logilab.common.testlib import TestCase, unittest_main |
|
9 |
|
10 from cubicweb.vregistry import Selector, AndSelector, OrSelector |
|
11 |
|
12 class _1_(Selector): |
|
13 def __call__(self, *args, **kwargs): |
|
14 return 1 |
|
15 |
|
16 class _0_(Selector): |
|
17 def __call__(self, *args, **kwargs): |
|
18 return 0 |
|
19 |
|
20 def _2_(*args, **kwargs): |
|
21 return 2 |
|
22 |
|
23 |
|
24 class SelectorsTC(TestCase): |
|
25 def test_basic_and(self): |
|
26 selector = _1_() & _1_() |
|
27 self.assertEquals(selector(None), 2) |
|
28 selector = _1_() & _0_() |
|
29 self.assertEquals(selector(None), 0) |
|
30 selector = _0_() & _1_() |
|
31 self.assertEquals(selector(None), 0) |
|
32 |
|
33 def test_basic_or(self): |
|
34 selector = _1_() | _1_() |
|
35 self.assertEquals(selector(None), 1) |
|
36 selector = _1_() | _0_() |
|
37 self.assertEquals(selector(None), 1) |
|
38 selector = _0_() | _1_() |
|
39 self.assertEquals(selector(None), 1) |
|
40 selector = _0_() | _0_() |
|
41 self.assertEquals(selector(None), 0) |
|
42 |
|
43 def test_selector_and_function(self): |
|
44 selector = _1_() & _2_ |
|
45 self.assertEquals(selector(None), 3) |
|
46 selector = _2_ & _1_() |
|
47 self.assertEquals(selector(None), 3) |
|
48 |
|
49 def test_three_and(self): |
|
50 selector = _1_() & _1_() & _1_() |
|
51 self.assertEquals(selector(None), 3) |
|
52 selector = _1_() & _0_() & _1_() |
|
53 self.assertEquals(selector(None), 0) |
|
54 selector = _0_() & _1_() & _1_() |
|
55 self.assertEquals(selector(None), 0) |
|
56 |
|
57 def test_three_or(self): |
|
58 selector = _1_() | _1_() | _1_() |
|
59 self.assertEquals(selector(None), 1) |
|
60 selector = _1_() | _0_() | _1_() |
|
61 self.assertEquals(selector(None), 1) |
|
62 selector = _0_() | _1_() | _1_() |
|
63 self.assertEquals(selector(None), 1) |
|
64 selector = _0_() | _0_() | _0_() |
|
65 self.assertEquals(selector(None), 0) |
|
66 |
|
67 def test_composition(self): |
|
68 selector = (_1_() & _1_()) & (_1_() & _1_()) |
|
69 self.failUnless(isinstance(selector, AndSelector)) |
|
70 self.assertEquals(len(selector.selectors), 4) |
|
71 self.assertEquals(selector(None), 4) |
|
72 selector = (_1_() & _0_()) | (_1_() & _1_()) |
|
73 self.failUnless(isinstance(selector, OrSelector)) |
|
74 self.assertEquals(len(selector.selectors), 2) |
|
75 self.assertEquals(selector(None), 2) |
|
76 |
|
77 |
|
78 if __name__ == '__main__': |
|
79 unittest_main() |
|
80 |