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)
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)