Example #1
0
    def test_pop(self):
        '''
        pop().

        - The normal pop() behavior applies to all types of superdicts.
        - Calls to pop() should remove the attr and the key.
        '''
        # Superdict:
        sd = Superdict(a = 11, b = 22)
        # - regular attribute.
        aEq(sd.pop('a'), 11)
        aEq(sd.get('a'), None)
        aEq(getattr(sd, 'a', None), None)
        aEq(sd.pop('z', 777), 777)
        # - protected attribute.
        sd.pop = 33
        aEq(sd.pop('pop'), 33)
        aEq(sd.get('pop'), None)
        self.assertIsInstance(getattr(sd, 'pop', None), types.MethodType)
        # - attributes that do not exist.
        aEq(sd.pop('update', 1234), 1234)
        with aRaz(KERR): sd.pop('update')
        with aRaz(KERR): sd.pop('z')
        # - wrong N of args.
        with aRaz(TERR): sd.pop()
        with aRaz(TERR): sd.pop('z', 1234, 567)

        # StrictSuperdict:
        sd = StrictSuperdict('ab', a = 11, b = 22)
        # - regular attribute.
        aEq(sd.pop('a'), 11)
        aEq(sd.pop('a', 99), 99)
        # - non-approved attribute.
        with aRaz(KERR): sd.pop('update')
        with aRaz(KERR): sd.pop('z')

        # RelaxedSuperdict:
        overridden = 'get setdefault'.split()
        sd = RelaxedSuperdict(overridden, a = 11, b = 22)
        # - regular attribute.
        aEq(sd.pop('a'), 11)
        aEq(sd.pop('a', 99), 99)
        # - overridden attribute.
        sd.setdefault = 1234
        aEq(sd.pop('setdefault'), 1234)
Example #2
0
 def test_setdefault(self):
     '''
     setdefault().
     '''
     sd = Superdict(a=11, b=22)
     # Basic attributes.
     a = sd.setdefault('a', 999)
     c = sd.setdefault('c', 888)
     aEq(sd.a, 11)
     aEq(a, 11)
     aEq(sd.c, 888)
     aEq(c, 888)
     # Protected attributes.
     p = sd.setdefault('pop', 999)
     aEq(sd['pop'], 999)
     aEq(p, 999)
     self.assertIsInstance(sd.pop, types.MethodType)
     # Wrong N args.
     with aRaz(TERR): sd.setdefault()
     with aRaz(TERR): sd.setdefault(1,2,3)