File size: 3,475 Bytes
a65138c | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | # -*- 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'))
|