blob: c167877e9ce7c6306e78fad989ef4daad5f7309f [file] [log] [blame]
// 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 <ostream>
#include "core/fxcrt/check.h"
#include "core/fxcrt/fx_system.h"
#include "public/fpdfview.h"
#include "testing/command_line_helpers.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 = {
.version = 4,
.m_pUserFontPaths = test_fonts_.font_paths(),
#ifdef PDF_ENABLE_V8
.m_pIsolate = V8TestEnvironment::GetInstance()->isolate(),
.m_v8EmbedderSlot = 0,
.m_pPlatform = V8TestEnvironment::GetInstance()->platform(),
#else // PDF_ENABLE_V8
.m_pIsolate = nullptr,
.m_v8EmbedderSlot = 0,
.m_pPlatform = nullptr,
#endif // PDF_ENABLE_V8
.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(PDF_USE_SKIA)
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(PDF_USE_SKIA)
std::cerr << "Unknown flag: " << flag << "\n";
}