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