1"""Tests for distutils.command.install_data."""
2import os
3import unittest
4
5from distutils.command.install_data import install_data
6from distutils.tests import support
7from test.support import run_unittest
8
9class InstallDataTestCase(support.TempdirManager,
10                          support.LoggingSilencer,
11                          support.EnvironGuard,
12                          unittest.TestCase):
13
14    def test_simple_run(self):
15        pkg_dir, dist = self.create_dist()
16        cmd = install_data(dist)
17        cmd.install_dir = inst = os.path.join(pkg_dir, 'inst')
18
19        # data_files can contain
20        #  - simple files
21        #  - a tuple with a path, and a list of file
22        one = os.path.join(pkg_dir, 'one')
23        self.write_file(one, 'xxx')
24        inst2 = os.path.join(pkg_dir, 'inst2')
25        two = os.path.join(pkg_dir, 'two')
26        self.write_file(two, 'xxx')
27
28        cmd.data_files = [one, (inst2, [two])]
29        self.assertEqual(cmd.get_inputs(), [one, (inst2, [two])])
30
31        # let's run the command
32        cmd.ensure_finalized()
33        cmd.run()
34
35        # let's check the result
36        self.assertEqual(len(cmd.get_outputs()), 2)
37        rtwo = os.path.split(two)[-1]
38        self.assertTrue(os.path.exists(os.path.join(inst2, rtwo)))
39        rone = os.path.split(one)[-1]
40        self.assertTrue(os.path.exists(os.path.join(inst, rone)))
41        cmd.outfiles = []
42
43        # let's try with warn_dir one
44        cmd.warn_dir = 1
45        cmd.ensure_finalized()
46        cmd.run()
47
48        # let's check the result
49        self.assertEqual(len(cmd.get_outputs()), 2)
50        self.assertTrue(os.path.exists(os.path.join(inst2, rtwo)))
51        self.assertTrue(os.path.exists(os.path.join(inst, rone)))
52        cmd.outfiles = []
53
54        # now using root and empty dir
55        cmd.root = os.path.join(pkg_dir, 'root')
56        inst3 = os.path.join(cmd.install_dir, 'inst3')
57        inst4 = os.path.join(pkg_dir, 'inst4')
58        three = os.path.join(cmd.install_dir, 'three')
59        self.write_file(three, 'xx')
60        cmd.data_files = [one, (inst2, [two]),
61                          ('inst3', [three]),
62                          (inst4, [])]
63        cmd.ensure_finalized()
64        cmd.run()
65
66        # let's check the result
67        self.assertEqual(len(cmd.get_outputs()), 4)
68        self.assertTrue(os.path.exists(os.path.join(inst2, rtwo)))
69        self.assertTrue(os.path.exists(os.path.join(inst, rone)))
70
71def test_suite():
72    return unittest.makeSuite(InstallDataTestCase)
73
74if __name__ == "__main__":
75    run_unittest(test_suite())
76