about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorhut <hut@lavabit.com>2010-02-13 16:52:54 +0100
committerhut <hut@lavabit.com>2010-03-09 14:40:20 +0100
commitc70c915b5ec5a03f0f5b8641322d5c60a1235df5 (patch)
treeab8c82674365461fcb3a372824a8952e697886e1
parent705eabe249d07dd569ea4c5b6af134a718a65db0 (diff)
downloadranger-c70c915b5ec5a03f0f5b8641322d5c60a1235df5.tar.gz
keyparser: added tree.copy() for deep copies
-rw-r--r--test/tc_newkeys.py25
1 files changed, 25 insertions, 0 deletions
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 <value>."""
 		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()