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'))