# -*- coding: utf-8 -*- from __future__ import with_statement import unittest from oxt_tool.storage import _zipfile from mixin_storage import StorageTestMixin import contextlib class TestZipFile(unittest.TestCase, StorageTestMixin): @property def zipfile_path(self): return self.id() + '.zip' def zipfile_create(self): import zipfile return zipfile.ZipFile(self.zipfile_path, 'w') def zipfile_get(self): import zipfile return zipfile.ZipFile(self.zipfile_path, 'r') def test_zipfile_folder(self): import os zf = self.zipfile_create() try: zf.writestr(os.sep.join(['foo', 'bar.txt']), 'Hello') _zipfile.ZipFileFolder(zf, 'foo') finally: zf.close() def test_zipfile_file(self): import os zf = self.zipfile_create() try: path = os.sep.join(['foo', 'bar.txt']) zf.writestr(path, 'Hello') _zipfile.ZipFileFile(zf, path) finally: zf.close() def test_zipfile_file_put(self): path = self.id() + '.txt' with file(path, 'w') as f: f.write('new-file-content') with self.create_fixture_folder() as folder: folder.file('new-file').put(path) with self.get_fixture_folder() as folder: with folder['new-file'].open() as f: self.assertEqual('new-file-content', f.read()) def create_fixture_storage(self): return _zipfile.ZipFileStorage(self.zipfile_path, 'w') @contextlib.contextmanager def create_fixture_zipfile(self): import os zf = self.zipfile_create() try: zf.writestr(os.sep.join(['foo', 'bar.txt']), 'Hello') zf.writestr(os.sep.join(['foo', 'baz.txt']), 'World') zf.writestr(os.sep.join(['foo', 'bar', 'baz']), 'Hello World') yield zf finally: zf.close() @contextlib.contextmanager def create_fixture_folder(self): with self.create_fixture_zipfile() as zf: yield _zipfile.ZipFileFolder(zf, 'foo') @contextlib.contextmanager def get_fixture_folder(self): zf = self.zipfile_get() try: yield _zipfile.ZipFileFolder(zf, 'foo') finally: zf.close() def test_zipfile_nodes(self): import os.path from oxt_tool.storage._zipfile import zipfile_nodes with self.create_fixture_zipfile() as zipfile: nodes = dict(zipfile_nodes(zipfile)) self.assertEqual(set(['foo', os.path.join('foo', 'bar'), os.path.join('foo', 'bar.txt'), os.path.join('foo', 'baz.txt'), os.path.join('foo', 'bar', 'baz')]), set(nodes.keys())) self.assertTrue(hasattr(nodes['foo'], '__getitem__')) self.assertTrue(hasattr(nodes[os.path.join('foo', 'bar')], '__getitem__')) self.assertTrue(hasattr(nodes[os.path.join('foo', 'bar.txt')], 'open')) self.assertTrue(hasattr(nodes[os.path.join('foo', 'baz.txt')], 'open')) self.assertTrue(hasattr(nodes[os.path.join('foo', 'bar', 'baz')], 'open'))