// Copyright 2020 The PDFium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "testing/embedder_test_environment.h" #include #include "core/fxcrt/fx_system.h" #include "public/fpdfview.h" #include "testing/command_line_helpers.h" #include "third_party/base/check.h" #ifdef PDF_ENABLE_V8 #include "testing/v8_test_environment.h" #endif // PDF_ENABLE_V8 namespace { EmbedderTestEnvironment* g_environment = nullptr; } // namespace EmbedderTestEnvironment::EmbedderTestEnvironment() : renderer_type_(GetDefaultRendererType()) { DCHECK(!g_environment); g_environment = this; } EmbedderTestEnvironment::~EmbedderTestEnvironment() { DCHECK(g_environment); g_environment = nullptr; } // static EmbedderTestEnvironment* EmbedderTestEnvironment::GetInstance() { return g_environment; } void EmbedderTestEnvironment::SetUp() { FPDF_LIBRARY_CONFIG config; config.version = 4; config.m_pUserFontPaths = nullptr; config.m_v8EmbedderSlot = 0; config.m_pPlatform = nullptr; config.m_pUserFontPaths = test_fonts_.font_paths(); #ifdef PDF_ENABLE_V8 config.m_pIsolate = V8TestEnvironment::GetInstance()->isolate(); config.m_pPlatform = V8TestEnvironment::GetInstance()->platform(); #else // PDF_ENABLE_V8 config.m_pIsolate = nullptr; config.m_pPlatform = nullptr; #endif // PDF_ENABLE_V8 config.m_RendererType = renderer_type_; FPDF_InitLibraryWithConfig(&config); test_fonts_.InstallFontMapper(); } void EmbedderTestEnvironment::TearDown() { FPDF_DestroyLibrary(); } void EmbedderTestEnvironment::AddFlags(int argc, char** argv) { for (int i = 1; i < argc; ++i) AddFlag(argv[i]); } void EmbedderTestEnvironment::AddFlag(const std::string& flag) { if (flag == "--write-pngs") { write_pngs_ = true; return; } #if defined(_SKIA_SUPPORT_) std::string value; if (ParseSwitchKeyValue(flag, "--use-renderer=", &value)) { if (value == "agg") { renderer_type_ = FPDF_RENDERERTYPE_AGG; } else if (value == "skia") { renderer_type_ = FPDF_RENDERERTYPE_SKIA; } else { std::cerr << "Invalid --use-renderer argument, value must be one of agg " "or skia\n"; } return; } #endif // defined(_SKIA_SUPPORT_) std::cerr << "Unknown flag: " << flag << "\n"; }