1"""Tests for distutils.command.build."""
2import unittest
3import os
4import sys
5from test.support import run_unittest
6
7from distutils.command.build import build
8from distutils.tests import support
9from sysconfig import get_platform
10
11class BuildTestCase(support.TempdirManager,
12                    support.LoggingSilencer,
13                    unittest.TestCase):
14
15    @unittest.skipUnless(sys.executable, "test requires sys.executable")
16    def test_finalize_options(self):
17        pkg_dir, dist = self.create_dist()
18        cmd = build(dist)
19        cmd.finalize_options()
20
21        # if not specified, plat_name gets the current platform
22        self.assertEqual(cmd.plat_name, get_platform())
23
24        # build_purelib is build + lib
25        wanted = os.path.join(cmd.build_base, 'lib')
26        self.assertEqual(cmd.build_purelib, wanted)
27
28        # build_platlib is 'build/lib.platform-x.x[-pydebug]'
29        # examples:
30        #   build/lib.macosx-10.3-i386-2.7
31        plat_spec = '.%s-%d.%d' % (cmd.plat_name, *sys.version_info[:2])
32        if hasattr(sys, 'gettotalrefcount'):
33            self.assertTrue(cmd.build_platlib.endswith('-pydebug'))
34            plat_spec += '-pydebug'
35        wanted = os.path.join(cmd.build_base, 'lib' + plat_spec)
36        self.assertEqual(cmd.build_platlib, wanted)
37
38        # by default, build_lib = build_purelib
39        self.assertEqual(cmd.build_lib, cmd.build_purelib)
40
41        # build_temp is build/temp.<plat>
42        wanted = os.path.join(cmd.build_base, 'temp' + plat_spec)
43        self.assertEqual(cmd.build_temp, wanted)
44
45        # build_scripts is build/scripts-x.x
46        wanted = os.path.join(cmd.build_base,
47                              'scripts-%d.%d' % sys.version_info[:2])
48        self.assertEqual(cmd.build_scripts, wanted)
49
50        # executable is os.path.normpath(sys.executable)
51        self.assertEqual(cmd.executable, os.path.normpath(sys.executable))
52
53def test_suite():
54    return unittest.TestLoader().loadTestsFromTestCase(BuildTestCase)
55
56if __name__ == "__main__":
57    run_unittest(test_suite())
58