test/unittest_selectors.py
branchtls-sprint
changeset 630 66ff0b2f7d03
child 779 8510e14335e1
equal deleted inserted replaced
629:59b6542f5729 630:66ff0b2f7d03
       
     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