1"""Tests for distutils.text_file."""
2import os
3import unittest
4from distutils.text_file import TextFile
5from distutils.tests import support
6from test.support import run_unittest
7
8TEST_DATA = """# test file
9
10line 3 \\
11# intervening comment
12  continues on next line
13"""
14
15class TextFileTestCase(support.TempdirManager, unittest.TestCase):
16
17    def test_class(self):
18        # old tests moved from text_file.__main__
19        # so they are really called by the buildbots
20
21        # result 1: no fancy options
22        result1 = ['# test file\n', '\n', 'line 3 \\\n',
23                   '# intervening comment\n',
24                   '  continues on next line\n']
25
26        # result 2: just strip comments
27        result2 = ["\n",
28                   "line 3 \\\n",
29                   "  continues on next line\n"]
30
31        # result 3: just strip blank lines
32        result3 = ["# test file\n",
33                   "line 3 \\\n",
34                   "# intervening comment\n",
35                   "  continues on next line\n"]
36
37        # result 4: default, strip comments, blank lines,
38        # and trailing whitespace
39        result4 = ["line 3 \\",
40                   "  continues on next line"]
41
42        # result 5: strip comments and blanks, plus join lines (but don't
43        # "collapse" joined lines
44        result5 = ["line 3   continues on next line"]
45
46        # result 6: strip comments and blanks, plus join lines (and
47        # "collapse" joined lines
48        result6 = ["line 3 continues on next line"]
49
50        def test_input(count, description, file, expected_result):
51            result = file.readlines()
52            self.assertEqual(result, expected_result)
53
54        tmpdir = self.mkdtemp()
55        filename = os.path.join(tmpdir, "test.txt")
56        out_file = open(filename, "w")
57        try:
58            out_file.write(TEST_DATA)
59        finally:
60            out_file.close()
61
62        in_file = TextFile(filename, strip_comments=0, skip_blanks=0,
63                           lstrip_ws=0, rstrip_ws=0)
64        try:
65            test_input(1, "no processing", in_file, result1)
66        finally:
67            in_file.close()
68
69        in_file = TextFile(filename, strip_comments=1, skip_blanks=0,
70                           lstrip_ws=0, rstrip_ws=0)
71        try:
72            test_input(2, "strip comments", in_file, result2)
73        finally:
74            in_file.close()
75
76        in_file = TextFile(filename, strip_comments=0, skip_blanks=1,
77                           lstrip_ws=0, rstrip_ws=0)
78        try:
79            test_input(3, "strip blanks", in_file, result3)
80        finally:
81            in_file.close()
82
83        in_file = TextFile(filename)
84        try:
85            test_input(4, "default processing", in_file, result4)
86        finally:
87            in_file.close()
88
89        in_file = TextFile(filename, strip_comments=1, skip_blanks=1,
90                           join_lines=1, rstrip_ws=1)
91        try:
92            test_input(5, "join lines without collapsing", in_file, result5)
93        finally:
94            in_file.close()
95
96        in_file = TextFile(filename, strip_comments=1, skip_blanks=1,
97                           join_lines=1, rstrip_ws=1, collapse_join=1)
98        try:
99            test_input(6, "join lines with collapsing", in_file, result6)
100        finally:
101            in_file.close()
102
103def test_suite():
104    return unittest.makeSuite(TextFileTestCase)
105
106if __name__ == "__main__":
107    run_unittest(test_suite())
108