22
from pkgme.project_info import (
26
from ..project_info import (
23
27
MultipleExternalHelpersInfo,
24
28
SingleExternalHelperInfo,
26
from pkgme.run_script import ScriptUserError
27
from pkgme.testing import (
28
ExecutableFileFixture,
30
from ..run_script import ScriptUserError
31
from ..testing import StaticLoaderFixture
35
34
class TestBackend(TestCase):
40
39
self.assertEqual(backend.name, backend.describe())
43
class ExternalHelpersBackendTests(TestCase, TestWithFixtures):
42
class ExternalHelpersBackendTests(TestCase):
45
44
def make_want_script(self, script, executable=True):
46
tempdir = self.useFixture(TempdirFixture())
47
script_name = ExternalHelpersBackend.WANT_SCRIPT_NAME
48
script_path = os.path.join(tempdir.path, script_name)
50
cls = ExecutableFileFixture
53
self.useFixture(cls(script_path, script))
49
script_name = ExternalHelpersBackend.WANT_SCRIPT_NAME
50
return self.useFixture(
51
FileTree({script_name: {'content': script,
52
'permissions': permissions}}))
56
54
def test_describe(self):
57
55
backend = ExternalHelpersBackend(
145
143
self.assertEqual((10, None), backend.want(tempdir.path))
147
145
def test_missing_want_script(self):
148
tempdir = self.useFixture(TempdirFixture())
146
path = self.useFixture(TempDir()).path
149
147
name = self.getUniqueString()
150
backend = ExternalHelpersBackend(name, tempdir.path)
151
e = self.assertRaises(AssertionError, backend.want, tempdir.path)
148
backend = ExternalHelpersBackend(name, path)
149
e = self.assertRaises(AssertionError, backend.want, path)
152
150
self.assertEqual(
153
151
"Backend %s (%s) has no '%s' script"
154
% (name, tempdir.path, ExternalHelpersBackend.WANT_SCRIPT_NAME),
152
% (name, path, ExternalHelpersBackend.WANT_SCRIPT_NAME),
157
155
def test_want_script_not_executable(self):
221
219
def test_want_script_run_in_correct_dir(self):
222
cwd_tempdir = self.useFixture(TempdirFixture())
220
cwd_tempdir = self.useFixture(TempDir()).path
225
223
if os.getcwd() != '%s':
226
224
print "Backend was called in %%s rather than %%s" %% (os.getcwd(), '%s')
229
""" % (sys.executable, cwd_tempdir.path, cwd_tempdir.path)
227
""" % (sys.executable, cwd_tempdir, cwd_tempdir)
230
228
backend_tempdir = self.make_want_script(script)
231
229
backend = ExternalHelpersBackend(
232
230
self.getUniqueString(), backend_tempdir.path)
233
self.assertEqual((10, None), backend.want(cwd_tempdir.path))
231
self.assertEqual((10, None), backend.want(cwd_tempdir))
235
233
def test_get_info_with_multiple(self):
236
234
helpers_path = self.getUniqueString()
242
240
self.assertEqual(cwd_path, project_info.cwd)
244
242
def test_get_info_with_single(self):
245
helpers_tempdir = self.useFixture(TempdirFixture())
243
helpers_tempdir = self.useFixture(TempDir()).path
246
244
info_script_path = os.path.join(
247
helpers_tempdir.path,
248
246
SingleExternalHelperInfo.INFO_SCRIPT_NAME)
249
247
with open(info_script_path, "w"):
251
249
cwd_path = self.getUniqueString()
252
250
backend = ExternalHelpersBackend(
253
self.getUniqueString(), helpers_tempdir.path)
251
self.getUniqueString(), helpers_tempdir)
254
252
project_info = backend.get_info(cwd_path)
255
253
self.assertIsInstance(project_info, SingleExternalHelperInfo)
256
self.assertEqual(helpers_tempdir.path, project_info.basepath)
254
self.assertEqual(helpers_tempdir, project_info.basepath)
257
255
self.assertEqual(cwd_path, project_info.cwd)
415
413
selector.get_eligible_backends(path))
418
class ExternalHelpersBackendLoaderTests(TestCase, TestWithFixtures):
416
class ExternalHelpersBackendLoaderTests(TestCase):
418
def make_tree(self, *args):
419
return self.useFixture(FileTree(from_rough_spec(args)))
420
421
def test_loads_no_backends(self):
421
tempdir = self.useFixture(TempdirFixture())
422
loader = ExternalHelpersBackendLoader([tempdir.path])
422
loader = ExternalHelpersBackendLoader([])
423
423
self.assertEqual([], loader.load())
425
425
def test_loads_from_one_dir(self):
426
tempdir = self.useFixture(TempdirFixture())
427
426
backend_name = self.getUniqueString()
428
basepath = tempdir.mkdir(backend_name)
429
loader = ExternalHelpersBackendLoader([tempdir.path])
427
tree = self.make_tree(backend_name + '/')
428
loader = ExternalHelpersBackendLoader([tree.path])
430
429
backends = loader.load()
431
430
self.assertEqual(1, len(backends))
432
431
self.assertIsInstance(backends[0], ExternalHelpersBackend)
433
432
self.assertEqual(backend_name, backends[0].name)
434
self.assertEqual(basepath, backends[0].basepath)
433
self.assertEqual(tree.join(backend_name), backends[0].basepath)
436
435
def test_loads_from_two_dirs(self):
437
tempdir1 = self.useFixture(TempdirFixture())
438
tempdir2 = self.useFixture(TempdirFixture())
439
436
backend_name1 = self.getUniqueString()
440
437
backend_name2 = self.getUniqueString()
441
tempdir1.mkdir(backend_name1)
442
tempdir2.mkdir(backend_name2)
438
tempdir1 = self.make_tree(backend_name1 + '/')
439
tempdir2 = self.make_tree(backend_name2 + '/')
443
440
loader = ExternalHelpersBackendLoader(
444
441
[tempdir1.path, tempdir2.path])
445
442
backends = loader.load()
446
443
self.assertEqual(2, len(backends))
448
445
def test_loads_only_one_instance_of_each_name(self):
449
tempdir1 = self.useFixture(TempdirFixture())
450
tempdir2 = self.useFixture(TempdirFixture())
451
446
backend_name = self.getUniqueString()
452
basepath1 = tempdir1.mkdir(backend_name)
453
tempdir2.mkdir(backend_name)
447
tempdir1 = self.make_tree(backend_name + '/')
448
tempdir2 = self.make_tree(backend_name + '/')
449
basepath1 = tempdir1.join(backend_name)
454
450
loader = ExternalHelpersBackendLoader(
455
451
[tempdir1.path, tempdir2.path])
456
452
backends = loader.load()
458
454
self.assertEqual(basepath1, backends[0].basepath)
460
456
def test_loads_only_dirs(self):
461
tempdir = self.useFixture(TempdirFixture())
462
tempdir.touch(self.getUniqueString())
463
loader = ExternalHelpersBackendLoader([tempdir.path])
457
path = self.make_tree(self.getUniqueString()).path
458
loader = ExternalHelpersBackendLoader([path])
464
459
self.assertEqual([], loader.load())
466
461
def test_ignores_dotdirs(self):
467
tempdir = self.useFixture(TempdirFixture())
468
tempdir.mkdir("." + self.getUniqueString())
469
loader = ExternalHelpersBackendLoader([tempdir.path])
462
dirname = '.%s/' % (self.getUniqueString(),)
463
tempdir = self.make_tree(dirname).path
464
loader = ExternalHelpersBackendLoader([tempdir])
470
465
self.assertEqual([], loader.load())
472
467
def test_ignores_missing_dirs(self):
473
self.useFixture(TempdirFixture())
474
468
loader = ExternalHelpersBackendLoader([self.getUniqueString()])
475
469
self.assertEqual([], loader.load())