Index: fpdfsdk/src/jsapi/fxjs_v8_embeddertest.cpp |
diff --git a/fpdfsdk/src/jsapi/fxjs_v8_embeddertest.cpp b/fpdfsdk/src/jsapi/fxjs_v8_embeddertest.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..cb4c3fe072ee7935e15ffa5e06f2a66d40457d8d |
--- /dev/null |
+++ b/fpdfsdk/src/jsapi/fxjs_v8_embeddertest.cpp |
@@ -0,0 +1,69 @@ |
+// 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 "../../../core/include/fpdfapi/fpdf_parser.h" |
+#include "../../../testing/embedder_test.h" |
+#include "../../include/fsdk_mgr.h" |
+#include "../../include/javascript/JS_Runtime.h" |
+#include "../../include/jsapi/fxjs_v8.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace { |
+ |
+const wchar_t kScript[] = L"fred = 7"; |
+ |
+} // namespace |
+ |
+class FXJSV8Embeddertest : public EmbedderTest { |
+ public: |
+ FXJSV8Embeddertest() : m_pIsolate(nullptr) {} |
+ ~FXJSV8Embeddertest() override {} |
+ |
+ void SetUp() override { |
+ EmbedderTest::SetUp(); |
+ m_pAllocator.reset(new JS_ArrayBufferAllocator()); |
+ |
+ v8::Isolate::CreateParams params; |
+ params.array_buffer_allocator = m_pAllocator.get(); |
+ m_pIsolate = v8::Isolate::New(params); |
+ |
+ v8::Isolate::Scope isolate_scope(m_pIsolate); |
+ v8::HandleScope handle_scope(m_pIsolate); |
+ JS_Initialize(0); |
+ JS_PrepareIsolate(m_pIsolate); |
+ JS_InitializeRuntime(m_pIsolate, nullptr, nullptr, m_pPersistentContext); |
+ } |
+ |
+ void TearDown() override { |
+ JS_ReleaseRuntime(m_pIsolate, m_pPersistentContext); |
+ JS_Release(); |
+ EmbedderTest::TearDown(); |
+ } |
+ |
+ v8::Isolate* isolate() const { return m_pIsolate; } |
+ v8::Local<v8::Context> GetV8Context() { |
+ return v8::Local<v8::Context>::New(m_pIsolate, m_pPersistentContext); |
+ } |
+ |
+ private: |
+ v8::Isolate* m_pIsolate; |
+ v8::Global<v8::Context> m_pPersistentContext; |
+ nonstd::unique_ptr<v8::ArrayBuffer::Allocator> m_pAllocator; |
+}; |
+ |
+TEST_F(FXJSV8Embeddertest, Getters) { |
+ v8::Isolate::Scope isolate_scope(isolate()); |
+ v8::HandleScope handle_scope(isolate()); |
+ v8::Context::Scope context_scope(GetV8Context()); |
+ |
+ FXJSErr error; |
+ CFX_WideString wsInfo; |
+ CFX_WideString wsScript(kScript); |
+ int sts = JS_Execute(nullptr, nullptr, kScript, wcslen(kScript), &error); |
+ EXPECT_EQ(0, sts); |
+ |
+ v8::Local<v8::Object> This = JS_GetThisObj(isolate()); |
+ v8::Local<v8::Value> fred = JS_GetObjectElement(isolate(), This, L"fred"); |
+ EXPECT_TRUE(fred->IsNumber()); |
+} |