changeset 67:730c42743ba3

tests: cleanup on test finish so Windows doesn't complain about used files - chdir out of the test dir before rmtree - cache instances of hgclient and close them explicitly on tearDown before rmtree
author Idan Kamara <idankk86@gmail.com>
date Mon, 05 Sep 2011 20:51:29 +0300
parents 358fd5c84270
children a0328b08e028
files tests/__init__.py tests/common.py
diffstat 2 files changed, 21 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/tests/__init__.py	Tue Aug 23 21:57:40 2011 +0300
+++ b/tests/__init__.py	Mon Sep 05 20:51:29 2011 +0300
@@ -18,4 +18,5 @@
     os.environ["HGTMP"] = os.path.realpath(tmpdir)
 
 def tearDown(self):
+    os.chdir('..')
     shutil.rmtree(os.environ["HGTMP"])
--- a/tests/common.py	Tue Aug 23 21:57:40 2011 +0300
+++ b/tests/common.py	Mon Sep 05 20:51:29 2011 +0300
@@ -3,11 +3,24 @@
 
 import hglib
 
+def resultappender(list):
+    def decorator(f):
+        def decorated(*args, **kwargs):
+            result = f(*args, **kwargs)
+            list.append(result)
+            return result
+        return decorated
+    return decorator
+
 class basetest(unittest.TestCase):
     def setUp(self):
         self._testtmp = os.environ["TESTTMP"] = os.environ["HOME"] = \
             os.path.join(os.environ["HGTMP"], self.__class__.__name__)
 
+        self.clients = []
+        self._oldopen = hglib.open
+        hglib.open = resultappender(self.clients)(hglib.open)
+
         os.mkdir(self._testtmp)
         os.chdir(self._testtmp)
         # until we can run norepo commands in the cmdserver
@@ -15,6 +28,13 @@
         self.client = hglib.open()
 
     def tearDown(self):
+        # on Windows we cannot rmtree before closing all instances because of used
+        # files
+        hglib.open = self._oldopen
+        for client in self.clients:
+            if client.server is not None:
+                client.close()
+        os.chdir('..')
         try:
             shutil.rmtree(self._testtmp)
         except AttributeError: