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
|
from pathlib import Path
from tempfile import TemporaryDirectory, NamedTemporaryFile
import os
import unittest
from dhpython.tools import fix_shebang, relpath, move_matching_files
class TestRelpath(unittest.TestCase):
def test_common_parent_dir(self):
r = relpath('/usr/share/python-foo/foo.py', '/usr/bin/foo')
self.assertEqual(r, '../share/python-foo/foo.py')
def test_strips_common_prefix(self):
r = relpath('/usr/share/python-foo/foo.py', '/usr/share')
self.assertEqual(r, 'python-foo/foo.py')
def test_trailing_slash_ignored(self):
r = relpath('/usr/share/python-foo/foo.py', '/usr/share/')
self.assertEqual(r, 'python-foo/foo.py')
class TestMoveMatchingFiles(unittest.TestCase):
def setUp(self):
self.tmpdir = TemporaryDirectory() # pylint: disable=consider-using-with
self.addCleanup(self.tmpdir.cleanup)
os.makedirs(self.tmppath('foo/bar/a/b/c/spam'))
for path in ('foo/bar/a/b/c/spam/file.so',
'foo/bar/a/b/c/spam/file.py'):
with open(self.tmppath(path), 'wb'):
# create a 0 byte file for the test
pass
move_matching_files(self.tmppath('foo/bar/'),
self.tmppath('foo/baz/'),
r'spam/.*\.so$')
def tmppath(self, *path):
return os.path.join(self.tmpdir.name, *path)
def test_moved_matching_file(self):
self.assertTrue(os.path.exists(
self.tmppath('foo/baz/a/b/c/spam/file.so')))
def test_left_non_matching_file(self):
self.assertTrue(os.path.exists(
self.tmppath('foo/bar/a/b/c/spam/file.py')))
class TestFixShebang(unittest.TestCase):
def setUp(self):
self.tmpfile = Path(NamedTemporaryFile(
prefix="dhptest_", suffix="_shebang.py", delete=False).name)
self.addCleanup(self.tmpfile.unlink)
def write_shebang(self, shebang):
self.tmpfile.write_text(shebang + "\nprint('This is Python')\n")
def assert_shebang(self, shebang):
contents = self.tmpfile.read_text().splitlines()
self.assertEqual(len(contents), 2)
self.assertEqual(contents[0], shebang)
self.assertEqual(contents[1], "print('This is Python')")
def test_perl(self):
self.write_shebang("#!/usr/bin/perl")
fix_shebang(self.tmpfile)
self.assert_shebang("#!/usr/bin/perl")
def test_unversioned(self):
self.write_shebang("#!/usr/bin/python")
fix_shebang(self.tmpfile)
self.assert_shebang("#! /usr/bin/python3")
def test_python2(self):
self.write_shebang("#!/usr/bin/python2")
fix_shebang(self.tmpfile)
self.assert_shebang("#!/usr/bin/python2")
def test_python2_7(self):
self.write_shebang("#!/usr/bin/python2.7")
fix_shebang(self.tmpfile)
self.assert_shebang("#!/usr/bin/python2.7")
def test_python3(self):
self.write_shebang("#!/usr/bin/python3")
fix_shebang(self.tmpfile)
self.assert_shebang("#! /usr/bin/python3")
def test_python3_13(self):
self.write_shebang("#!/usr/bin/python3.13")
fix_shebang(self.tmpfile)
self.assert_shebang("#!/usr/bin/python3.13")
def test_env_unversioned(self):
self.write_shebang("#!/usr/bin/env python")
fix_shebang(self.tmpfile)
self.assert_shebang("#! /usr/bin/python3")
def test_env_python3(self):
self.write_shebang("#!/usr/bin/env python3")
fix_shebang(self.tmpfile)
self.assert_shebang("#! /usr/bin/python3")
def test_env_python3_13(self):
self.write_shebang("#!/usr/bin/env python3.13")
fix_shebang(self.tmpfile)
self.assert_shebang("#! /usr/bin/python3.13")
def test_replacement(self):
self.write_shebang("#!/usr/bin/env python")
fix_shebang(self.tmpfile, "/usr/bin/foo")
self.assert_shebang("#! /usr/bin/foo")
|