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