From c70c915b5ec5a03f0f5b8641322d5c60a1235df5 Mon Sep 17 00:00:00 2001 From: hut Date: Sat, 13 Feb 2010 16:52:54 +0100 Subject: keyparser: added tree.copy() for deep copies --- test/tc_newkeys.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'test/tc_newkeys.py') diff --git a/test/tc_newkeys.py b/test/tc_newkeys.py index d29450d9..7bdbccad 100644 --- a/test/tc_newkeys.py +++ b/test/tc_newkeys.py @@ -241,6 +241,21 @@ class Tree(object): self.key = key self.parent = parent + def copy(self): + """Create a deep copy""" + def deep_copy_dict(dct): + dct = dct.copy() + for key, val in dct.items(): + if isinstance(val, dict): + dct[key] = deep_copy_dict(val) + return dct + newtree = Tree() + if isinstance(self._tree, dict): + newtree._tree = deep_copy_dict(self._tree) + else: + newtree._tree = self._tree + return newtree + def set(self, keys, value, force=True): """Sets the element at the end of the path to .""" if not isinstance(keys, (list, tuple)): @@ -603,5 +618,15 @@ class Test(PressTestCase): self.assertEqual(40, press('40jkhl')) + def test_tree_deep_copy(self): + t = Tree() + s = t.plow('abc') + s['d'] = "X" + u = t.copy() + self.assertEqual(t._tree, u._tree) + s = t.traverse('ab') + s['c'] = 'Y' + self.assertNotEqual(t._tree, u._tree) + if __name__ == '__main__': main() -- cgit 1.4.1-2-gfad0