summaryrefslogtreecommitdiff
path: root/fixtures/tests/_fixtures/test_tempdir.py
diff options
context:
space:
mode:
authorRobert Collins <robertc@robertcollins.net>2014-09-25 15:01:50 +1200
committerRobert Collins <robertc@robertcollins.net>2014-09-25 15:01:50 +1200
commitf61bdd267c9f4a039bad10249e8ae618b29a515e (patch)
tree40f4b9793826d603b090483d4abbbd7eefb39ba3 /fixtures/tests/_fixtures/test_tempdir.py
parent9f9d89ce718463b24cd3910b9a99efb60b3c9e1b (diff)
downloadfixtures-f61bdd267c9f4a039bad10249e8ae618b29a515e.tar.gz
Migrate to git and pbr.
No functional changes.
Diffstat (limited to 'fixtures/tests/_fixtures/test_tempdir.py')
-rw-r--r--fixtures/tests/_fixtures/test_tempdir.py96
1 files changed, 96 insertions, 0 deletions
diff --git a/fixtures/tests/_fixtures/test_tempdir.py b/fixtures/tests/_fixtures/test_tempdir.py
new file mode 100644
index 0000000..d0def55
--- /dev/null
+++ b/fixtures/tests/_fixtures/test_tempdir.py
@@ -0,0 +1,96 @@
+# fixtures: Fixtures with cleanups for testing and convenience.
+#
+# Copyright (c) 2010, Robert Collins <robertc@robertcollins.net>
+#
+# Licensed under either the Apache License, Version 2.0 or the BSD 3-clause
+# license at the users choice. A copy of both licenses are available in the
+# project source as Apache-2.0 and BSD. You may not use this file except in
+# compliance with one of these two licences.
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under these licenses is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# license you chose for the specific language governing permissions and
+# limitations under that license.
+
+import os
+import tempfile
+
+import testtools
+from testtools.matchers import StartsWith
+
+from fixtures import (
+ NestedTempfile,
+ TempDir,
+ )
+
+
+class TestTempDir(testtools.TestCase):
+
+ def test_basic(self):
+ fixture = TempDir()
+ sentinel = object()
+ self.assertEqual(sentinel, getattr(fixture, 'path', sentinel))
+ fixture.setUp()
+ try:
+ path = fixture.path
+ self.assertTrue(os.path.isdir(path))
+ finally:
+ fixture.cleanUp()
+ self.assertFalse(os.path.isdir(path))
+
+ def test_under_dir(self):
+ root = self.useFixture(TempDir()).path
+ fixture = TempDir(root)
+ fixture.setUp()
+ with fixture:
+ self.assertThat(fixture.path, StartsWith(root))
+
+ def test_join(self):
+ temp_dir = self.useFixture(TempDir())
+ root = temp_dir.path
+ relpath = 'foo/bar/baz'
+ self.assertEqual(
+ os.path.join(root, relpath), temp_dir.join(relpath))
+
+ def test_join_multiple_children(self):
+ temp_dir = self.useFixture(TempDir())
+ root = temp_dir.path
+ self.assertEqual(
+ os.path.join(root, 'foo', 'bar', 'baz'),
+ temp_dir.join('foo', 'bar', 'baz'))
+
+ def test_join_naughty_children(self):
+ temp_dir = self.useFixture(TempDir())
+ root = temp_dir.path
+ self.assertEqual(
+ os.path.abspath(os.path.join(root, '..', 'bar', 'baz')),
+ temp_dir.join('..', 'bar', 'baz'))
+
+
+class NestedTempfileTest(testtools.TestCase):
+ """Tests for `NestedTempfile`."""
+
+ def test_normal(self):
+ # The temp directory is removed when the context is exited.
+ starting_tempdir = tempfile.gettempdir()
+ with NestedTempfile():
+ self.assertEqual(tempfile.tempdir, tempfile.gettempdir())
+ self.assertNotEqual(starting_tempdir, tempfile.tempdir)
+ self.assertTrue(os.path.isdir(tempfile.tempdir))
+ nested_tempdir = tempfile.tempdir
+ self.assertEqual(tempfile.tempdir, tempfile.gettempdir())
+ self.assertEqual(starting_tempdir, tempfile.tempdir)
+ self.assertFalse(os.path.isdir(nested_tempdir))
+
+ def test_exception(self):
+ # The temp directory is removed when the context is exited, even if
+ # the code running in context raises an exception.
+ class ContrivedException(Exception):
+ pass
+ try:
+ with NestedTempfile():
+ nested_tempdir = tempfile.tempdir
+ raise ContrivedException
+ except ContrivedException:
+ self.assertFalse(os.path.isdir(nested_tempdir))