Chromium Code Reviews| Index: test/cctest/test-api.cc |
| diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc |
| index 5f82bd7f2e7ee184975588e4de3e6b7fcebbe325..16e83f598f676f47959a3fb583c0291cbf8527c9 100644 |
| --- a/test/cctest/test-api.cc |
| +++ b/test/cctest/test-api.cc |
| @@ -8377,6 +8377,40 @@ 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"); |
|
Michael Starzinger
2014/06/05 11:02:08
Let's call "try_catch.Reset()" here before running
|
| + 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, |