#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 {
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, 0, 0);
EXPECT_EQ(0, range.char_index());
EXPECT_EQ(0, range.char_count());
EXPECT_EQ(u"", range.GetText());
}
{
PDFiumRange range(&page, 1, 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, 0, 2);
EXPECT_EQ(0, range.char_index());
EXPECT_EQ(2, range.char_count());
EXPECT_EQ(u"He", range.GetText());
}
{
PDFiumRange range(&page, 15, 3);
EXPECT_EQ(15, range.char_index());
EXPECT_EQ(3, range.char_count());
EXPECT_EQ(u"Goo", range.GetText());
}
{
PDFiumRange range(&page, 28, 2);
EXPECT_EQ(28, range.char_index());
EXPECT_EQ(2, range.char_count());
EXPECT_EQ(u"d!", range.GetText());
}
{
PDFiumRange range(&page, 29, 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, 2, -2);
EXPECT_EQ(2, range.char_index());
EXPECT_EQ(-2, range.char_count());
EXPECT_EQ(u"He", range.GetText());
}
{
PDFiumRange range(&page, 18, -3);
EXPECT_EQ(18, range.char_index());
EXPECT_EQ(-3, range.char_count());
EXPECT_EQ(u"Goo", range.GetText());
}
{
PDFiumRange range(&page, 30, -2);
EXPECT_EQ(30, range.char_index());
EXPECT_EQ(-2, range.char_count());
EXPECT_EQ(u"d!", range.GetText());
}
{
PDFiumRange range(&page, 30, -1);
EXPECT_EQ(30, range.char_index());
EXPECT_EQ(-1, range.char_count());
EXPECT_EQ(u"!", range.GetText());
}
}
TEST_P(PDFiumRangeTest, CreateBackwards) {
PDFiumPage page(engine(), 0);
page.MarkAvailable();
{
auto range =
PDFiumRange::CreateBackwards(&page, 1, 0);
EXPECT_EQ(1, range.char_index());
EXPECT_EQ(0, range.char_count());
EXPECT_EQ(u"", range.GetText());
}
{
auto range =
PDFiumRange::CreateBackwards(&page, 0, 2);
EXPECT_EQ(2, range.char_index());
EXPECT_EQ(-2, range.char_count());
EXPECT_EQ(u"He", range.GetText());
}
{
auto range = PDFiumRange::CreateBackwards(&page, 15,
3);
EXPECT_EQ(18, range.char_index());
EXPECT_EQ(-3, range.char_count());
EXPECT_EQ(u"Goo", range.GetText());
}
}
INSTANTIATE_TEST_SUITE_P(All, PDFiumRangeTest, testing::Bool());
}