// 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 = engine()->Execute(script, &error); EXPECT_EQ(0, sts); } void CheckAssignmentInCurrentContext(double expected) { v8::Local This = engine()->GetThisObj(); v8::Local fred = engine()->GetObjectProperty(This, L"fred"); EXPECT_TRUE(fred->IsNumber()); EXPECT_EQ(expected, engine()->ToNumber(fred)); } }; 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, MultipleEngines) { v8::Isolate::Scope isolate_scope(isolate()); v8::HandleScope handle_scope(isolate()); CFXJS_Engine engine1; engine1.SetIsolate(isolate()); engine1.InitializeEngine(); CFXJS_Engine engine2; engine2.SetIsolate(isolate()); engine2.InitializeEngine(); v8::Context::Scope context_scope(GetV8Context()); ExecuteInCurrentContext(CFX_WideString(kScript0)); CheckAssignmentInCurrentContext(kExpected0); { v8::Local context1 = engine1.NewLocalContext(); v8::Context::Scope context_scope1(context1); ExecuteInCurrentContext(CFX_WideString(kScript1)); CheckAssignmentInCurrentContext(kExpected1); } engine1.ReleaseEngine(); { v8::Local context2 = engine2.NewLocalContext(); v8::Context::Scope context_scope2(context2); ExecuteInCurrentContext(CFX_WideString(kScript2)); CheckAssignmentInCurrentContext(kExpected2); } engine2.ReleaseEngine(); CheckAssignmentInCurrentContext(kExpected0); }