summaryrefslogtreecommitdiff
path: root/tests/utils/archive.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/utils/archive.py')
-rw-r--r--tests/utils/archive.py72
1 files changed, 72 insertions, 0 deletions
diff --git a/tests/utils/archive.py b/tests/utils/archive.py
new file mode 100644
index 0000000000..8861b4a577
--- /dev/null
+++ b/tests/utils/archive.py
@@ -0,0 +1,72 @@
+import os
+import shutil
+import tempfile
+from django.utils import unittest
+
+from django.utils.archive import Archive, extract
+from django.utils._os import upath
+
+
+TEST_DIR = os.path.join(os.path.dirname(upath(__file__)), 'archives')
+
+
+class ArchiveTester(object):
+ archive = None
+
+ def setUp(self):
+ """
+ Create temporary directory for testing extraction.
+ """
+ self.old_cwd = os.getcwd()
+ self.tmpdir = tempfile.mkdtemp()
+ self.addCleanup(shutil.rmtree, self.tmpdir)
+ self.archive_path = os.path.join(TEST_DIR, self.archive)
+ # Always start off in TEST_DIR.
+ os.chdir(TEST_DIR)
+
+ def tearDown(self):
+ os.chdir(self.old_cwd)
+
+ def test_extract_method(self):
+ with Archive(self.archive) as archive:
+ archive.extract(self.tmpdir)
+ self.check_files(self.tmpdir)
+
+ def test_extract_method_no_to_path(self):
+ os.chdir(self.tmpdir)
+ with Archive(self.archive_path) as archive:
+ archive.extract()
+ self.check_files(self.tmpdir)
+
+ def test_extract_function(self):
+ extract(self.archive_path, self.tmpdir)
+ self.check_files(self.tmpdir)
+
+ def test_extract_function_no_to_path(self):
+ os.chdir(self.tmpdir)
+ extract(self.archive_path)
+ self.check_files(self.tmpdir)
+
+ def check_files(self, tmpdir):
+ self.assertTrue(os.path.isfile(os.path.join(self.tmpdir, '1')))
+ self.assertTrue(os.path.isfile(os.path.join(self.tmpdir, '2')))
+ self.assertTrue(os.path.isfile(os.path.join(self.tmpdir, 'foo', '1')))
+ self.assertTrue(os.path.isfile(os.path.join(self.tmpdir, 'foo', '2')))
+ self.assertTrue(os.path.isfile(os.path.join(self.tmpdir, 'foo', 'bar', '1')))
+ self.assertTrue(os.path.isfile(os.path.join(self.tmpdir, 'foo', 'bar', '2')))
+
+
+class TestZip(ArchiveTester, unittest.TestCase):
+ archive = 'foobar.zip'
+
+
+class TestTar(ArchiveTester, unittest.TestCase):
+ archive = 'foobar.tar'
+
+
+class TestGzipTar(ArchiveTester, unittest.TestCase):
+ archive = 'foobar.tar.gz'
+
+
+class TestBzip2Tar(ArchiveTester, unittest.TestCase):
+ archive = 'foobar.tar.bz2'