17db96d56Sopenharmony_ci"""Tests for distutils.text_file."""
27db96d56Sopenharmony_ciimport os
37db96d56Sopenharmony_ciimport unittest
47db96d56Sopenharmony_cifrom distutils.text_file import TextFile
57db96d56Sopenharmony_cifrom distutils.tests import support
67db96d56Sopenharmony_cifrom test.support import run_unittest
77db96d56Sopenharmony_ci
87db96d56Sopenharmony_ciTEST_DATA = """# test file
97db96d56Sopenharmony_ci
107db96d56Sopenharmony_ciline 3 \\
117db96d56Sopenharmony_ci# intervening comment
127db96d56Sopenharmony_ci  continues on next line
137db96d56Sopenharmony_ci"""
147db96d56Sopenharmony_ci
157db96d56Sopenharmony_ciclass TextFileTestCase(support.TempdirManager, unittest.TestCase):
167db96d56Sopenharmony_ci
177db96d56Sopenharmony_ci    def test_class(self):
187db96d56Sopenharmony_ci        # old tests moved from text_file.__main__
197db96d56Sopenharmony_ci        # so they are really called by the buildbots
207db96d56Sopenharmony_ci
217db96d56Sopenharmony_ci        # result 1: no fancy options
227db96d56Sopenharmony_ci        result1 = ['# test file\n', '\n', 'line 3 \\\n',
237db96d56Sopenharmony_ci                   '# intervening comment\n',
247db96d56Sopenharmony_ci                   '  continues on next line\n']
257db96d56Sopenharmony_ci
267db96d56Sopenharmony_ci        # result 2: just strip comments
277db96d56Sopenharmony_ci        result2 = ["\n",
287db96d56Sopenharmony_ci                   "line 3 \\\n",
297db96d56Sopenharmony_ci                   "  continues on next line\n"]
307db96d56Sopenharmony_ci
317db96d56Sopenharmony_ci        # result 3: just strip blank lines
327db96d56Sopenharmony_ci        result3 = ["# test file\n",
337db96d56Sopenharmony_ci                   "line 3 \\\n",
347db96d56Sopenharmony_ci                   "# intervening comment\n",
357db96d56Sopenharmony_ci                   "  continues on next line\n"]
367db96d56Sopenharmony_ci
377db96d56Sopenharmony_ci        # result 4: default, strip comments, blank lines,
387db96d56Sopenharmony_ci        # and trailing whitespace
397db96d56Sopenharmony_ci        result4 = ["line 3 \\",
407db96d56Sopenharmony_ci                   "  continues on next line"]
417db96d56Sopenharmony_ci
427db96d56Sopenharmony_ci        # result 5: strip comments and blanks, plus join lines (but don't
437db96d56Sopenharmony_ci        # "collapse" joined lines
447db96d56Sopenharmony_ci        result5 = ["line 3   continues on next line"]
457db96d56Sopenharmony_ci
467db96d56Sopenharmony_ci        # result 6: strip comments and blanks, plus join lines (and
477db96d56Sopenharmony_ci        # "collapse" joined lines
487db96d56Sopenharmony_ci        result6 = ["line 3 continues on next line"]
497db96d56Sopenharmony_ci
507db96d56Sopenharmony_ci        def test_input(count, description, file, expected_result):
517db96d56Sopenharmony_ci            result = file.readlines()
527db96d56Sopenharmony_ci            self.assertEqual(result, expected_result)
537db96d56Sopenharmony_ci
547db96d56Sopenharmony_ci        tmpdir = self.mkdtemp()
557db96d56Sopenharmony_ci        filename = os.path.join(tmpdir, "test.txt")
567db96d56Sopenharmony_ci        out_file = open(filename, "w")
577db96d56Sopenharmony_ci        try:
587db96d56Sopenharmony_ci            out_file.write(TEST_DATA)
597db96d56Sopenharmony_ci        finally:
607db96d56Sopenharmony_ci            out_file.close()
617db96d56Sopenharmony_ci
627db96d56Sopenharmony_ci        in_file = TextFile(filename, strip_comments=0, skip_blanks=0,
637db96d56Sopenharmony_ci                           lstrip_ws=0, rstrip_ws=0)
647db96d56Sopenharmony_ci        try:
657db96d56Sopenharmony_ci            test_input(1, "no processing", in_file, result1)
667db96d56Sopenharmony_ci        finally:
677db96d56Sopenharmony_ci            in_file.close()
687db96d56Sopenharmony_ci
697db96d56Sopenharmony_ci        in_file = TextFile(filename, strip_comments=1, skip_blanks=0,
707db96d56Sopenharmony_ci                           lstrip_ws=0, rstrip_ws=0)
717db96d56Sopenharmony_ci        try:
727db96d56Sopenharmony_ci            test_input(2, "strip comments", in_file, result2)
737db96d56Sopenharmony_ci        finally:
747db96d56Sopenharmony_ci            in_file.close()
757db96d56Sopenharmony_ci
767db96d56Sopenharmony_ci        in_file = TextFile(filename, strip_comments=0, skip_blanks=1,
777db96d56Sopenharmony_ci                           lstrip_ws=0, rstrip_ws=0)
787db96d56Sopenharmony_ci        try:
797db96d56Sopenharmony_ci            test_input(3, "strip blanks", in_file, result3)
807db96d56Sopenharmony_ci        finally:
817db96d56Sopenharmony_ci            in_file.close()
827db96d56Sopenharmony_ci
837db96d56Sopenharmony_ci        in_file = TextFile(filename)
847db96d56Sopenharmony_ci        try:
857db96d56Sopenharmony_ci            test_input(4, "default processing", in_file, result4)
867db96d56Sopenharmony_ci        finally:
877db96d56Sopenharmony_ci            in_file.close()
887db96d56Sopenharmony_ci
897db96d56Sopenharmony_ci        in_file = TextFile(filename, strip_comments=1, skip_blanks=1,
907db96d56Sopenharmony_ci                           join_lines=1, rstrip_ws=1)
917db96d56Sopenharmony_ci        try:
927db96d56Sopenharmony_ci            test_input(5, "join lines without collapsing", in_file, result5)
937db96d56Sopenharmony_ci        finally:
947db96d56Sopenharmony_ci            in_file.close()
957db96d56Sopenharmony_ci
967db96d56Sopenharmony_ci        in_file = TextFile(filename, strip_comments=1, skip_blanks=1,
977db96d56Sopenharmony_ci                           join_lines=1, rstrip_ws=1, collapse_join=1)
987db96d56Sopenharmony_ci        try:
997db96d56Sopenharmony_ci            test_input(6, "join lines with collapsing", in_file, result6)
1007db96d56Sopenharmony_ci        finally:
1017db96d56Sopenharmony_ci            in_file.close()
1027db96d56Sopenharmony_ci
1037db96d56Sopenharmony_cidef test_suite():
1047db96d56Sopenharmony_ci    return unittest.TestLoader().loadTestsFromTestCase(TextFileTestCase)
1057db96d56Sopenharmony_ci
1067db96d56Sopenharmony_ciif __name__ == "__main__":
1077db96d56Sopenharmony_ci    run_unittest(test_suite())
108