diff options
Diffstat (limited to 'fxjs/fxjs_v8_embeddertest.cpp')
-rw-r--r-- | fxjs/fxjs_v8_embeddertest.cpp | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/fxjs/fxjs_v8_embeddertest.cpp b/fxjs/fxjs_v8_embeddertest.cpp new file mode 100644 index 0000000000..b33ddca32d --- /dev/null +++ b/fxjs/fxjs_v8_embeddertest.cpp @@ -0,0 +1,83 @@ +// Copyright 2015 PDFium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "testing/gtest/include/gtest/gtest.h" +#include "testing/js_embedder_test.h" + +namespace { + +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 { + public: + void ExecuteInCurrentContext(const CFX_WideString& script) { + FXJSErr error; + int sts = FXJS_Execute(isolate(), 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()); + v8::HandleScope handle_scope(isolate()); + v8::Context::Scope context_scope(GetV8Context()); + + ExecuteInCurrentContext(CFX_WideString(kScript1)); + CheckAssignmentInCurrentContext(kExpected1); +} + +TEST_F(FXJSV8EmbedderTest, MultipleRutimes) { + v8::Isolate::Scope isolate_scope(isolate()); + 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(CFX_WideString(kScript0)); + CheckAssignmentInCurrentContext(kExpected0); + + { + v8::Local<v8::Context> context1 = + v8::Local<v8::Context>::New(isolate(), global_context1); + v8::Context::Scope context_scope1(context1); + ExecuteInCurrentContext(CFX_WideString(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_scope2(context2); + ExecuteInCurrentContext(CFX_WideString(kScript2)); + CheckAssignmentInCurrentContext(kExpected2); + } + FXJS_ReleaseRuntime(isolate(), &global_context2, &static_objects2); + + CheckAssignmentInCurrentContext(kExpected0); +} |