1"""Tests for distutils.command.install_scripts."""
2
3import os
4import unittest
5
6from distutils.command.install_scripts import install_scripts
7from distutils.core import Distribution
8
9from distutils.tests import support
10from test.support import run_unittest
11
12
13class InstallScriptsTestCase(support.TempdirManager,
14                             support.LoggingSilencer,
15                             unittest.TestCase):
16
17    def test_default_settings(self):
18        dist = Distribution()
19        dist.command_obj["build"] = support.DummyCommand(
20            build_scripts="/foo/bar")
21        dist.command_obj["install"] = support.DummyCommand(
22            install_scripts="/splat/funk",
23            force=1,
24            skip_build=1,
25            )
26        cmd = install_scripts(dist)
27        self.assertFalse(cmd.force)
28        self.assertFalse(cmd.skip_build)
29        self.assertIsNone(cmd.build_dir)
30        self.assertIsNone(cmd.install_dir)
31
32        cmd.finalize_options()
33
34        self.assertTrue(cmd.force)
35        self.assertTrue(cmd.skip_build)
36        self.assertEqual(cmd.build_dir, "/foo/bar")
37        self.assertEqual(cmd.install_dir, "/splat/funk")
38
39    def test_installation(self):
40        source = self.mkdtemp()
41        expected = []
42
43        def write_script(name, text):
44            expected.append(name)
45            f = open(os.path.join(source, name), "w")
46            try:
47                f.write(text)
48            finally:
49                f.close()
50
51        write_script("script1.py", ("#! /usr/bin/env python2.3\n"
52                                    "# bogus script w/ Python sh-bang\n"
53                                    "pass\n"))
54        write_script("script2.py", ("#!/usr/bin/python\n"
55                                    "# bogus script w/ Python sh-bang\n"
56                                    "pass\n"))
57        write_script("shell.sh", ("#!/bin/sh\n"
58                                  "# bogus shell script w/ sh-bang\n"
59                                  "exit 0\n"))
60
61        target = self.mkdtemp()
62        dist = Distribution()
63        dist.command_obj["build"] = support.DummyCommand(build_scripts=source)
64        dist.command_obj["install"] = support.DummyCommand(
65            install_scripts=target,
66            force=1,
67            skip_build=1,
68            )
69        cmd = install_scripts(dist)
70        cmd.finalize_options()
71        cmd.run()
72
73        installed = os.listdir(target)
74        for name in expected:
75            self.assertIn(name, installed)
76
77
78def test_suite():
79    return unittest.makeSuite(InstallScriptsTestCase)
80
81if __name__ == "__main__":
82    run_unittest(test_suite())
83