| Index: test/cctest/test-thread-termination.cc
|
| diff --git a/test/cctest/test-thread-termination.cc b/test/cctest/test-thread-termination.cc
|
| index 13f594096f355aeb87f50f2bdf48abb4237a7897..94c739f991bc276dbf8b6b1b30f70528ab76005b 100644
|
| --- a/test/cctest/test-thread-termination.cc
|
| +++ b/test/cctest/test-thread-termination.cc
|
| @@ -51,8 +51,8 @@ void Fail(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
|
|
| void Loop(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
| CHECK(!v8::V8::IsExecutionTerminating(args.GetIsolate()));
|
| - v8::Handle<v8::String> source =
|
| - v8::String::New("try { doloop(); fail(); } catch(e) { fail(); }");
|
| + v8::Handle<v8::String> source = v8::String::NewFromUtf8(
|
| + args.GetIsolate(), "try { doloop(); fail(); } catch(e) { fail(); }");
|
| v8::Handle<v8::Value> result = v8::Script::Compile(source)->Run();
|
| CHECK(result.IsEmpty());
|
| CHECK(v8::V8::IsExecutionTerminating(args.GetIsolate()));
|
| @@ -62,19 +62,20 @@ void Loop(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
| void DoLoop(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
| v8::TryCatch try_catch;
|
| CHECK(!v8::V8::IsExecutionTerminating(args.GetIsolate()));
|
| - v8::Script::Compile(v8::String::New("function f() {"
|
| - " var term = true;"
|
| - " try {"
|
| - " while(true) {"
|
| - " if (term) terminate();"
|
| - " term = false;"
|
| - " }"
|
| - " fail();"
|
| - " } catch(e) {"
|
| - " fail();"
|
| - " }"
|
| - "}"
|
| - "f()"))->Run();
|
| + v8::Script::Compile(v8::String::NewFromUtf8(args.GetIsolate(),
|
| + "function f() {"
|
| + " var term = true;"
|
| + " try {"
|
| + " while(true) {"
|
| + " if (term) terminate();"
|
| + " term = false;"
|
| + " }"
|
| + " fail();"
|
| + " } catch(e) {"
|
| + " fail();"
|
| + " }"
|
| + "}"
|
| + "f()"))->Run();
|
| CHECK(try_catch.HasCaught());
|
| CHECK(try_catch.Exception()->IsNull());
|
| CHECK(try_catch.Message().IsEmpty());
|
| @@ -86,11 +87,12 @@ void DoLoop(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
| void DoLoopNoCall(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
| v8::TryCatch try_catch;
|
| CHECK(!v8::V8::IsExecutionTerminating(args.GetIsolate()));
|
| - v8::Script::Compile(v8::String::New("var term = true;"
|
| - "while(true) {"
|
| - " if (term) terminate();"
|
| - " term = false;"
|
| - "}"))->Run();
|
| + v8::Script::Compile(v8::String::NewFromUtf8(args.GetIsolate(),
|
| + "var term = true;"
|
| + "while(true) {"
|
| + " if (term) terminate();"
|
| + " term = false;"
|
| + "}"))->Run();
|
| CHECK(try_catch.HasCaught());
|
| CHECK(try_catch.Exception()->IsNull());
|
| CHECK(try_catch.Message().IsEmpty());
|
| @@ -100,14 +102,18 @@ void DoLoopNoCall(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
|
|
|
|
| v8::Handle<v8::ObjectTemplate> CreateGlobalTemplate(
|
| + v8::Isolate* isolate,
|
| v8::FunctionCallback terminate,
|
| v8::FunctionCallback doloop) {
|
| v8::Handle<v8::ObjectTemplate> global = v8::ObjectTemplate::New();
|
| - global->Set(v8::String::New("terminate"),
|
| + global->Set(v8::String::NewFromUtf8(isolate, "terminate"),
|
| v8::FunctionTemplate::New(terminate));
|
| - global->Set(v8::String::New("fail"), v8::FunctionTemplate::New(Fail));
|
| - global->Set(v8::String::New("loop"), v8::FunctionTemplate::New(Loop));
|
| - global->Set(v8::String::New("doloop"), v8::FunctionTemplate::New(doloop));
|
| + global->Set(v8::String::NewFromUtf8(isolate, "fail"),
|
| + v8::FunctionTemplate::New(Fail));
|
| + global->Set(v8::String::NewFromUtf8(isolate, "loop"),
|
| + v8::FunctionTemplate::New(Loop));
|
| + global->Set(v8::String::NewFromUtf8(isolate, "doloop"),
|
| + v8::FunctionTemplate::New(doloop));
|
| return global;
|
| }
|
|
|
| @@ -117,14 +123,14 @@ v8::Handle<v8::ObjectTemplate> CreateGlobalTemplate(
|
| TEST(TerminateOnlyV8ThreadFromThreadItself) {
|
| v8::HandleScope scope(CcTest::isolate());
|
| v8::Handle<v8::ObjectTemplate> global =
|
| - CreateGlobalTemplate(TerminateCurrentThread, DoLoop);
|
| + CreateGlobalTemplate(CcTest::isolate(), TerminateCurrentThread, DoLoop);
|
| v8::Handle<v8::Context> context =
|
| v8::Context::New(CcTest::isolate(), NULL, global);
|
| v8::Context::Scope context_scope(context);
|
| CHECK(!v8::V8::IsExecutionTerminating(CcTest::isolate()));
|
| // Run a loop that will be infinite if thread termination does not work.
|
| - v8::Handle<v8::String> source =
|
| - v8::String::New("try { loop(); fail(); } catch(e) { fail(); }");
|
| + v8::Handle<v8::String> source = v8::String::NewFromUtf8(
|
| + CcTest::isolate(), "try { loop(); fail(); } catch(e) { fail(); }");
|
| v8::Script::Compile(source)->Run();
|
| // Test that we can run the code again after thread termination.
|
| CHECK(!v8::V8::IsExecutionTerminating(CcTest::isolate()));
|
| @@ -136,15 +142,15 @@ TEST(TerminateOnlyV8ThreadFromThreadItself) {
|
| // itself in a loop that performs no calls.
|
| TEST(TerminateOnlyV8ThreadFromThreadItselfNoLoop) {
|
| v8::HandleScope scope(CcTest::isolate());
|
| - v8::Handle<v8::ObjectTemplate> global =
|
| - CreateGlobalTemplate(TerminateCurrentThread, DoLoopNoCall);
|
| + v8::Handle<v8::ObjectTemplate> global = CreateGlobalTemplate(
|
| + CcTest::isolate(), TerminateCurrentThread, DoLoopNoCall);
|
| v8::Handle<v8::Context> context =
|
| v8::Context::New(CcTest::isolate(), NULL, global);
|
| v8::Context::Scope context_scope(context);
|
| CHECK(!v8::V8::IsExecutionTerminating(CcTest::isolate()));
|
| // Run a loop that will be infinite if thread termination does not work.
|
| - v8::Handle<v8::String> source =
|
| - v8::String::New("try { loop(); fail(); } catch(e) { fail(); }");
|
| + v8::Handle<v8::String> source = v8::String::NewFromUtf8(
|
| + CcTest::isolate(), "try { loop(); fail(); } catch(e) { fail(); }");
|
| v8::Script::Compile(source)->Run();
|
| CHECK(!v8::V8::IsExecutionTerminating(CcTest::isolate()));
|
| // Test that we can run the code again after thread termination.
|
| @@ -176,14 +182,15 @@ TEST(TerminateOnlyV8ThreadFromOtherThread) {
|
| thread.Start();
|
|
|
| v8::HandleScope scope(CcTest::isolate());
|
| - v8::Handle<v8::ObjectTemplate> global = CreateGlobalTemplate(Signal, DoLoop);
|
| + v8::Handle<v8::ObjectTemplate> global =
|
| + CreateGlobalTemplate(CcTest::isolate(), Signal, DoLoop);
|
| v8::Handle<v8::Context> context =
|
| v8::Context::New(CcTest::isolate(), NULL, global);
|
| v8::Context::Scope context_scope(context);
|
| CHECK(!v8::V8::IsExecutionTerminating(CcTest::isolate()));
|
| // Run a loop that will be infinite if thread termination does not work.
|
| - v8::Handle<v8::String> source =
|
| - v8::String::New("try { loop(); fail(); } catch(e) { fail(); }");
|
| + v8::Handle<v8::String> source = v8::String::NewFromUtf8(
|
| + CcTest::isolate(), "try { loop(); fail(); } catch(e) { fail(); }");
|
| v8::Script::Compile(source)->Run();
|
|
|
| thread.Join();
|
| @@ -202,7 +209,8 @@ void TerminateOrReturnObject(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
| return;
|
| }
|
| v8::Local<v8::Object> result = v8::Object::New();
|
| - result->Set(v8::String::New("x"), v8::Integer::New(42));
|
| + result->Set(v8::String::NewFromUtf8(args.GetIsolate(), "x"),
|
| + v8::Integer::New(42));
|
| args.GetReturnValue().Set(result);
|
| }
|
|
|
| @@ -210,17 +218,19 @@ void TerminateOrReturnObject(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
| void LoopGetProperty(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
| v8::TryCatch try_catch;
|
| CHECK(!v8::V8::IsExecutionTerminating(args.GetIsolate()));
|
| - v8::Script::Compile(v8::String::New("function f() {"
|
| - " try {"
|
| - " while(true) {"
|
| - " terminate_or_return_object().x;"
|
| - " }"
|
| - " fail();"
|
| - " } catch(e) {"
|
| - " fail();"
|
| - " }"
|
| - "}"
|
| - "f()"))->Run();
|
| + v8::Script::Compile(
|
| + v8::String::NewFromUtf8(args.GetIsolate(),
|
| + "function f() {"
|
| + " try {"
|
| + " while(true) {"
|
| + " terminate_or_return_object().x;"
|
| + " }"
|
| + " fail();"
|
| + " } catch(e) {"
|
| + " fail();"
|
| + " }"
|
| + "}"
|
| + "f()"))->Run();
|
| CHECK(try_catch.HasCaught());
|
| CHECK(try_catch.Exception()->IsNull());
|
| CHECK(try_catch.Message().IsEmpty());
|
| @@ -234,10 +244,12 @@ void LoopGetProperty(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
| TEST(TerminateLoadICException) {
|
| v8::HandleScope scope(CcTest::isolate());
|
| v8::Handle<v8::ObjectTemplate> global = v8::ObjectTemplate::New();
|
| - global->Set(v8::String::New("terminate_or_return_object"),
|
| - v8::FunctionTemplate::New(TerminateOrReturnObject));
|
| - global->Set(v8::String::New("fail"), v8::FunctionTemplate::New(Fail));
|
| - global->Set(v8::String::New("loop"),
|
| + global->Set(
|
| + v8::String::NewFromUtf8(CcTest::isolate(), "terminate_or_return_object"),
|
| + v8::FunctionTemplate::New(TerminateOrReturnObject));
|
| + global->Set(v8::String::NewFromUtf8(CcTest::isolate(), "fail"),
|
| + v8::FunctionTemplate::New(Fail));
|
| + global->Set(v8::String::NewFromUtf8(CcTest::isolate(), "loop"),
|
| v8::FunctionTemplate::New(LoopGetProperty));
|
|
|
| v8::Handle<v8::Context> context =
|
| @@ -245,8 +257,8 @@ TEST(TerminateLoadICException) {
|
| v8::Context::Scope context_scope(context);
|
| CHECK(!v8::V8::IsExecutionTerminating(CcTest::isolate()));
|
| // Run a loop that will be infinite if thread termination does not work.
|
| - v8::Handle<v8::String> source =
|
| - v8::String::New("try { loop(); fail(); } catch(e) { fail(); }");
|
| + v8::Handle<v8::String> source = v8::String::NewFromUtf8(
|
| + CcTest::isolate(), "try { loop(); fail(); } catch(e) { fail(); }");
|
| call_count = 0;
|
| v8::Script::Compile(source)->Run();
|
| // Test that we can run the code again after thread termination.
|
| @@ -259,25 +271,28 @@ TEST(TerminateLoadICException) {
|
| void ReenterAfterTermination(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
| v8::TryCatch try_catch;
|
| CHECK(!v8::V8::IsExecutionTerminating(args.GetIsolate()));
|
| - v8::Script::Compile(v8::String::New("function f() {"
|
| - " var term = true;"
|
| - " try {"
|
| - " while(true) {"
|
| - " if (term) terminate();"
|
| - " term = false;"
|
| - " }"
|
| - " fail();"
|
| - " } catch(e) {"
|
| - " fail();"
|
| - " }"
|
| - "}"
|
| - "f()"))->Run();
|
| + v8::Script::Compile(v8::String::NewFromUtf8(args.GetIsolate(),
|
| + "function f() {"
|
| + " var term = true;"
|
| + " try {"
|
| + " while(true) {"
|
| + " if (term) terminate();"
|
| + " term = false;"
|
| + " }"
|
| + " fail();"
|
| + " } catch(e) {"
|
| + " fail();"
|
| + " }"
|
| + "}"
|
| + "f()"))->Run();
|
| CHECK(try_catch.HasCaught());
|
| CHECK(try_catch.Exception()->IsNull());
|
| CHECK(try_catch.Message().IsEmpty());
|
| CHECK(!try_catch.CanContinue());
|
| CHECK(v8::V8::IsExecutionTerminating(args.GetIsolate()));
|
| - v8::Script::Compile(v8::String::New("function f() { fail(); } f()"))->Run();
|
| + v8::Script::Compile(v8::String::NewFromUtf8(args.GetIsolate(),
|
| + "function f() { fail(); } f()"))
|
| + ->Run();
|
| }
|
|
|
|
|
| @@ -285,31 +300,36 @@ void ReenterAfterTermination(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
| // (has not yet unwound the 0-level JS frame) does not crash.
|
| TEST(TerminateAndReenterFromThreadItself) {
|
| v8::HandleScope scope(CcTest::isolate());
|
| - v8::Handle<v8::ObjectTemplate> global =
|
| - CreateGlobalTemplate(TerminateCurrentThread, ReenterAfterTermination);
|
| + v8::Handle<v8::ObjectTemplate> global = CreateGlobalTemplate(
|
| + CcTest::isolate(), TerminateCurrentThread, ReenterAfterTermination);
|
| v8::Handle<v8::Context> context =
|
| v8::Context::New(CcTest::isolate(), NULL, global);
|
| v8::Context::Scope context_scope(context);
|
| CHECK(!v8::V8::IsExecutionTerminating());
|
| - v8::Handle<v8::String> source =
|
| - v8::String::New("try { loop(); fail(); } catch(e) { fail(); }");
|
| + v8::Handle<v8::String> source = v8::String::NewFromUtf8(
|
| + CcTest::isolate(), "try { loop(); fail(); } catch(e) { fail(); }");
|
| v8::Script::Compile(source)->Run();
|
| CHECK(!v8::V8::IsExecutionTerminating(CcTest::isolate()));
|
| // Check we can run JS again after termination.
|
| - CHECK(v8::Script::Compile(v8::String::New("function f() { return true; }"
|
| - "f()"))->Run()->IsTrue());
|
| + CHECK(v8::Script::Compile(
|
| + v8::String::NewFromUtf8(CcTest::isolate(),
|
| + "function f() { return true; }"
|
| + "f()"))
|
| + ->Run()
|
| + ->IsTrue());
|
| }
|
|
|
|
|
| void DoLoopCancelTerminate(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
| v8::TryCatch try_catch;
|
| CHECK(!v8::V8::IsExecutionTerminating());
|
| - v8::Script::Compile(v8::String::New("var term = true;"
|
| - "while(true) {"
|
| - " if (term) terminate();"
|
| - " term = false;"
|
| - "}"
|
| - "fail();"))->Run();
|
| + v8::Script::Compile(v8::String::NewFromUtf8(args.GetIsolate(),
|
| + "var term = true;"
|
| + "while(true) {"
|
| + " if (term) terminate();"
|
| + " term = false;"
|
| + "}"
|
| + "fail();"))->Run();
|
| CHECK(try_catch.HasCaught());
|
| CHECK(try_catch.Exception()->IsNull());
|
| CHECK(try_catch.Message().IsEmpty());
|
| @@ -326,13 +346,13 @@ void DoLoopCancelTerminate(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
| TEST(TerminateCancelTerminateFromThreadItself) {
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope scope(isolate);
|
| - v8::Handle<v8::ObjectTemplate> global =
|
| - CreateGlobalTemplate(TerminateCurrentThread, DoLoopCancelTerminate);
|
| + v8::Handle<v8::ObjectTemplate> global = CreateGlobalTemplate(
|
| + isolate, TerminateCurrentThread, DoLoopCancelTerminate);
|
| v8::Handle<v8::Context> context = v8::Context::New(isolate, NULL, global);
|
| v8::Context::Scope context_scope(context);
|
| CHECK(!v8::V8::IsExecutionTerminating(CcTest::isolate()));
|
| - v8::Handle<v8::String> source =
|
| - v8::String::New("try { doloop(); } catch(e) { fail(); } 'completed';");
|
| + v8::Handle<v8::String> source = v8::String::NewFromUtf8(
|
| + isolate, "try { doloop(); } catch(e) { fail(); } 'completed';");
|
| // Check that execution completed with correct return value.
|
| CHECK(v8::Script::Compile(source)->Run()->Equals(v8_str("completed")));
|
| }
|
|
|