| // 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<v8::Object> This = engine()->GetThisObj(); | |
| v8::Local<v8::Value> 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(isolate()); | |
| engine1.InitializeEngine(); | |
| CFXJS_Engine engine2(isolate()); | |
| engine2.InitializeEngine(); | |
| v8::Context::Scope context_scope(GetV8Context()); | |
| ExecuteInCurrentContext(CFX_WideString(kScript0)); | |
| CheckAssignmentInCurrentContext(kExpected0); | |
| { | |
| v8::Local<v8::Context> context1 = engine1.NewLocalContext(); | |
| v8::Context::Scope context_scope1(context1); | |
| ExecuteInCurrentContext(CFX_WideString(kScript1)); | |
| CheckAssignmentInCurrentContext(kExpected1); | |
| } | |
| engine1.ReleaseEngine(); | |
| { | |
| v8::Local<v8::Context> context2 = engine2.NewLocalContext(); | |
| v8::Context::Scope context_scope2(context2); | |
| ExecuteInCurrentContext(CFX_WideString(kScript2)); | |
| CheckAssignmentInCurrentContext(kExpected2); | |
| } | |
| engine2.ReleaseEngine(); | |
| CheckAssignmentInCurrentContext(kExpected0); | |
| } |