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 #include "testing/embedder_test_environment.h" 6*3ac0a46fSAndroid Build Coastguard Worker 7*3ac0a46fSAndroid Build Coastguard Worker #include <ostream> 8*3ac0a46fSAndroid Build Coastguard Worker 9*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/fx_system.h" 10*3ac0a46fSAndroid Build Coastguard Worker #include "public/fpdfview.h" 11*3ac0a46fSAndroid Build Coastguard Worker #include "testing/command_line_helpers.h" 12*3ac0a46fSAndroid Build Coastguard Worker #include "third_party/base/check.h" 13*3ac0a46fSAndroid Build Coastguard Worker 14*3ac0a46fSAndroid Build Coastguard Worker #ifdef PDF_ENABLE_V8 15*3ac0a46fSAndroid Build Coastguard Worker #include "testing/v8_test_environment.h" 16*3ac0a46fSAndroid Build Coastguard Worker #endif // PDF_ENABLE_V8 17*3ac0a46fSAndroid Build Coastguard Worker 18*3ac0a46fSAndroid Build Coastguard Worker namespace { 19*3ac0a46fSAndroid Build Coastguard Worker 20*3ac0a46fSAndroid Build Coastguard Worker EmbedderTestEnvironment* g_environment = nullptr; 21*3ac0a46fSAndroid Build Coastguard Worker 22*3ac0a46fSAndroid Build Coastguard Worker } // namespace 23*3ac0a46fSAndroid Build Coastguard Worker EmbedderTestEnvironment()24*3ac0a46fSAndroid Build Coastguard WorkerEmbedderTestEnvironment::EmbedderTestEnvironment() 25*3ac0a46fSAndroid Build Coastguard Worker : renderer_type_(GetDefaultRendererType()) { 26*3ac0a46fSAndroid Build Coastguard Worker DCHECK(!g_environment); 27*3ac0a46fSAndroid Build Coastguard Worker g_environment = this; 28*3ac0a46fSAndroid Build Coastguard Worker } 29*3ac0a46fSAndroid Build Coastguard Worker ~EmbedderTestEnvironment()30*3ac0a46fSAndroid Build Coastguard WorkerEmbedderTestEnvironment::~EmbedderTestEnvironment() { 31*3ac0a46fSAndroid Build Coastguard Worker DCHECK(g_environment); 32*3ac0a46fSAndroid Build Coastguard Worker g_environment = nullptr; 33*3ac0a46fSAndroid Build Coastguard Worker } 34*3ac0a46fSAndroid Build Coastguard Worker 35*3ac0a46fSAndroid Build Coastguard Worker // static GetInstance()36*3ac0a46fSAndroid Build Coastguard WorkerEmbedderTestEnvironment* EmbedderTestEnvironment::GetInstance() { 37*3ac0a46fSAndroid Build Coastguard Worker return g_environment; 38*3ac0a46fSAndroid Build Coastguard Worker } 39*3ac0a46fSAndroid Build Coastguard Worker SetUp()40*3ac0a46fSAndroid Build Coastguard Workervoid EmbedderTestEnvironment::SetUp() { 41*3ac0a46fSAndroid Build Coastguard Worker FPDF_LIBRARY_CONFIG config; 42*3ac0a46fSAndroid Build Coastguard Worker config.version = 4; 43*3ac0a46fSAndroid Build Coastguard Worker config.m_pUserFontPaths = nullptr; 44*3ac0a46fSAndroid Build Coastguard Worker config.m_v8EmbedderSlot = 0; 45*3ac0a46fSAndroid Build Coastguard Worker config.m_pPlatform = nullptr; 46*3ac0a46fSAndroid Build Coastguard Worker 47*3ac0a46fSAndroid Build Coastguard Worker config.m_pUserFontPaths = test_fonts_.font_paths(); 48*3ac0a46fSAndroid Build Coastguard Worker 49*3ac0a46fSAndroid Build Coastguard Worker #ifdef PDF_ENABLE_V8 50*3ac0a46fSAndroid Build Coastguard Worker config.m_pIsolate = V8TestEnvironment::GetInstance()->isolate(); 51*3ac0a46fSAndroid Build Coastguard Worker config.m_pPlatform = V8TestEnvironment::GetInstance()->platform(); 52*3ac0a46fSAndroid Build Coastguard Worker #else // PDF_ENABLE_V8 53*3ac0a46fSAndroid Build Coastguard Worker config.m_pIsolate = nullptr; 54*3ac0a46fSAndroid Build Coastguard Worker config.m_pPlatform = nullptr; 55*3ac0a46fSAndroid Build Coastguard Worker #endif // PDF_ENABLE_V8 56*3ac0a46fSAndroid Build Coastguard Worker config.m_RendererType = renderer_type_; 57*3ac0a46fSAndroid Build Coastguard Worker 58*3ac0a46fSAndroid Build Coastguard Worker FPDF_InitLibraryWithConfig(&config); 59*3ac0a46fSAndroid Build Coastguard Worker 60*3ac0a46fSAndroid Build Coastguard Worker test_fonts_.InstallFontMapper(); 61*3ac0a46fSAndroid Build Coastguard Worker } 62*3ac0a46fSAndroid Build Coastguard Worker TearDown()63*3ac0a46fSAndroid Build Coastguard Workervoid EmbedderTestEnvironment::TearDown() { 64*3ac0a46fSAndroid Build Coastguard Worker FPDF_DestroyLibrary(); 65*3ac0a46fSAndroid Build Coastguard Worker } 66*3ac0a46fSAndroid Build Coastguard Worker AddFlags(int argc,char ** argv)67*3ac0a46fSAndroid Build Coastguard Workervoid EmbedderTestEnvironment::AddFlags(int argc, char** argv) { 68*3ac0a46fSAndroid Build Coastguard Worker for (int i = 1; i < argc; ++i) 69*3ac0a46fSAndroid Build Coastguard Worker AddFlag(argv[i]); 70*3ac0a46fSAndroid Build Coastguard Worker } 71*3ac0a46fSAndroid Build Coastguard Worker AddFlag(const std::string & flag)72*3ac0a46fSAndroid Build Coastguard Workervoid EmbedderTestEnvironment::AddFlag(const std::string& flag) { 73*3ac0a46fSAndroid Build Coastguard Worker if (flag == "--write-pngs") { 74*3ac0a46fSAndroid Build Coastguard Worker write_pngs_ = true; 75*3ac0a46fSAndroid Build Coastguard Worker return; 76*3ac0a46fSAndroid Build Coastguard Worker } 77*3ac0a46fSAndroid Build Coastguard Worker #if defined(_SKIA_SUPPORT_) 78*3ac0a46fSAndroid Build Coastguard Worker std::string value; 79*3ac0a46fSAndroid Build Coastguard Worker if (ParseSwitchKeyValue(flag, "--use-renderer=", &value)) { 80*3ac0a46fSAndroid Build Coastguard Worker if (value == "agg") { 81*3ac0a46fSAndroid Build Coastguard Worker renderer_type_ = FPDF_RENDERERTYPE_AGG; 82*3ac0a46fSAndroid Build Coastguard Worker } else if (value == "skia") { 83*3ac0a46fSAndroid Build Coastguard Worker renderer_type_ = FPDF_RENDERERTYPE_SKIA; 84*3ac0a46fSAndroid Build Coastguard Worker } else { 85*3ac0a46fSAndroid Build Coastguard Worker std::cerr << "Invalid --use-renderer argument, value must be one of agg " 86*3ac0a46fSAndroid Build Coastguard Worker "or skia\n"; 87*3ac0a46fSAndroid Build Coastguard Worker } 88*3ac0a46fSAndroid Build Coastguard Worker return; 89*3ac0a46fSAndroid Build Coastguard Worker } 90*3ac0a46fSAndroid Build Coastguard Worker #endif // defined(_SKIA_SUPPORT_) 91*3ac0a46fSAndroid Build Coastguard Worker 92*3ac0a46fSAndroid Build Coastguard Worker std::cerr << "Unknown flag: " << flag << "\n"; 93*3ac0a46fSAndroid Build Coastguard Worker } 94