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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
|
"""Tests for distutils2.command.install_data."""
import os
import sys
import distutils2.database
from distutils2._backport import sysconfig
from distutils2._backport.sysconfig import _get_default_scheme
from distutils2.tests import unittest, support
from distutils2.command.install_data import install_data
from distutils2.command.install_dist import install_dist
from distutils2.command.install_distinfo import install_distinfo
class InstallDataTestCase(support.TempdirManager,
support.LoggingCatcher,
unittest.TestCase):
def setUp(self):
super(InstallDataTestCase, self).setUp()
scheme = _get_default_scheme()
old_items = sysconfig._SCHEMES.items(scheme)
def restore():
sysconfig._SCHEMES.remove_section(scheme)
sysconfig._SCHEMES.add_section(scheme)
for option, value in old_items:
sysconfig._SCHEMES.set(scheme, option, value)
self.addCleanup(restore)
def test_simple_run(self):
pkg_dir, dist = self.create_dist()
cmd = install_data(dist)
cmd.install_dir = inst = os.path.join(pkg_dir, 'inst')
scheme = _get_default_scheme()
sysconfig._SCHEMES.set(scheme, 'inst',
os.path.join(pkg_dir, 'inst'))
sysconfig._SCHEMES.set(scheme, 'inst2',
os.path.join(pkg_dir, 'inst2'))
one = os.path.join(pkg_dir, 'one')
self.write_file(one, 'xxx')
inst2 = os.path.join(pkg_dir, 'inst2')
two = os.path.join(pkg_dir, 'two')
self.write_file(two, 'xxx')
# FIXME this creates a literal \{inst2\} directory!
cmd.data_files = {one: '{inst}/one', two: '{inst2}/two'}
self.assertItemsEqual(cmd.get_inputs(), [one, two])
# let's run the command
cmd.ensure_finalized()
cmd.run()
# let's check the result
self.assertEqual(len(cmd.get_outputs()), 2)
rtwo = os.path.split(two)[-1]
self.assertTrue(os.path.exists(os.path.join(inst2, rtwo)))
rone = os.path.split(one)[-1]
self.assertTrue(os.path.exists(os.path.join(inst, rone)))
cmd.outfiles = []
# let's try with warn_dir one
cmd.warn_dir = True
cmd.finalized = False
cmd.ensure_finalized()
cmd.run()
# let's check the result
self.assertEqual(len(cmd.get_outputs()), 2)
self.assertTrue(os.path.exists(os.path.join(inst2, rtwo)))
self.assertTrue(os.path.exists(os.path.join(inst, rone)))
cmd.outfiles = []
# now using root and empty dir
cmd.root = os.path.join(pkg_dir, 'root')
three = os.path.join(cmd.install_dir, 'three')
self.write_file(three, 'xx')
sysconfig._SCHEMES.set(scheme, 'inst3', cmd.install_dir)
cmd.data_files = {one: '{inst}/one', two: '{inst2}/two',
three: '{inst3}/three'}
cmd.finalized = False
cmd.ensure_finalized()
cmd.run()
# let's check the result
self.assertEqual(len(cmd.get_outputs()), 3)
self.assertTrue(os.path.exists(os.path.join(inst2, rtwo)))
self.assertTrue(os.path.exists(os.path.join(inst, rone)))
def test_resources(self):
install_dir = self.mkdtemp()
scripts_dir = self.mkdtemp()
project_dir, dist = self.create_dist(
name='Spamlib', version='0.1',
data_files={'spamd': '{scripts}/spamd'})
os.chdir(project_dir)
self.write_file('spamd', '# Python script')
sysconfig._SCHEMES.set(_get_default_scheme(), 'scripts', scripts_dir)
sys.path.insert(0, install_dir)
distutils2.database.disable_cache()
self.addCleanup(sys.path.remove, install_dir)
self.addCleanup(distutils2.database.enable_cache)
cmd = install_dist(dist)
cmd.outputs = ['spamd']
cmd.install_lib = install_dir
dist.command_obj['install_dist'] = cmd
cmd = install_data(dist)
cmd.install_dir = install_dir
cmd.ensure_finalized()
dist.command_obj['install_data'] = cmd
cmd.run()
cmd = install_distinfo(dist)
cmd.ensure_finalized()
dist.command_obj['install_distinfo'] = cmd
cmd.run()
# first a few sanity checks
self.assertEqual(os.listdir(scripts_dir), ['spamd'])
self.assertEqual(os.listdir(install_dir), ['Spamlib-0.1.dist-info'])
# now the real test
fn = os.path.join(install_dir, 'Spamlib-0.1.dist-info', 'RESOURCES')
fp = open(fn)
try:
content = fp.read().strip()
finally:
fp.close()
expected = 'spamd,%s' % os.path.join(scripts_dir, 'spamd')
self.assertEqual(content, expected)
# just to be sure, we also test that get_file works here, even though
# packaging.database has its own test file
fp = distutils2.database.get_file('Spamlib', 'spamd')
try:
content = fp.read()
finally:
fp.close()
self.assertEqual('# Python script', content)
def test_suite():
return unittest.makeSuite(InstallDataTestCase)
if __name__ == "__main__":
unittest.main(defaultTest="test_suite")
|