1"""Tests for distutils.file_util."""
2import unittest
3import os
4import shutil
5
6from distutils.file_util import move_file, write_file, copy_file
7from distutils import log
8from distutils.tests import support
9from test.test_support import run_unittest
10
11class FileUtilTestCase(support.TempdirManager, unittest.TestCase):
12
13    def _log(self, msg, *args):
14        if len(args) > 0:
15            self._logs.append(msg % args)
16        else:
17            self._logs.append(msg)
18
19    def setUp(self):
20        super(FileUtilTestCase, self).setUp()
21        self._logs = []
22        self.old_log = log.info
23        log.info = self._log
24        tmp_dir = self.mkdtemp()
25        self.source = os.path.join(tmp_dir, 'f1')
26        self.target = os.path.join(tmp_dir, 'f2')
27        self.target_dir = os.path.join(tmp_dir, 'd1')
28
29    def tearDown(self):
30        log.info = self.old_log
31        super(FileUtilTestCase, self).tearDown()
32
33    def test_move_file_verbosity(self):
34        f = open(self.source, 'w')
35        try:
36            f.write('some content')
37        finally:
38            f.close()
39
40        move_file(self.source, self.target, verbose=0)
41        wanted = []
42        self.assertEqual(self._logs, wanted)
43
44        # back to original state
45        move_file(self.target, self.source, verbose=0)
46
47        move_file(self.source, self.target, verbose=1)
48        wanted = ['moving %s -> %s' % (self.source, self.target)]
49        self.assertEqual(self._logs, wanted)
50
51        # back to original state
52        move_file(self.target, self.source, verbose=0)
53
54        self._logs = []
55        # now the target is a dir
56        os.mkdir(self.target_dir)
57        move_file(self.source, self.target_dir, verbose=1)
58        wanted = ['moving %s -> %s' % (self.source, self.target_dir)]
59        self.assertEqual(self._logs, wanted)
60
61    def test_write_file(self):
62        lines = ['a', 'b', 'c']
63        dir = self.mkdtemp()
64        foo = os.path.join(dir, 'foo')
65        write_file(foo, lines)
66        content = [line.strip() for line in open(foo).readlines()]
67        self.assertEqual(content, lines)
68
69    def test_copy_file(self):
70        src_dir = self.mkdtemp()
71        foo = os.path.join(src_dir, 'foo')
72        write_file(foo, 'content')
73        dst_dir = self.mkdtemp()
74        copy_file(foo, dst_dir)
75        self.assertTrue(os.path.exists(os.path.join(dst_dir, 'foo')))
76
77def test_suite():
78    return unittest.makeSuite(FileUtilTestCase)
79
80if __name__ == "__main__":
81    run_unittest(test_suite())
82