diff options
Diffstat (limited to 'deps/v8/test/cctest/compiler/test-run-jsexceptions.cc')
-rw-r--r-- | deps/v8/test/cctest/compiler/test-run-jsexceptions.cc | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/deps/v8/test/cctest/compiler/test-run-jsexceptions.cc b/deps/v8/test/cctest/compiler/test-run-jsexceptions.cc index 0712ab6205..74990daac9 100644 --- a/deps/v8/test/cctest/compiler/test-run-jsexceptions.cc +++ b/deps/v8/test/cctest/compiler/test-run-jsexceptions.cc @@ -10,6 +10,7 @@ using namespace v8::internal; using namespace v8::internal::compiler; TEST(Throw) { + i::FLAG_turbo_exceptions = true; FunctionTester T("(function(a,b) { if (a) { throw b; } else { return b; }})"); T.CheckThrows(T.true_value(), T.NewObject("new Error")); @@ -43,3 +44,117 @@ TEST(ThrowSourcePosition) { CHECK_EQ(4, message->GetLineNumber()); CHECK_EQ(95, message->GetStartPosition()); } + + +// TODO(mstarzinger): Increase test coverage by having similar tests within the +// mjsunit suite to also test integration with other components (e.g. OSR). + + +TEST(Catch) { + i::FLAG_turbo_exceptions = true; + const char* src = + "(function(a,b) {" + " var r = '-';" + " try {" + " r += 'A-';" + " throw 'B-';" + " } catch (e) {" + " r += e;" + " }" + " return r;" + "})"; + FunctionTester T(src); + + T.CheckCall(T.Val("-A-B-")); +} + + +TEST(CatchNested) { + i::FLAG_turbo_exceptions = true; + const char* src = + "(function(a,b) {" + " var r = '-';" + " try {" + " r += 'A-';" + " throw 'C-';" + " } catch (e) {" + " try {" + " throw 'B-';" + " } catch (e) {" + " r += e;" + " }" + " r += e;" + " }" + " return r;" + "})"; + FunctionTester T(src); + + T.CheckCall(T.Val("-A-B-C-")); +} + + +TEST(CatchBreak) { + i::FLAG_turbo_exceptions = true; + const char* src = + "(function(a,b) {" + " var r = '-';" + " L: try {" + " r += 'A-';" + " if (a) break L;" + " r += 'B-';" + " throw 'C-';" + " } catch (e) {" + " if (b) break L;" + " r += e;" + " }" + " r += 'D-';" + " return r;" + "})"; + FunctionTester T(src); + + T.CheckCall(T.Val("-A-D-"), T.true_value(), T.false_value()); + T.CheckCall(T.Val("-A-B-D-"), T.false_value(), T.true_value()); + T.CheckCall(T.Val("-A-B-C-D-"), T.false_value(), T.false_value()); +} + + +TEST(Finally) { + i::FLAG_turbo_exceptions = true; + const char* src = + "(function(a,b) {" + " var r = '-';" + " try {" + " r += 'A-';" + " } finally {" + " r += 'B-';" + " }" + " return r;" + "})"; + FunctionTester T(src); + + T.CheckCall(T.Val("-A-B-")); +} + + +TEST(FinallyBreak) { + i::FLAG_turbo_exceptions = true; + const char* src = + "(function(a,b) {" + " var r = '-';" + " L: try {" + " r += 'A-';" + " if (a) return r;" + " r += 'B-';" + " if (b) break L;" + " r += 'C-';" + " } finally {" + " r += 'D-';" + " }" + " return r;" + "})"; + FunctionTester T(src); + + T.CheckCall(T.Val("-A-"), T.true_value(), T.false_value()); + T.CheckCall(T.Val("-A-B-D-"), T.false_value(), T.true_value()); + T.CheckCall(T.Val("-A-B-C-D-"), T.false_value(), T.false_value()); +} |