| Index: fpdfsdk/jsapi/fxjs_v8_embeddertest.cpp
|
| diff --git a/fpdfsdk/jsapi/fxjs_v8_embeddertest.cpp b/fpdfsdk/jsapi/fxjs_v8_embeddertest.cpp
|
| index b7700c8b602a697c6b4d74e8a3ad75e7edb44fda..e89bb28113b7bc463d3bcc51257aa5a4025043f8 100644
|
| --- a/fpdfsdk/jsapi/fxjs_v8_embeddertest.cpp
|
| +++ b/fpdfsdk/jsapi/fxjs_v8_embeddertest.cpp
|
| @@ -7,11 +7,32 @@
|
|
|
| namespace {
|
|
|
| -const wchar_t kScript[] = L"fred = 7";
|
| +const double kExpected0 = 6.0;
|
| +const double kExpected1 = 7.0;
|
| +const double kExpected2 = 8.0;
|
| +
|
| +const wchar_t kScript0[] = L"fred = 6";
|
| +const wchar_t kScript1[] = L"fred = 7";
|
| +const wchar_t kScript2[] = L"fred = 8";
|
|
|
| } // namespace
|
|
|
| -class FXJSV8EmbedderTest : public JSEmbedderTest {};
|
| +class FXJSV8EmbedderTest : public JSEmbedderTest {
|
| + public:
|
| + void ExecuteInCurrentContext(const wchar_t* script) {
|
| + FXJSErr error;
|
| + int sts = FXJS_Execute(isolate(), nullptr, script, &error);
|
| + EXPECT_EQ(0, sts);
|
| + }
|
| + void CheckAssignmentInCurrentContext(double expected) {
|
| + v8::Local<v8::Object> This = FXJS_GetThisObj(isolate());
|
| + v8::Local<v8::Value> fred = FXJS_GetObjectElement(isolate(), This, L"fred");
|
| + EXPECT_TRUE(fred->IsNumber());
|
| + EXPECT_EQ(expected, fred->ToNumber(isolate()->GetCurrentContext())
|
| + .ToLocalChecked()
|
| + ->Value());
|
| + }
|
| +};
|
|
|
| TEST_F(FXJSV8EmbedderTest, Getters) {
|
| v8::Isolate::Scope isolate_scope(isolate());
|
| @@ -21,11 +42,48 @@ TEST_F(FXJSV8EmbedderTest, Getters) {
|
| v8::HandleScope handle_scope(isolate());
|
| v8::Context::Scope context_scope(GetV8Context());
|
|
|
| - FXJSErr error;
|
| - int sts = FXJS_Execute(isolate(), nullptr, kScript, &error);
|
| - EXPECT_EQ(0, sts);
|
| + ExecuteInCurrentContext(kScript1);
|
| + CheckAssignmentInCurrentContext(kExpected1);
|
| +}
|
| +
|
| +TEST_F(FXJSV8EmbedderTest, MultipleRutimes) {
|
| + v8::Isolate::Scope isolate_scope(isolate());
|
| +#ifdef PDF_ENABLE_XFA
|
| + v8::Locker locker(isolate());
|
| +#endif // PDF_ENABLE_XFA
|
| + v8::HandleScope handle_scope(isolate());
|
| +
|
| + v8::Global<v8::Context> global_context1;
|
| + std::vector<v8::Global<v8::Object>*> static_objects1;
|
| + FXJS_InitializeRuntime(isolate(), nullptr, &global_context1,
|
| + &static_objects1);
|
| +
|
| + v8::Global<v8::Context> global_context2;
|
| + std::vector<v8::Global<v8::Object>*> static_objects2;
|
| + FXJS_InitializeRuntime(isolate(), nullptr, &global_context2,
|
| + &static_objects2);
|
| +
|
| + v8::Context::Scope context_scope(GetV8Context());
|
| + ExecuteInCurrentContext(kScript0);
|
| + CheckAssignmentInCurrentContext(kExpected0);
|
| +
|
| + {
|
| + v8::Local<v8::Context> context1 =
|
| + v8::Local<v8::Context>::New(isolate(), global_context1);
|
| + v8::Context::Scope context_scope(context1);
|
| + ExecuteInCurrentContext(kScript1);
|
| + CheckAssignmentInCurrentContext(kExpected1);
|
| + }
|
| + FXJS_ReleaseRuntime(isolate(), &global_context1, &static_objects1);
|
| +
|
| + {
|
| + v8::Local<v8::Context> context2 =
|
| + v8::Local<v8::Context>::New(isolate(), global_context2);
|
| + v8::Context::Scope context_scope(context2);
|
| + ExecuteInCurrentContext(kScript2);
|
| + CheckAssignmentInCurrentContext(kExpected2);
|
| + }
|
| + FXJS_ReleaseRuntime(isolate(), &global_context2, &static_objects2);
|
|
|
| - v8::Local<v8::Object> This = FXJS_GetThisObj(isolate());
|
| - v8::Local<v8::Value> fred = FXJS_GetObjectElement(isolate(), This, L"fred");
|
| - EXPECT_TRUE(fred->IsNumber());
|
| + CheckAssignmentInCurrentContext(kExpected0);
|
| }
|
|
|