seawolf2357's picture
Add tools
a65138c verified
# -*- 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'))