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_get(self):
        '''
        get().

        - The normal get() behavior applies to all types of superdicts.
        '''
        # Regular.
        sd = Superdict(a = 11, b = 22)
        aEq(sd.get('a'), 11)
        aEq(sd.get('z'), None)
        aEq(sd.get('update'), None)
        # Strict.
        sd = StrictSuperdict('ab', a = 11, b = 22)
        aEq(sd.get('a'), 11)
        aEq(sd.get('z'), None)
        aEq(sd.get('update'), None)
        # Relaxed.
        sd = RelaxedSuperdict('pop'.split(), a = 11, b = 22, pop = 333)
        aEq(sd.get('a'), 11)
        aEq(sd.get('z'), None)
        aEq(sd.get('update'), None)
        aEq(sd.get('pop'), 333)