<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -45,22 +45,6 @@ def raises(exc, obj, *args, **kwargs):
     raise AssertionError(&quot;No exception raised.&quot;)
 
 
-class TmpDirMixin:
-    &quot;&quot;&quot;
-        A utility mixin that creates a temporary directory during setup, and
-        removes it during teardown. The directory path is inserted into the
-        test namespace as follows:
-            
-            self[&quot;tmpdir&quot;] = path
-    &quot;&quot;&quot;
-    def setUp(self):
-        self[&quot;tmpdir&quot;] = tempfile.mkdtemp()
-
-    def tearDown(self):
-        if os.path.isdir(self[&quot;tmpdir&quot;]):
-            shutil.rmtree(self[&quot;tmpdir&quot;])
-
-
 class _Error:
     def __init__(self, node, msg):
         self.node, self.msg = node, msg
@@ -631,13 +615,28 @@ class TestContainer(_TestBase):
                     self.tearDownState,
                 ]
 
+    def tmpdir(self):
+        f = tempfile.mkdtemp()
+        self._tmpDirs.append(f)
+        return f
+
+    def _rmdirs(self, l):
+        for i in l:
+            if os.path.isdir(i):
+                shutil.rmtree(i)
+        l[:] = []
+
     def _run(self, output, repeat, profile):
         &quot;&quot;&quot;
             Run the tests contained in this suite.
         &quot;&quot;&quot;
+        # Temp dirs requested during setUpAll, and during a specific test
+        allTmpDirs, oneTmpDirs = [], []
+        self._tmpDirs = allTmpDirs
         if self._runCallable(self.setUpAll, self, &quot;setUpAll&quot;, 1, None):
             output.setUpAllError(self)
             return
+        self._tmpDirs = oneTmpDirs
         for i in self.children:
             output.nodePre(i)
 
@@ -655,12 +654,14 @@ class TestContainer(_TestBase):
                 output.tearDownError(i)
                 output.nodePost(i)
                 return
+            self._rmdirs(oneTmpDirs)
 
             output.nodePost(i)
 
         if self._runCallable(self.tearDownAll, self, &quot;tearDownAll&quot;, 1, None):
             output.tearDownAllError(self)
             return
+        self._rmdirs(allTmpDirs)
 
 
 class AutoTree(TestContainer):</diff>
      <filename>libpry/test.py</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,4 @@
-#!/usr/bin/env python2.5
+#!/usr/bin/env python
 import sys
 import libpry
 </diff>
      <filename>pry</filename>
    </modified>
    <modified>
      <diff>@@ -30,13 +30,22 @@ class uRaises(libpry.AutoTree):
         )
 
 
-class uTmpDirMixin(libpry.test.TmpDirMixin, libpry.test.AutoTree):
-    def tearDown(self):
-        libpry.test.TmpDirMixin.tearDown(self)
-        assert not os.path.isdir(self[&quot;tmpdir&quot;])
+class uTmpDir(libpry.test.AutoTree):
+    def setUpAll(self):
+        self.d = []
+        self.d.append(self.tmpdir())
+
+    def setUp(self):
+        self.d.append(self.tmpdir())
+
+    def tearDownAll(self):
+        assert os.path.isdir(self.d[0])
+        assert not os.path.isdir(self.d[1])
 
     def test_check(self):
-        assert os.path.isdir(self[&quot;tmpdir&quot;])
+        assert len(self.d) == 2
+        assert os.path.isdir(self.d[0])
+        assert os.path.isdir(self.d[1])
 
 
 class TSetupCheckRoot(libpry.test.AutoTree):
@@ -570,5 +579,5 @@ tests = [
     uAutoTree(),
     u_Output(),
     uCallableNode(),
-    uTmpDirMixin(),
+    uTmpDir(),
 ]</diff>
      <filename>test/test_test.py</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>e651670e56a7080ca7e24ce720cb3cbab07655ff</id>
    </parent>
  </parents>
  <author>
    <name>Aldo Cortesi</name>
    <email>aldo@nullcube.com</email>
  </author>
  <url>http://github.com/cortesi/pry/commit/7223e54908c61a73aed4af9dc3c50be636fea4b2</url>
  <id>7223e54908c61a73aed4af9dc3c50be636fea4b2</id>
  <committed-date>2009-08-04T19:57:12-07:00</committed-date>
  <authored-date>2009-08-04T19:57:12-07:00</authored-date>
  <message>More elegant tempdirs.</message>
  <tree>96d443511ab13cba35e70884f4ed691c8a2d066e</tree>
  <committer>
    <name>Aldo Cortesi</name>
    <email>aldo@nullcube.com</email>
  </committer>
</commit>
