blob: 7e8207e976927a28e632cf89e9ef375c8eebe24d [file] [edit]
// Copyright 2026 The PDFium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "public/fpdfview.h"
#include "testing/embedder_test.h"
#include "testing/embedder_test_constants.h"
#include "testing/embedder_test_environment.h"
#include "testing/gtest/include/gtest/gtest.h"
class BrotliEnabledEmbedderTest : public EmbedderTest {
public:
virtual bool GetBrotliEnabled() { return true; }
virtual int GetVersionSelected() { return 6; }
private:
void SetUp() override {
auto* env = EmbedderTestEnvironment::GetInstance();
previous_brotli_ = env->GetBrotli();
previous_version_ = env->GetVersion();
env->TearDown();
env->SetBrotli(GetBrotliEnabled());
env->SetVersion(GetVersionSelected());
env->SetUp();
EmbedderTest::SetUp();
}
void TearDown() override {
EmbedderTest::TearDown();
auto* env = EmbedderTestEnvironment::GetInstance();
env->TearDown();
env->SetBrotli(previous_brotli_);
env->SetVersion(previous_version_);
env->SetUp();
}
bool previous_brotli_;
int previous_version_;
};
class BrotliDisabledEmbedderTest : public BrotliEnabledEmbedderTest {
public:
bool GetBrotliEnabled() override { return false; }
};
class BrotliV5EmbedderTest : public BrotliEnabledEmbedderTest {
public:
int GetVersionSelected() override { return 5; }
};
TEST_F(BrotliEnabledEmbedderTest, ManyRectanglesBrotli) {
ASSERT_TRUE(OpenDocument("many_rectangles_brotli.pdf"));
ScopedPage page = LoadScopedPage(0);
ASSERT_TRUE(page);
ScopedFPDFBitmap bitmap = RenderLoadedPage(page.get());
ASSERT_TRUE(bitmap);
CompareBitmapWithExpectationSuffix(bitmap.get(), pdfium::kManyRectanglesPng);
}
TEST_F(BrotliEnabledEmbedderTest, SimpleBrotliWithText) {
ASSERT_TRUE(OpenDocument("hello_world_brotli.pdf"));
ScopedPage page = LoadScopedPage(0);
ASSERT_TRUE(page);
ScopedFPDFBitmap bitmap = RenderLoadedPage(page.get());
ASSERT_TRUE(bitmap);
CompareBitmapWithExpectationSuffix(bitmap.get(), pdfium::kHelloWorldPng);
}
TEST_F(BrotliEnabledEmbedderTest, BrotliRectangles) {
ASSERT_TRUE(OpenDocument("rectangles_brotli.pdf"));
ScopedPage page = LoadScopedPage(0);
ASSERT_TRUE(page);
ScopedFPDFBitmap bitmap = RenderLoadedPage(page.get());
ASSERT_TRUE(bitmap);
CompareBitmapWithExpectationSuffix(bitmap.get(), pdfium::kRectanglesPng);
}
TEST_F(BrotliEnabledEmbedderTest, BrotliWithLength1Argument) {
ASSERT_TRUE(OpenDocument("hello_world_brotli_with_length1.pdf"));
ScopedPage page = LoadScopedPage(0);
ASSERT_TRUE(page);
ScopedFPDFBitmap bitmap = RenderLoadedPage(page.get());
ASSERT_TRUE(bitmap);
CompareBitmapWithExpectationSuffix(bitmap.get(), pdfium::kHelloWorldPng);
}
TEST_F(BrotliDisabledEmbedderTest, BrotliDecodeDisabled) {
ASSERT_TRUE(OpenDocument("hello_world_brotli.pdf"));
ScopedPage page = LoadScopedPage(0);
ASSERT_TRUE(page);
ScopedFPDFBitmap bitmap = RenderLoadedPage(page.get());
ASSERT_TRUE(bitmap);
CompareBitmap(bitmap.get(), "blank_200x200");
}
TEST_F(BrotliV5EmbedderTest, WrongBrotliVersion) {
ASSERT_TRUE(OpenDocument("hello_world_brotli.pdf"));
ScopedPage page = LoadScopedPage(0);
ASSERT_TRUE(page);
ScopedFPDFBitmap bitmap = RenderLoadedPage(page.get());
ASSERT_TRUE(bitmap);
CompareBitmap(bitmap.get(), "blank_200x200");
}