| Index: test/cctest/test-api.cc
|
| diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc
|
| index f4c618e7386f3737889207c449c7fd5991d02451..89255f239162193febb11df4bee2dbe25da3aa19 100644
|
| --- a/test/cctest/test-api.cc
|
| +++ b/test/cctest/test-api.cc
|
| @@ -8362,6 +8362,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,
|
|
|