Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: test/cctest/test-parsing.cc

Issue 2207923002: Properly handle exceptions in cctests (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | test/fuzzer/regexp.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 1629 matching lines...) Expand 10 before | Expand all | Expand 10 after
1640 1640
1641 // Check that preparsing fails iff parsing fails. 1641 // Check that preparsing fails iff parsing fails.
1642 if (function == NULL) { 1642 if (function == NULL) {
1643 // Extract exception from the parser. 1643 // Extract exception from the parser.
1644 CHECK(isolate->has_pending_exception()); 1644 CHECK(isolate->has_pending_exception());
1645 i::Handle<i::JSObject> exception_handle( 1645 i::Handle<i::JSObject> exception_handle(
1646 i::JSObject::cast(isolate->pending_exception())); 1646 i::JSObject::cast(isolate->pending_exception()));
1647 i::Handle<i::String> message_string = i::Handle<i::String>::cast( 1647 i::Handle<i::String> message_string = i::Handle<i::String>::cast(
1648 i::JSReceiver::GetProperty(isolate, exception_handle, "message") 1648 i::JSReceiver::GetProperty(isolate, exception_handle, "message")
1649 .ToHandleChecked()); 1649 .ToHandleChecked());
1650 isolate->clear_pending_exception();
1650 1651
1651 if (result == kSuccess) { 1652 if (result == kSuccess) {
1652 v8::base::OS::Print( 1653 v8::base::OS::Print(
1653 "Parser failed on:\n" 1654 "Parser failed on:\n"
1654 "\t%s\n" 1655 "\t%s\n"
1655 "with error:\n" 1656 "with error:\n"
1656 "\t%s\n" 1657 "\t%s\n"
1657 "However, we expected no error.", 1658 "However, we expected no error.",
1658 source->ToCString().get(), message_string->ToCString().get()); 1659 source->ToCString().get(), message_string->ToCString().get());
1659 CHECK(false); 1660 CHECK(false);
(...skipping 3948 matching lines...) Expand 10 before | Expand all | Expand 10 after
5608 i::Zone zone(CcTest::i_isolate()->allocator()); 5609 i::Zone zone(CcTest::i_isolate()->allocator());
5609 i::ParseInfo info(&zone, script); 5610 i::ParseInfo info(&zone, script);
5610 i::Parser parser(&info); 5611 i::Parser parser(&info);
5611 info.set_module(); 5612 info.set_module();
5612 if (!parser.Parse(&info)) { 5613 if (!parser.Parse(&info)) {
5613 i::Handle<i::JSObject> exception_handle( 5614 i::Handle<i::JSObject> exception_handle(
5614 i::JSObject::cast(isolate->pending_exception())); 5615 i::JSObject::cast(isolate->pending_exception()));
5615 i::Handle<i::String> message_string = i::Handle<i::String>::cast( 5616 i::Handle<i::String> message_string = i::Handle<i::String>::cast(
5616 i::JSReceiver::GetProperty(isolate, exception_handle, "message") 5617 i::JSReceiver::GetProperty(isolate, exception_handle, "message")
5617 .ToHandleChecked()); 5618 .ToHandleChecked());
5619 isolate->clear_pending_exception();
5618 5620
5619 v8::base::OS::Print( 5621 v8::base::OS::Print(
5620 "Parser failed on:\n" 5622 "Parser failed on:\n"
5621 "\t%s\n" 5623 "\t%s\n"
5622 "with error:\n" 5624 "with error:\n"
5623 "\t%s\n" 5625 "\t%s\n"
5624 "However, we expected no error.", 5626 "However, we expected no error.",
5625 source->ToCString().get(), message_string->ToCString().get()); 5627 source->ToCString().get(), message_string->ToCString().get());
5626 CHECK(false); 5628 CHECK(false);
5627 } 5629 }
5628 } 5630 }
5629 5631
5630 // And that parsing a script does not. 5632 // And that parsing a script does not.
5631 { 5633 {
5632 i::Handle<i::Script> script = factory->NewScript(source); 5634 i::Handle<i::Script> script = factory->NewScript(source);
5633 i::Zone zone(CcTest::i_isolate()->allocator()); 5635 i::Zone zone(CcTest::i_isolate()->allocator());
5634 i::ParseInfo info(&zone, script); 5636 i::ParseInfo info(&zone, script);
5635 i::Parser parser(&info); 5637 i::Parser parser(&info);
5636 info.set_global(); 5638 info.set_global();
5637 CHECK(!parser.Parse(&info)); 5639 CHECK(!parser.Parse(&info));
5640 isolate->clear_pending_exception();
5638 } 5641 }
5639 } 5642 }
5640 } 5643 }
5641 5644
5642 5645
5643 TEST(ImportExportParsingErrors) { 5646 TEST(ImportExportParsingErrors) {
5644 // clang-format off 5647 // clang-format off
5645 const char* kErrorSources[] = { 5648 const char* kErrorSources[] = {
5646 "export {", 5649 "export {",
5647 "var a; export { a", 5650 "var a; export { a",
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
5720 for (unsigned i = 0; i < arraysize(kErrorSources); ++i) { 5723 for (unsigned i = 0; i < arraysize(kErrorSources); ++i) {
5721 i::Handle<i::String> source = 5724 i::Handle<i::String> source =
5722 factory->NewStringFromAsciiChecked(kErrorSources[i]); 5725 factory->NewStringFromAsciiChecked(kErrorSources[i]);
5723 5726
5724 i::Handle<i::Script> script = factory->NewScript(source); 5727 i::Handle<i::Script> script = factory->NewScript(source);
5725 i::Zone zone(CcTest::i_isolate()->allocator()); 5728 i::Zone zone(CcTest::i_isolate()->allocator());
5726 i::ParseInfo info(&zone, script); 5729 i::ParseInfo info(&zone, script);
5727 i::Parser parser(&info); 5730 i::Parser parser(&info);
5728 info.set_module(); 5731 info.set_module();
5729 CHECK(!parser.Parse(&info)); 5732 CHECK(!parser.Parse(&info));
5733 isolate->clear_pending_exception();
5730 } 5734 }
5731 } 5735 }
5732 5736
5733 TEST(ModuleTopLevelFunctionDecl) { 5737 TEST(ModuleTopLevelFunctionDecl) {
5734 // clang-format off 5738 // clang-format off
5735 const char* kErrorSources[] = { 5739 const char* kErrorSources[] = {
5736 "function f() {} function f() {}", 5740 "function f() {} function f() {}",
5737 "var f; function f() {}", 5741 "var f; function f() {}",
5738 "function f() {} var f;", 5742 "function f() {} var f;",
5739 "function* f() {} function* f() {}", 5743 "function* f() {} function* f() {}",
(...skipping 17 matching lines...) Expand all
5757 for (unsigned i = 0; i < arraysize(kErrorSources); ++i) { 5761 for (unsigned i = 0; i < arraysize(kErrorSources); ++i) {
5758 i::Handle<i::String> source = 5762 i::Handle<i::String> source =
5759 factory->NewStringFromAsciiChecked(kErrorSources[i]); 5763 factory->NewStringFromAsciiChecked(kErrorSources[i]);
5760 5764
5761 i::Handle<i::Script> script = factory->NewScript(source); 5765 i::Handle<i::Script> script = factory->NewScript(source);
5762 i::Zone zone(CcTest::i_isolate()->allocator()); 5766 i::Zone zone(CcTest::i_isolate()->allocator());
5763 i::ParseInfo info(&zone, script); 5767 i::ParseInfo info(&zone, script);
5764 i::Parser parser(&info); 5768 i::Parser parser(&info);
5765 info.set_module(); 5769 info.set_module();
5766 CHECK(!parser.Parse(&info)); 5770 CHECK(!parser.Parse(&info));
5771 isolate->clear_pending_exception();
5767 } 5772 }
5768 } 5773 }
5769 5774
5770 TEST(ModuleAwaitReserved) { 5775 TEST(ModuleAwaitReserved) {
5771 // clang-format off 5776 // clang-format off
5772 const char* kErrorSources[] = { 5777 const char* kErrorSources[] = {
5773 "await;", 5778 "await;",
5774 "await: ;", 5779 "await: ;",
5775 "var await;", 5780 "var await;",
5776 "var [await] = [];", 5781 "var [await] = [];",
(...skipping 2200 matching lines...) Expand 10 before | Expand all | Expand 10 after
7977 "(a,);", 7982 "(a,);",
7978 "(a,b,c,);", 7983 "(a,b,c,);",
7979 NULL 7984 NULL
7980 }; 7985 };
7981 // clang-format on 7986 // clang-format on
7982 7987
7983 static const ParserFlag always_flags[] = {kAllowHarmonyTrailingCommas}; 7988 static const ParserFlag always_flags[] = {kAllowHarmonyTrailingCommas};
7984 RunParserSyncTest(context_data, data, kError, NULL, 0, always_flags, 7989 RunParserSyncTest(context_data, data, kError, NULL, 0, always_flags,
7985 arraysize(always_flags)); 7990 arraysize(always_flags));
7986 } 7991 }
OLDNEW
« no previous file with comments | « no previous file | test/fuzzer/regexp.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698