Index: test/cctest/test-api.cc |
diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc |
index 5f82bd7f2e7ee184975588e4de3e6b7fcebbe325..e5707c7b578e49299323a80f14993410dfa3991c 100644 |
--- a/test/cctest/test-api.cc |
+++ b/test/cctest/test-api.cc |
@@ -8377,6 +8377,41 @@ TEST(TryCatchFinallyUsingTryCatchHandler) { |
} |
+void CEvaluate(const v8::FunctionCallbackInfo<v8::Value>& args) { |
+ v8::HandleScope scope(args.GetIsolate()); |
+ CompileRun(args[0]->ToString()); |
+} |
+ |
+ |
+TEST(TryCatchFinallyStoresMessageUsingTryCatchHandler) { |
+ v8::Isolate* isolate = CcTest::isolate(); |
+ v8::HandleScope scope(isolate); |
+ Local<ObjectTemplate> templ = ObjectTemplate::New(isolate); |
+ templ->Set(v8_str("CEvaluate"), |
+ v8::FunctionTemplate::New(isolate, CEvaluate)); |
+ LocalContext context(0, templ); |
+ v8::TryCatch try_catch; |
+ CompileRun("try {" |
+ " CEvaluate('throw 1;');" |
+ "} finally {" |
+ "}"); |
+ CHECK(try_catch.HasCaught()); |
+ CHECK(!try_catch.Message().IsEmpty()); |
+ String::Utf8Value exception_value(try_catch.Exception()); |
+ CHECK_EQ(*exception_value, "1"); |
+ try_catch.Reset(); |
+ CompileRun("try {" |
+ " CEvaluate('throw 1;');" |
+ "} finally {" |
+ " throw 2;" |
+ "}"); |
+ CHECK(try_catch.HasCaught()); |
+ CHECK(!try_catch.Message().IsEmpty()); |
+ String::Utf8Value finally_exception_value(try_catch.Exception()); |
+ CHECK_EQ(*finally_exception_value, "2"); |
+} |
+ |
+ |
// For use within the TestSecurityHandler() test. |
static bool g_security_callback_result = false; |
static bool NamedSecurityTestCallback(Local<v8::Object> global, |