~abentley/bzrtools/bzrtools.dev

« back to all changes in this revision

Viewing changes to tests/upstream_import.py

  • Committer: Aaron Bentley
  • Date: 2006-12-13 01:04:23 UTC
  • Revision ID: aaron.bentley@utoronto.ca-20061213010423-0f431i3l5dlwkoii
split out upstream_import test cases

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
import os
 
2
from StringIO import StringIO
 
3
from shutil import rmtree
 
4
import tarfile
 
5
from unittest import makeSuite
 
6
 
 
7
from bzrlib.bzrdir import BzrDir
 
8
try:
 
9
    from bzrlib.plugins.bzrtools.upstream_import import (
 
10
        common_directory,
 
11
        import_tar,
 
12
        import_zip,
 
13
        top_directory,
 
14
        ZipFileWrapper, 
 
15
    )
 
16
except ImportError:
 
17
    from bzrtools.upstream_import import (
 
18
        common_directory,
 
19
        import_tar,
 
20
        import_zip,
 
21
        top_directory,
 
22
        ZipFileWrapper, 
 
23
    )
 
24
from bzrlib.tests import TestCaseInTempDir
 
25
 
 
26
 
 
27
class TestImport(TestCaseInTempDir):
 
28
 
 
29
    def make_tar(self, mode='w'):
 
30
        def maker(fileobj):
 
31
            return tarfile.open('project-0.1.tar', mode, fileobj)
 
32
        return self.make_archive(maker)
 
33
 
 
34
    def make_archive(self, maker):
 
35
        result = StringIO()
 
36
        archive_file = maker(result)
 
37
        os.mkdir('project-0.1')
 
38
        archive_file.add('project-0.1')
 
39
        os.mkdir('project-0.1/junk')
 
40
        archive_file.add('project-0.1/junk')
 
41
        
 
42
        f = file('project-0.1/README', 'wb')
 
43
        f.write('What?')
 
44
        f.close()
 
45
        archive_file.add('project-0.1/README')
 
46
 
 
47
        f = file('project-0.1/FEEDME', 'wb')
 
48
        f.write('Hungry!!')
 
49
        f.close()
 
50
        archive_file.add('project-0.1/FEEDME')
 
51
 
 
52
        archive_file.close()
 
53
        rmtree('project-0.1')
 
54
        result.seek(0)
 
55
        return result
 
56
 
 
57
    def make_tar2(self):
 
58
        result = StringIO()
 
59
        tar_file = tarfile.open('project-0.2.tar', 'w', result)
 
60
        os.mkdir('project-0.2')
 
61
        tar_file.add('project-0.2')
 
62
        
 
63
        os.mkdir('project-0.2/junk')
 
64
        tar_file.add('project-0.2/junk')
 
65
 
 
66
        f = file('project-0.2/README', 'wb')
 
67
        f.write('Now?')
 
68
        f.close()
 
69
        tar_file.add('project-0.2/README')
 
70
        tar_file.close()
 
71
 
 
72
        tar_file = tarfile.open('project-0.2.tar', 'a', result)
 
73
        tar_file.add('project-0.2/README')
 
74
 
 
75
        rmtree('project-0.2')
 
76
        return result
 
77
 
 
78
    def make_messed_tar(self):
 
79
        result = StringIO()
 
80
        tar_file = tarfile.open('project-0.1.tar', 'w', result)
 
81
        os.mkdir('project-0.1')
 
82
        tar_file.add('project-0.1')
 
83
 
 
84
        os.mkdir('project-0.2')
 
85
        tar_file.add('project-0.2')
 
86
        
 
87
        f = file('project-0.1/README', 'wb')
 
88
        f.write('What?')
 
89
        f.close()
 
90
        tar_file.add('project-0.1/README')
 
91
        tar_file.close()
 
92
        rmtree('project-0.1')
 
93
        result.seek(0)
 
94
        return result
 
95
 
 
96
    def make_zip(self):
 
97
        def maker(fileobj):
 
98
            return ZipFileWrapper(fileobj, 'w')
 
99
        return self.make_archive(maker)
 
100
 
 
101
    def test_top_directory(self):
 
102
        self.assertEqual(top_directory('ab/b/c'), 'ab')
 
103
        self.assertEqual(top_directory('/etc'), '/')
 
104
 
 
105
    def test_common_directory(self):
 
106
        self.assertEqual(common_directory(['ab/c/d', 'ab/c/e']), 'ab')
 
107
        self.assertIs(common_directory(['ab/c/d', 'ac/c/e']), None)
 
108
 
 
109
    def test_untar(self):
 
110
        tar_file = self.make_tar()
 
111
        tree = BzrDir.create_standalone_workingtree('tree')
 
112
        import_tar(tree, tar_file)
 
113
        self.assertTrue(tree.path2id('README') is not None) 
 
114
        self.assertTrue(tree.path2id('FEEDME') is not None)
 
115
        self.assertTrue(os.path.isfile(tree.abspath('README')))
 
116
        self.assertEqual(tree.inventory[tree.path2id('README')].kind, 'file')
 
117
        self.assertEqual(tree.inventory[tree.path2id('FEEDME')].kind, 'file')
 
118
        
 
119
        f = file(tree.abspath('junk/food'), 'wb')
 
120
        f.write('I like food\n')
 
121
        f.close()
 
122
 
 
123
        tar_file = self.make_tar2()
 
124
        import_tar(tree, tar_file)
 
125
        self.assertTrue(tree.path2id('README') is not None) 
 
126
        self.assertTrue(not os.path.exists(tree.abspath('FEEDME')))
 
127
 
 
128
 
 
129
    def test_untar2(self):
 
130
        tar_file = self.make_messed_tar()
 
131
        tree = BzrDir.create_standalone_workingtree('tree')
 
132
        import_tar(tree, tar_file)
 
133
        self.assertTrue(tree.path2id('project-0.1/README') is not None) 
 
134
 
 
135
    def test_untar_gzip(self):
 
136
        tar_file = self.make_tar(mode='w:gz')
 
137
        tree = BzrDir.create_standalone_workingtree('tree')
 
138
        import_tar(tree, tar_file)
 
139
        self.assertTrue(tree.path2id('README') is not None) 
 
140
 
 
141
    def test_unzip(self):
 
142
        zip_file = self.make_zip()
 
143
        tree = BzrDir.create_standalone_workingtree('tree')
 
144
        import_zip(tree, zip_file)
 
145
        self.assertTrue(tree.path2id('README') is not None) 
 
146
        self.assertTrue(tree.path2id('FEEDME') is not None)
 
147
        self.assertTrue(os.path.isfile(tree.abspath('README')))
 
148
        self.assertEqual(tree.inventory[tree.path2id('README')].kind, 'file')
 
149
        self.assertEqual(tree.inventory[tree.path2id('FEEDME')].kind, 'file')
 
150
        
 
151
        f = file(tree.abspath('junk/food'), 'wb')
 
152
        f.write('I like food\n')
 
153
        f.close()
 
154
 
 
155
 
 
156
def test_suite():
 
157
    return makeSuite(TestImport)