2
from StringIO import StringIO
3
from shutil import rmtree
5
from unittest import makeSuite
7
from bzrlib.bzrdir import BzrDir
9
from bzrlib.plugins.bzrtools.upstream_import import (
17
from bzrtools.upstream_import import (
24
from bzrlib.tests import TestCaseInTempDir
27
class TestImport(TestCaseInTempDir):
29
def make_tar(self, mode='w'):
31
return tarfile.open('project-0.1.tar', mode, fileobj)
32
return self.make_archive(maker)
34
def make_archive(self, maker):
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')
42
f = file('project-0.1/README', 'wb')
45
archive_file.add('project-0.1/README')
47
f = file('project-0.1/FEEDME', 'wb')
50
archive_file.add('project-0.1/FEEDME')
59
tar_file = tarfile.open('project-0.2.tar', 'w', result)
60
os.mkdir('project-0.2')
61
tar_file.add('project-0.2')
63
os.mkdir('project-0.2/junk')
64
tar_file.add('project-0.2/junk')
66
f = file('project-0.2/README', 'wb')
69
tar_file.add('project-0.2/README')
72
tar_file = tarfile.open('project-0.2.tar', 'a', result)
73
tar_file.add('project-0.2/README')
78
def make_messed_tar(self):
80
tar_file = tarfile.open('project-0.1.tar', 'w', result)
81
os.mkdir('project-0.1')
82
tar_file.add('project-0.1')
84
os.mkdir('project-0.2')
85
tar_file.add('project-0.2')
87
f = file('project-0.1/README', 'wb')
90
tar_file.add('project-0.1/README')
98
return ZipFileWrapper(fileobj, 'w')
99
return self.make_archive(maker)
101
def test_top_directory(self):
102
self.assertEqual(top_directory('ab/b/c'), 'ab')
103
self.assertEqual(top_directory('/etc'), '/')
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)
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')
119
f = file(tree.abspath('junk/food'), 'wb')
120
f.write('I like food\n')
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')))
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)
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)
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')
151
f = file(tree.abspath('junk/food'), 'wb')
152
f.write('I like food\n')
157
return makeSuite(TestImport)