1*3ac0a46fSAndroid Build Coastguard Worker // Copyright 2020 The PDFium Authors 2*3ac0a46fSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*3ac0a46fSAndroid Build Coastguard Worker // found in the LICENSE file. 4*3ac0a46fSAndroid Build Coastguard Worker 5*3ac0a46fSAndroid Build Coastguard Worker #ifndef TESTING_V8_TEST_ENVIRONMENT_H_ 6*3ac0a46fSAndroid Build Coastguard Worker #define TESTING_V8_TEST_ENVIRONMENT_H_ 7*3ac0a46fSAndroid Build Coastguard Worker 8*3ac0a46fSAndroid Build Coastguard Worker #ifndef PDF_ENABLE_V8 9*3ac0a46fSAndroid Build Coastguard Worker #error "V8 must be enabled" 10*3ac0a46fSAndroid Build Coastguard Worker #endif // PDF_ENABLE_V8 11*3ac0a46fSAndroid Build Coastguard Worker 12*3ac0a46fSAndroid Build Coastguard Worker #include <memory> 13*3ac0a46fSAndroid Build Coastguard Worker 14*3ac0a46fSAndroid Build Coastguard Worker #include "fxjs/cfx_v8.h" 15*3ac0a46fSAndroid Build Coastguard Worker #include "fxjs/cfx_v8_array_buffer_allocator.h" 16*3ac0a46fSAndroid Build Coastguard Worker #include "testing/gtest/include/gtest/gtest.h" 17*3ac0a46fSAndroid Build Coastguard Worker 18*3ac0a46fSAndroid Build Coastguard Worker namespace v8 { 19*3ac0a46fSAndroid Build Coastguard Worker class Isolate; 20*3ac0a46fSAndroid Build Coastguard Worker class Platform; 21*3ac0a46fSAndroid Build Coastguard Worker class StartupData; 22*3ac0a46fSAndroid Build Coastguard Worker } // namespace v8 23*3ac0a46fSAndroid Build Coastguard Worker 24*3ac0a46fSAndroid Build Coastguard Worker class TestLoader; 25*3ac0a46fSAndroid Build Coastguard Worker 26*3ac0a46fSAndroid Build Coastguard Worker class V8TestEnvironment : public testing::Environment { 27*3ac0a46fSAndroid Build Coastguard Worker public: 28*3ac0a46fSAndroid Build Coastguard Worker explicit V8TestEnvironment(const char* exe_path); 29*3ac0a46fSAndroid Build Coastguard Worker ~V8TestEnvironment() override; 30*3ac0a46fSAndroid Build Coastguard Worker 31*3ac0a46fSAndroid Build Coastguard Worker // Note: GetInstance() does not create one if it does not exist, 32*3ac0a46fSAndroid Build Coastguard Worker // so the main program must explicitly add this enviroment. 33*3ac0a46fSAndroid Build Coastguard Worker static V8TestEnvironment* GetInstance(); 34*3ac0a46fSAndroid Build Coastguard Worker static void PumpPlatformMessageLoop(v8::Isolate* pIsolate); 35*3ac0a46fSAndroid Build Coastguard Worker 36*3ac0a46fSAndroid Build Coastguard Worker // testing::Environment: 37*3ac0a46fSAndroid Build Coastguard Worker void SetUp() override; 38*3ac0a46fSAndroid Build Coastguard Worker void TearDown() override; 39*3ac0a46fSAndroid Build Coastguard Worker platform()40*3ac0a46fSAndroid Build Coastguard Worker v8::Platform* platform() const { return platform_.get(); } isolate()41*3ac0a46fSAndroid Build Coastguard Worker v8::Isolate* isolate() const { return isolate_.get(); } 42*3ac0a46fSAndroid Build Coastguard Worker 43*3ac0a46fSAndroid Build Coastguard Worker private: 44*3ac0a46fSAndroid Build Coastguard Worker const char* const exe_path_; 45*3ac0a46fSAndroid Build Coastguard Worker std::unique_ptr<v8::StartupData> startup_data_; 46*3ac0a46fSAndroid Build Coastguard Worker std::unique_ptr<v8::Platform> platform_; 47*3ac0a46fSAndroid Build Coastguard Worker std::unique_ptr<CFX_V8ArrayBufferAllocator> array_buffer_allocator_; 48*3ac0a46fSAndroid Build Coastguard Worker std::unique_ptr<v8::Isolate, CFX_V8IsolateDeleter> isolate_; 49*3ac0a46fSAndroid Build Coastguard Worker }; 50*3ac0a46fSAndroid Build Coastguard Worker 51*3ac0a46fSAndroid Build Coastguard Worker #endif // TESTING_V8_TEST_ENVIRONMENT_H_ 52