#ifndef PDF_PDFIUM_PDFIUM_TEST_BASE_H_
#define PDF_PDFIUM_PDFIUM_TEST_BASE_H_
#include <stddef.h>
#include <memory>
#include <vector>
#include "base/files/file_path.h"
#include "base/memory/raw_ptr.h"
#include "build/build_config.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace chrome_pdf {
class PDFiumEngine;
class PDFiumPage;
class TestClient;
class TestDocumentLoader;
class PDFiumTestBase : public testing::TestWithParam<bool> {
public:
PDFiumTestBase();
PDFiumTestBase(const PDFiumTestBase&) = delete;
PDFiumTestBase& operator=(const PDFiumTestBase&) = delete;
~PDFiumTestBase() override;
static bool UsingTestFonts();
protected:
struct InitializeEngineResult {
InitializeEngineResult();
InitializeEngineResult(InitializeEngineResult&& other) noexcept;
InitializeEngineResult& operator=(InitializeEngineResult&& other) noexcept;
~InitializeEngineResult();
void FinishLoading();
std::unique_ptr<PDFiumEngine> engine;
raw_ptr<TestDocumentLoader> document_loader;
};
void SetUp() override;
void TearDown() override;
std::unique_ptr<PDFiumEngine> InitializeEngine(
TestClient* client,
const base::FilePath::CharType* pdf_name);
std::unique_ptr<PDFiumEngine> InitializeEngineFromData(
TestClient* client,
std::vector<uint8_t> pdf_data);
InitializeEngineResult InitializeEngineWithoutLoading(
TestClient* client,
const base::FilePath::CharType* pdf_name);
static const PDFiumPage& GetPDFiumPage(const PDFiumEngine& engine,
size_t page_index);
static PDFiumPage& GetPDFiumPage(PDFiumEngine& engine, size_t page_index);
private:
void InitializePDFiumSDK();
InitializeEngineResult InitializeEngineWithoutLoadingImpl(
TestClient* client,
std::unique_ptr<PDFiumEngine> engine,
std::unique_ptr<TestDocumentLoader> document_loader);
std::unique_ptr<PDFiumEngine> CreateEngine(TestClient* client);
void SimulateLoading(PDFiumEngine* engine,
TestDocumentLoader* document_loader);
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
base::FilePath test_fonts_path_;
#endif
std::vector<const char*> font_paths_;
};
}
#endif