17db96d56Sopenharmony_ci"""test script for a few new invalid token catches"""
27db96d56Sopenharmony_ci
37db96d56Sopenharmony_ciimport sys
47db96d56Sopenharmony_cifrom test import support
57db96d56Sopenharmony_cifrom test.support import os_helper
67db96d56Sopenharmony_cifrom test.support import script_helper
77db96d56Sopenharmony_ciimport unittest
87db96d56Sopenharmony_ci
97db96d56Sopenharmony_ciclass EOFTestCase(unittest.TestCase):
107db96d56Sopenharmony_ci    def test_EOF_single_quote(self):
117db96d56Sopenharmony_ci        expect = "unterminated string literal (detected at line 1) (<string>, line 1)"
127db96d56Sopenharmony_ci        for quote in ("'", "\""):
137db96d56Sopenharmony_ci            try:
147db96d56Sopenharmony_ci                eval(f"""{quote}this is a test\
157db96d56Sopenharmony_ci                """)
167db96d56Sopenharmony_ci            except SyntaxError as msg:
177db96d56Sopenharmony_ci                self.assertEqual(str(msg), expect)
187db96d56Sopenharmony_ci                self.assertEqual(msg.offset, 1)
197db96d56Sopenharmony_ci            else:
207db96d56Sopenharmony_ci                raise support.TestFailed
217db96d56Sopenharmony_ci
227db96d56Sopenharmony_ci    def test_EOFS(self):
237db96d56Sopenharmony_ci        expect = ("unterminated triple-quoted string literal (detected at line 1) (<string>, line 1)")
247db96d56Sopenharmony_ci        try:
257db96d56Sopenharmony_ci            eval("""'''this is a test""")
267db96d56Sopenharmony_ci        except SyntaxError as msg:
277db96d56Sopenharmony_ci            self.assertEqual(str(msg), expect)
287db96d56Sopenharmony_ci            self.assertEqual(msg.offset, 1)
297db96d56Sopenharmony_ci        else:
307db96d56Sopenharmony_ci            raise support.TestFailed
317db96d56Sopenharmony_ci
327db96d56Sopenharmony_ci    def test_EOFS_with_file(self):
337db96d56Sopenharmony_ci        expect = ("(<string>, line 1)")
347db96d56Sopenharmony_ci        with os_helper.temp_dir() as temp_dir:
357db96d56Sopenharmony_ci            file_name = script_helper.make_script(temp_dir, 'foo', """'''this is \na \ntest""")
367db96d56Sopenharmony_ci            rc, out, err = script_helper.assert_python_failure(file_name)
377db96d56Sopenharmony_ci        self.assertIn(b'unterminated triple-quoted string literal (detected at line 3)', err)
387db96d56Sopenharmony_ci
397db96d56Sopenharmony_ci    def test_eof_with_line_continuation(self):
407db96d56Sopenharmony_ci        expect = "unexpected EOF while parsing (<string>, line 1)"
417db96d56Sopenharmony_ci        try:
427db96d56Sopenharmony_ci            compile('"\\xhh" \\',  '<string>', 'exec', dont_inherit=True)
437db96d56Sopenharmony_ci        except SyntaxError as msg:
447db96d56Sopenharmony_ci            self.assertEqual(str(msg), expect)
457db96d56Sopenharmony_ci        else:
467db96d56Sopenharmony_ci            raise support.TestFailed
477db96d56Sopenharmony_ci
487db96d56Sopenharmony_ci    def test_line_continuation_EOF(self):
497db96d56Sopenharmony_ci        """A continuation at the end of input must be an error; bpo2180."""
507db96d56Sopenharmony_ci        expect = 'unexpected EOF while parsing (<string>, line 1)'
517db96d56Sopenharmony_ci        with self.assertRaises(SyntaxError) as excinfo:
527db96d56Sopenharmony_ci            exec('x = 5\\')
537db96d56Sopenharmony_ci        self.assertEqual(str(excinfo.exception), expect)
547db96d56Sopenharmony_ci        with self.assertRaises(SyntaxError) as excinfo:
557db96d56Sopenharmony_ci            exec('\\')
567db96d56Sopenharmony_ci        self.assertEqual(str(excinfo.exception), expect)
577db96d56Sopenharmony_ci
587db96d56Sopenharmony_ci    @unittest.skipIf(not sys.executable, "sys.executable required")
597db96d56Sopenharmony_ci    def test_line_continuation_EOF_from_file_bpo2180(self):
607db96d56Sopenharmony_ci        """Ensure tok_nextc() does not add too many ending newlines."""
617db96d56Sopenharmony_ci        with os_helper.temp_dir() as temp_dir:
627db96d56Sopenharmony_ci            file_name = script_helper.make_script(temp_dir, 'foo', '\\')
637db96d56Sopenharmony_ci            rc, out, err = script_helper.assert_python_failure(file_name)
647db96d56Sopenharmony_ci            self.assertIn(b'unexpected EOF while parsing', err)
657db96d56Sopenharmony_ci            self.assertIn(b'line 1', err)
667db96d56Sopenharmony_ci            self.assertIn(b'\\', err)
677db96d56Sopenharmony_ci
687db96d56Sopenharmony_ci            file_name = script_helper.make_script(temp_dir, 'foo', 'y = 6\\')
697db96d56Sopenharmony_ci            rc, out, err = script_helper.assert_python_failure(file_name)
707db96d56Sopenharmony_ci            self.assertIn(b'unexpected EOF while parsing', err)
717db96d56Sopenharmony_ci            self.assertIn(b'line 1', err)
727db96d56Sopenharmony_ci            self.assertIn(b'y = 6\\', err)
737db96d56Sopenharmony_ci
747db96d56Sopenharmony_ciif __name__ == "__main__":
757db96d56Sopenharmony_ci    unittest.main()
76