[go: nahoru, domu]

blob: fb14437c04fc72d5337def3db6b682dcd41afe84 [file] [log] [blame]
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "pdf/pdfium/pdfium_range.h"
#include <memory>
#include "pdf/pdfium/pdfium_engine.h"
#include "pdf/pdfium/pdfium_page.h"
#include "pdf/pdfium/pdfium_test_base.h"
#include "pdf/test/test_client.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace chrome_pdf {
class PDFiumRangeTest : public PDFiumTestBase {
public:
void SetUp() override {
PDFiumTestBase::SetUp();
engine_ = InitializeEngine(&client_, FILE_PATH_LITERAL("hello_world2.pdf"));
ASSERT_TRUE(engine_);
}
void TearDown() override {
// Must reset the PDFiumEngine before PDFiumTestBase uninitializes PDFium
// altogether.
engine_.reset();
PDFiumTestBase::TearDown();
}
PDFiumEngine* engine() { return engine_.get(); }
private:
TestClient client_;
std::unique_ptr<PDFiumEngine> engine_;
};
TEST_P(PDFiumRangeTest, Empty) {
PDFiumPage page(engine(), 0);
page.MarkAvailable();
{
PDFiumRange range(&page, /*char_index=*/0, /*char_count=*/0);
EXPECT_EQ(0, range.char_index());
EXPECT_EQ(0, range.char_count());
EXPECT_EQ(u"", range.GetText());
}
{
PDFiumRange range(&page, /*char_index=*/1, /*char_count=*/0);
EXPECT_EQ(1, range.char_index());
EXPECT_EQ(0, range.char_count());
EXPECT_EQ(u"", range.GetText());
}
}
TEST_P(PDFiumRangeTest, Forward) {
PDFiumPage page(engine(), 0);
page.MarkAvailable();
{
PDFiumRange range(&page, /*char_index=*/0, /*char_count=*/2);
EXPECT_EQ(0, range.char_index());
EXPECT_EQ(2, range.char_count());
EXPECT_EQ(u"He", range.GetText());
}
{
PDFiumRange range(&page, /*char_index=*/15, /*char_count=*/3);
EXPECT_EQ(15, range.char_index());
EXPECT_EQ(3, range.char_count());
EXPECT_EQ(u"Goo", range.GetText());
}
{
PDFiumRange range(&page, /*char_index=*/28, /*char_count=*/2);
EXPECT_EQ(28, range.char_index());
EXPECT_EQ(2, range.char_count());
EXPECT_EQ(u"d!", range.GetText());
}
{
PDFiumRange range(&page, /*char_index=*/29, /*char_count=*/1);
EXPECT_EQ(29, range.char_index());
EXPECT_EQ(1, range.char_count());
EXPECT_EQ(u"!", range.GetText());
}
}
TEST_P(PDFiumRangeTest, Backward) {
PDFiumPage page(engine(), 0);
page.MarkAvailable();
{
PDFiumRange range(&page, /*char_index=*/1, /*char_count=*/-2);
EXPECT_EQ(1, range.char_index());
EXPECT_EQ(-2, range.char_count());
EXPECT_EQ(u"He", range.GetText());
}
{
PDFiumRange range(&page, /*char_index=*/17, /*char_count=*/-3);
EXPECT_EQ(17, range.char_index());
EXPECT_EQ(-3, range.char_count());
EXPECT_EQ(u"Goo", range.GetText());
}
{
PDFiumRange range(&page, /*char_index=*/29, /*char_count=*/-2);
EXPECT_EQ(29, range.char_index());
EXPECT_EQ(-2, range.char_count());
EXPECT_EQ(u"d!", range.GetText());
}
{
PDFiumRange range(&page, /*char_index=*/29, /*char_count=*/-1);
EXPECT_EQ(29, range.char_index());
EXPECT_EQ(-1, range.char_count());
EXPECT_EQ(u"!", range.GetText());
}
}
INSTANTIATE_TEST_SUITE_P(All, PDFiumRangeTest, testing::Bool());
} // namespace chrome_pdf