def testMutability_03(self): # Makes sure that stored branches are handled correctly p1 = TreeDict('root') p1.a = (13, (123, 32)) p1.b = 123 p1.c.a = 145 p1.c.b = "1231321321231321" p2 = TreeDict('node') p2.a = 432 p1.node = p2 self.assert_(p1.isMutable()) p1.freeze() self.assert_(p1.isMutable()) p2.freeze() self.assert_(not p1.isMutable())
def testBranchStructureFrozen_01(self): p = TreeDict() p.a = TreeDict(x = 1) p.freeze(structure_only = True) self.assertRaises(TypeError, lambda: p.attach(recursive = True))
def testBranchHasValuePropegationFlags_02(self): p = TreeDict() p.a = 1 p.freeze(values_only = True) p.makeBranch('b') self.assert_(p.b.valuesAreFrozen())
def testhashes_17_pythonkeys(self): p1 = TreeDict() p1.a.b = [123, 43] p1.freeze() def f(): return {p1 : 0} self.assertRaises(TypeError, f)
def testRetrieve_01_NonExistantBranchFromFrozenTree(self): p = TreeDict() p.a.b.c = 1 p.freeze() self.assert_(p.a.b.c == 1) self.assertRaises(AttributeError, lambda: p.a.d)
def testDangling_15_DanglingWhileValueFrozen_01(self): p = TreeDict() p.freeze(values_only = True) p.x = 1 p.b.x = 2 p.a.b.c.d = 3 p.a.b.c.e = 4
def testhashes_20b_infinite_recursion_raises_error__frozen(self): p = TreeDict() p.makeBranch("a") p.a.b.c = p.a p.freeze() self.assertRaises(RuntimeError, lambda: p.hash())
def testAttaching_12_propegatingFrozenFlags(self): p1 = TreeDict() p1.a.b = TreeDict() p1.freeze(values_only = True) p1.attach('c', TreeDict() ) self.assert_(p1.c.valuesAreFrozen())
def testDeletion_11_Frozen_StructureOnly(self): p = TreeDict() p.a.x = 1 p.freeze("a", structure_only=True) del p.a self.assert_("a" not in p)
def testDeletionPI_14_Frozen_ValuesOnly(self): p = TreeDict() p.a.x = 1 p.freeze('a', values_only = True) del p.a self.assert_('a' not in p)
def testDrySet_10_makeBranch_Frozen_ValuesOnly_01(self): p = TreeDict() p.b.a = 1 p.freeze(values_only = True) p_before = p.copy() self.assertRaises(TypeError, lambda: p.checkset("b.a", 2)) self.assert_(p_before == p)
def testDeletionPI_11_Frozen_StructureOnly(self): p = TreeDict() p.a.x = 1 p.freeze('a', structure_only = True) p.popitem('a') self.assert_('a' not in p)
def testDeletionPI_08_Frozen(self): p = TreeDict() p.a.x = 1 p.freeze('a') p.popitem('a') self.assert_('a' not in p)
def testDeletion_08_Frozen(self): p = TreeDict() p.a.x = 1 p.freeze('a') del p.a self.assert_('a' not in p)
def testDeletionPI_09_Frozen_StructureOnly(self): p = TreeDict() p.a.x = 1 p.freeze(structure_only = True) def f(): p.popitem('a') self.assertRaises(TypeError, f)
def testFreezingStructure_01(self): p = TreeDict() p.a = 1 p.freeze(structure_only = True) p.a = 2 self.assert_(p.a == 2) self.assertRaises(TypeError, lambda: p.set('b',1))
def testDeletionPI_07_Frozen(self): p = TreeDict() p.a.x = 1 p.freeze('a') def f(): p.popitem('a.x') self.assertRaises(TypeError, f)
def testDeletion_10_Frozen_StructureOnly(self): p = TreeDict() p.a.x = 1 p.freeze("a", structure_only=True) def f(): del p.a.x self.assertRaises(TypeError, f)
def testDeletion_07_Frozen(self): p = TreeDict() p.a.x = 1 p.freeze('a') def f(): del p.a.x self.assertRaises(TypeError, f)
def testUpdate_WithFreezing_ValuesOnly_06(self): p = TreeDict() p.a.b.c = 1 p.freeze(values_only=True) q = TreeDict() q.a.b = 2 self.assertRaises(TypeError, lambda: p.update(q))
def testDangling_08_Freezing_01(self): p = TreeDict() b = p.a.b p.freeze() def f(): b.v = 1 self.assertRaises(TypeError, f)
def testDangling_08_Freezing_02(self): p = TreeDict() b = p.a.b del p['a'] p.freeze() # Okay now as it's disconnected from b b.v = 1
def testRecursiveAttach_04_error_on_frozen(self): p = TreeDict() p.b = TreeDict(x = 1) p.freeze() self.assertRaises(TypeError, lambda: p.attach(recursive = True)) self.assert_(p.b.isRoot()) self.assert_(p.b not in p.branches()) self.assert_(p.size() == 1)
def testhashes_16_pythonkeys(self): p1 = TreeDict() p1.a.b = 123 def f(): return {p1 : 0} self.assertRaises(TypeError, f) p1.freeze() # Should work now d = {p1 : 0}
def testAttaching_09_frozen_2(self): p = TreeDict('p') p.b.c = 1 p.freeze() p2 = TreeDict() p2.attach(p, copy=True) self.assert_(p2.p.b.c == 1) self.assert_(not p2.p.isFrozen()) self.assert_(not p2.p.b.isFrozen()) self.assert_(not p2.isFrozen())
def testIterators_05_branches(self): p = TreeDict() items = [('a.v', 1), ('b', 2), ('c', 3), ('aa.b.c.d.e', 4)] p.set(**dict(items)) bl = [(k, p.get(k)) for k in ['a', 'aa']] p.freeze() self.assert_(set(p.itervalues(False, branch_mode = "only")) == set([v for k, v in bl])) self.assert_(set(p.iterkeys(False, branch_mode = "only")) == set([k for k, v in bl])) self.assert_(set(p.iteritems(False, branch_mode = "only")) == set(bl))
def resetAndInitGlobalParameterTree(): global __default_tree global __default_tree_finalized global __pmodule_branch_tree __pmodule_branch_tree = TreeDict() __pmodule_branch_tree.freeze(values_only = True) # disable value clobbering __default_tree = TreeDict("defaults") __default_tree["__defaultpresettree__"] = True __default_tree.freeze(values_only = True) __default_tree_finalized = False
def testDeletion_12_Frozen_ValuesOnly(self): p = TreeDict() p.x = 1 p.freeze(values_only = True) def f(): del p.x self.assertRaises(TypeError, f) self.assert_(p.x == 1)
def testDeletionPI_13_Frozen_ValuesOnly(self): p = TreeDict() p.a.x = 1 p.freeze('a', values_only = True) def f(): p.popitem('a.x') self.assertRaises(TypeError, f) self.assert_(p.a.x == 1)
def testAttaching_10_Atomic_02_noImplicitOverwrite(self): p = TreeDict() p.makeBranch('a') p.freeze() self.assert_('a' in p.keys(branch_mode = 'only', recursive=False)) self.assertRaises(TypeError, lambda: p.attach("a.b.c.d", TreeDict(x = 1), protect_structure=True)) self.assert_('a' in p.keys(branch_mode = 'only', recursive=False)) self.assert_(p.a.size() == 0)