
Update draw_utils/coordinates.*, document_layout.* to use gfx::Size instead of pp::Size. Also updated OutOfProcessInstance and PDFiumEngine that use these files. Bug: 1101101 Change-Id: I5d8db1d2528100035511edfb479a8e401cc33b2e Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2323481 Commit-Queue: Ankit Kumar 🌪️ <ankk@microsoft.com> Reviewed-by: K. Moon <kmoon@chromium.org> Reviewed-by: Lei Zhang <thestig@chromium.org> Cr-Commit-Position: refs/heads/master@{#793091}
338 lines
12 KiB
C++
338 lines
12 KiB
C++
// Copyright 2019 The Chromium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#include "pdf/document_layout.h"
|
|
|
|
#include "testing/gtest/include/gtest/gtest.h"
|
|
#include "ui/gfx/geometry/size.h"
|
|
|
|
namespace chrome_pdf {
|
|
|
|
namespace {
|
|
|
|
class DocumentLayoutOptionsTest : public testing::Test {
|
|
protected:
|
|
DocumentLayout::Options options_;
|
|
};
|
|
|
|
class DocumentLayoutTest : public testing::Test {
|
|
protected:
|
|
DocumentLayout layout_;
|
|
};
|
|
|
|
// TODO(kmoon): Need to use this with EXPECT_PRED2 instead of just using
|
|
// EXPECT_EQ, due to ADL issues with pp::Rect's operator== (defined in global
|
|
// namespace, instead of in "pp").
|
|
inline bool PpRectEq(const pp::Rect& lhs, const pp::Rect& rhs) {
|
|
return lhs == rhs;
|
|
}
|
|
|
|
TEST_F(DocumentLayoutOptionsTest, DefaultConstructor) {
|
|
EXPECT_EQ(options_.default_page_orientation(), PageOrientation::kOriginal);
|
|
EXPECT_FALSE(options_.two_up_view_enabled());
|
|
}
|
|
|
|
TEST_F(DocumentLayoutOptionsTest, CopyConstructor) {
|
|
options_.RotatePagesClockwise();
|
|
options_.set_two_up_view_enabled(true);
|
|
|
|
DocumentLayout::Options copy(options_);
|
|
EXPECT_EQ(copy.default_page_orientation(), PageOrientation::kClockwise90);
|
|
EXPECT_TRUE(copy.two_up_view_enabled());
|
|
|
|
options_.RotatePagesClockwise();
|
|
options_.set_two_up_view_enabled(false);
|
|
EXPECT_EQ(copy.default_page_orientation(), PageOrientation::kClockwise90);
|
|
EXPECT_TRUE(copy.two_up_view_enabled());
|
|
}
|
|
|
|
TEST_F(DocumentLayoutOptionsTest, CopyAssignment) {
|
|
options_.RotatePagesClockwise();
|
|
options_.set_two_up_view_enabled(true);
|
|
|
|
DocumentLayout::Options copy = options_;
|
|
EXPECT_EQ(copy.default_page_orientation(), PageOrientation::kClockwise90);
|
|
EXPECT_TRUE(copy.two_up_view_enabled());
|
|
|
|
options_.RotatePagesClockwise();
|
|
options_.set_two_up_view_enabled(false);
|
|
EXPECT_EQ(copy.default_page_orientation(), PageOrientation::kClockwise90);
|
|
EXPECT_TRUE(copy.two_up_view_enabled());
|
|
}
|
|
|
|
TEST_F(DocumentLayoutOptionsTest, Equals) {
|
|
EXPECT_TRUE(options_ == options_);
|
|
|
|
DocumentLayout::Options copy;
|
|
EXPECT_TRUE(copy == options_);
|
|
|
|
options_.RotatePagesClockwise();
|
|
EXPECT_FALSE(copy == options_);
|
|
|
|
copy.RotatePagesClockwise();
|
|
EXPECT_TRUE(copy == options_);
|
|
|
|
options_.RotatePagesCounterclockwise();
|
|
EXPECT_FALSE(copy == options_);
|
|
|
|
copy.RotatePagesCounterclockwise();
|
|
EXPECT_TRUE(copy == options_);
|
|
|
|
options_.set_two_up_view_enabled(true);
|
|
EXPECT_FALSE(copy == options_);
|
|
|
|
copy.set_two_up_view_enabled(true);
|
|
EXPECT_TRUE(copy == options_);
|
|
|
|
options_.set_two_up_view_enabled(false);
|
|
EXPECT_FALSE(copy == options_);
|
|
|
|
copy.set_two_up_view_enabled(false);
|
|
EXPECT_TRUE(copy == options_);
|
|
}
|
|
|
|
TEST_F(DocumentLayoutOptionsTest, NotEquals) {
|
|
// Given that "!=" is defined as "!(==)", minimal tests should be sufficient
|
|
// here.
|
|
EXPECT_FALSE(options_ != options_);
|
|
|
|
DocumentLayout::Options copy;
|
|
EXPECT_FALSE(copy != options_);
|
|
|
|
options_.RotatePagesClockwise();
|
|
EXPECT_TRUE(copy != options_);
|
|
|
|
copy.RotatePagesClockwise();
|
|
EXPECT_FALSE(copy != options_);
|
|
}
|
|
|
|
TEST_F(DocumentLayoutOptionsTest, RotatePagesClockwise) {
|
|
options_.RotatePagesClockwise();
|
|
EXPECT_EQ(options_.default_page_orientation(), PageOrientation::kClockwise90);
|
|
|
|
options_.RotatePagesClockwise();
|
|
EXPECT_EQ(options_.default_page_orientation(),
|
|
PageOrientation::kClockwise180);
|
|
|
|
options_.RotatePagesClockwise();
|
|
EXPECT_EQ(options_.default_page_orientation(),
|
|
PageOrientation::kClockwise270);
|
|
|
|
options_.RotatePagesClockwise();
|
|
EXPECT_EQ(options_.default_page_orientation(), PageOrientation::kOriginal);
|
|
}
|
|
|
|
TEST_F(DocumentLayoutOptionsTest, RotatePagesCounterclockwise) {
|
|
options_.RotatePagesCounterclockwise();
|
|
EXPECT_EQ(options_.default_page_orientation(),
|
|
PageOrientation::kClockwise270);
|
|
|
|
options_.RotatePagesCounterclockwise();
|
|
EXPECT_EQ(options_.default_page_orientation(),
|
|
PageOrientation::kClockwise180);
|
|
|
|
options_.RotatePagesCounterclockwise();
|
|
EXPECT_EQ(options_.default_page_orientation(), PageOrientation::kClockwise90);
|
|
|
|
options_.RotatePagesCounterclockwise();
|
|
EXPECT_EQ(options_.default_page_orientation(), PageOrientation::kOriginal);
|
|
}
|
|
|
|
TEST_F(DocumentLayoutTest, DefaultConstructor) {
|
|
EXPECT_EQ(layout_.options().default_page_orientation(),
|
|
PageOrientation::kOriginal);
|
|
EXPECT_FALSE(layout_.options().two_up_view_enabled());
|
|
EXPECT_FALSE(layout_.dirty());
|
|
EXPECT_EQ(layout_.size(), gfx::Size(0, 0));
|
|
EXPECT_EQ(layout_.page_count(), 0u);
|
|
}
|
|
|
|
TEST_F(DocumentLayoutTest, SetOptionsDoesNotRecomputeLayout) {
|
|
layout_.ComputeSingleViewLayout({gfx::Size(100, 200)});
|
|
EXPECT_EQ(layout_.size(), gfx::Size(100, 200));
|
|
|
|
DocumentLayout::Options options;
|
|
options.RotatePagesClockwise();
|
|
layout_.SetOptions(options);
|
|
EXPECT_EQ(layout_.options().default_page_orientation(),
|
|
PageOrientation::kClockwise90);
|
|
EXPECT_EQ(layout_.size(), gfx::Size(100, 200));
|
|
}
|
|
|
|
TEST_F(DocumentLayoutTest, DirtySetOnOptionsChange) {
|
|
DocumentLayout::Options options;
|
|
layout_.SetOptions(options);
|
|
EXPECT_FALSE(layout_.dirty());
|
|
|
|
options.RotatePagesClockwise();
|
|
layout_.SetOptions(options);
|
|
EXPECT_TRUE(layout_.dirty());
|
|
|
|
layout_.clear_dirty();
|
|
|
|
options.set_two_up_view_enabled(true);
|
|
layout_.SetOptions(options);
|
|
EXPECT_TRUE(layout_.dirty());
|
|
}
|
|
|
|
TEST_F(DocumentLayoutTest, DirtyNotSetOnSameOptions) {
|
|
DocumentLayout::Options options;
|
|
options.set_two_up_view_enabled(true);
|
|
layout_.SetOptions(options);
|
|
EXPECT_TRUE(layout_.dirty());
|
|
|
|
layout_.clear_dirty();
|
|
|
|
options.set_two_up_view_enabled(true);
|
|
layout_.SetOptions(options);
|
|
EXPECT_FALSE(layout_.dirty());
|
|
}
|
|
|
|
TEST_F(DocumentLayoutTest, ComputeSingleViewLayout) {
|
|
std::vector<gfx::Size> page_sizes{
|
|
{300, 400}, {400, 500}, {300, 400}, {200, 300}};
|
|
layout_.ComputeSingleViewLayout(page_sizes);
|
|
ASSERT_EQ(4u, layout_.page_count());
|
|
EXPECT_PRED2(PpRectEq, pp::Rect(50, 0, 300, 400), layout_.page_rect(0));
|
|
EXPECT_PRED2(PpRectEq, pp::Rect(0, 404, 400, 500), layout_.page_rect(1));
|
|
EXPECT_PRED2(PpRectEq, pp::Rect(50, 908, 300, 400), layout_.page_rect(2));
|
|
EXPECT_PRED2(PpRectEq, pp::Rect(100, 1312, 200, 300), layout_.page_rect(3));
|
|
EXPECT_PRED2(PpRectEq, pp::Rect(55, 3, 290, 390),
|
|
layout_.page_bounds_rect(0));
|
|
EXPECT_PRED2(PpRectEq, pp::Rect(5, 407, 390, 490),
|
|
layout_.page_bounds_rect(1));
|
|
EXPECT_PRED2(PpRectEq, pp::Rect(55, 911, 290, 390),
|
|
layout_.page_bounds_rect(2));
|
|
EXPECT_PRED2(PpRectEq, pp::Rect(105, 1315, 190, 290),
|
|
layout_.page_bounds_rect(3));
|
|
EXPECT_EQ(gfx::Size(400, 1612), layout_.size());
|
|
|
|
page_sizes = {{240, 300}, {320, 400}, {250, 360}, {300, 600}, {270, 555}};
|
|
layout_.ComputeSingleViewLayout(page_sizes);
|
|
ASSERT_EQ(5u, layout_.page_count());
|
|
EXPECT_PRED2(PpRectEq, pp::Rect(40, 0, 240, 300), layout_.page_rect(0));
|
|
EXPECT_PRED2(PpRectEq, pp::Rect(0, 304, 320, 400), layout_.page_rect(1));
|
|
EXPECT_PRED2(PpRectEq, pp::Rect(35, 708, 250, 360), layout_.page_rect(2));
|
|
EXPECT_PRED2(PpRectEq, pp::Rect(10, 1072, 300, 600), layout_.page_rect(3));
|
|
EXPECT_PRED2(PpRectEq, pp::Rect(25, 1676, 270, 555), layout_.page_rect(4));
|
|
EXPECT_PRED2(PpRectEq, pp::Rect(45, 3, 230, 290),
|
|
layout_.page_bounds_rect(0));
|
|
EXPECT_PRED2(PpRectEq, pp::Rect(5, 307, 310, 390),
|
|
layout_.page_bounds_rect(1));
|
|
EXPECT_PRED2(PpRectEq, pp::Rect(40, 711, 240, 350),
|
|
layout_.page_bounds_rect(2));
|
|
EXPECT_PRED2(PpRectEq, pp::Rect(15, 1075, 290, 590),
|
|
layout_.page_bounds_rect(3));
|
|
EXPECT_PRED2(PpRectEq, pp::Rect(30, 1679, 260, 545),
|
|
layout_.page_bounds_rect(4));
|
|
EXPECT_EQ(gfx::Size(320, 2231), layout_.size());
|
|
}
|
|
|
|
TEST_F(DocumentLayoutTest, ComputeTwoUpViewLayout) {
|
|
// Test case where the widest page is on the right.
|
|
std::vector<gfx::Size> page_sizes{
|
|
{826, 1066}, {1066, 826}, {826, 1066}, {826, 900}};
|
|
layout_.ComputeTwoUpViewLayout(page_sizes);
|
|
ASSERT_EQ(4u, layout_.page_count());
|
|
EXPECT_PRED2(PpRectEq, pp::Rect(240, 0, 826, 1066), layout_.page_rect(0));
|
|
EXPECT_PRED2(PpRectEq, pp::Rect(1066, 0, 1066, 826), layout_.page_rect(1));
|
|
EXPECT_PRED2(PpRectEq, pp::Rect(240, 1066, 826, 1066), layout_.page_rect(2));
|
|
EXPECT_PRED2(PpRectEq, pp::Rect(1066, 1066, 826, 900), layout_.page_rect(3));
|
|
EXPECT_PRED2(PpRectEq, pp::Rect(245, 3, 820, 1056),
|
|
layout_.page_bounds_rect(0));
|
|
EXPECT_PRED2(PpRectEq, pp::Rect(1067, 3, 1060, 816),
|
|
layout_.page_bounds_rect(1));
|
|
EXPECT_PRED2(PpRectEq, pp::Rect(245, 1069, 820, 1056),
|
|
layout_.page_bounds_rect(2));
|
|
EXPECT_PRED2(PpRectEq, pp::Rect(1067, 1069, 820, 890),
|
|
layout_.page_bounds_rect(3));
|
|
EXPECT_EQ(gfx::Size(2132, 2132), layout_.size());
|
|
|
|
// Test case where the widest page is on the left.
|
|
page_sizes = {{1066, 826}, {820, 1056}, {820, 890}, {826, 1066}};
|
|
layout_.ComputeTwoUpViewLayout(page_sizes);
|
|
ASSERT_EQ(4u, layout_.page_count());
|
|
EXPECT_PRED2(PpRectEq, pp::Rect(0, 0, 1066, 826), layout_.page_rect(0));
|
|
EXPECT_PRED2(PpRectEq, pp::Rect(1066, 0, 820, 1056), layout_.page_rect(1));
|
|
EXPECT_PRED2(PpRectEq, pp::Rect(246, 1056, 820, 890), layout_.page_rect(2));
|
|
EXPECT_PRED2(PpRectEq, pp::Rect(1066, 1056, 826, 1066), layout_.page_rect(3));
|
|
EXPECT_PRED2(PpRectEq, pp::Rect(5, 3, 1060, 816),
|
|
layout_.page_bounds_rect(0));
|
|
EXPECT_PRED2(PpRectEq, pp::Rect(1067, 3, 814, 1046),
|
|
layout_.page_bounds_rect(1));
|
|
EXPECT_PRED2(PpRectEq, pp::Rect(251, 1059, 814, 880),
|
|
layout_.page_bounds_rect(2));
|
|
EXPECT_PRED2(PpRectEq, pp::Rect(1067, 1059, 820, 1056),
|
|
layout_.page_bounds_rect(3));
|
|
EXPECT_EQ(gfx::Size(2132, 2122), layout_.size());
|
|
|
|
// Test case where there's an odd # of pages.
|
|
page_sizes = {{200, 300}, {400, 200}, {300, 600}, {250, 500}, {300, 400}};
|
|
layout_.ComputeTwoUpViewLayout(page_sizes);
|
|
ASSERT_EQ(5u, layout_.page_count());
|
|
EXPECT_PRED2(PpRectEq, pp::Rect(200, 0, 200, 300), layout_.page_rect(0));
|
|
EXPECT_PRED2(PpRectEq, pp::Rect(400, 0, 400, 200), layout_.page_rect(1));
|
|
EXPECT_PRED2(PpRectEq, pp::Rect(100, 300, 300, 600), layout_.page_rect(2));
|
|
EXPECT_PRED2(PpRectEq, pp::Rect(400, 300, 250, 500), layout_.page_rect(3));
|
|
EXPECT_PRED2(PpRectEq, pp::Rect(100, 900, 300, 400), layout_.page_rect(4));
|
|
EXPECT_PRED2(PpRectEq, pp::Rect(205, 3, 194, 290),
|
|
layout_.page_bounds_rect(0));
|
|
EXPECT_PRED2(PpRectEq, pp::Rect(401, 3, 394, 190),
|
|
layout_.page_bounds_rect(1));
|
|
EXPECT_PRED2(PpRectEq, pp::Rect(105, 303, 294, 590),
|
|
layout_.page_bounds_rect(2));
|
|
EXPECT_PRED2(PpRectEq, pp::Rect(401, 303, 244, 490),
|
|
layout_.page_bounds_rect(3));
|
|
EXPECT_PRED2(PpRectEq, pp::Rect(105, 903, 290, 390),
|
|
layout_.page_bounds_rect(4));
|
|
EXPECT_EQ(gfx::Size(800, 1300), layout_.size());
|
|
}
|
|
|
|
TEST_F(DocumentLayoutTest, DirtySetOnSingleViewLayoutInputChange) {
|
|
layout_.ComputeSingleViewLayout({gfx::Size(100, 200)});
|
|
EXPECT_TRUE(layout_.dirty());
|
|
layout_.clear_dirty();
|
|
EXPECT_FALSE(layout_.dirty());
|
|
|
|
layout_.ComputeSingleViewLayout({gfx::Size(100, 200)});
|
|
EXPECT_FALSE(layout_.dirty());
|
|
|
|
layout_.ComputeSingleViewLayout({gfx::Size(200, 100)});
|
|
EXPECT_TRUE(layout_.dirty());
|
|
layout_.clear_dirty();
|
|
|
|
layout_.ComputeSingleViewLayout({gfx::Size(200, 100), gfx::Size(300, 300)});
|
|
EXPECT_TRUE(layout_.dirty());
|
|
layout_.clear_dirty();
|
|
|
|
layout_.ComputeSingleViewLayout({gfx::Size(200, 100)});
|
|
EXPECT_TRUE(layout_.dirty());
|
|
}
|
|
|
|
TEST_F(DocumentLayoutTest, DirtySetOnTwoUpViewLayoutInputChange) {
|
|
layout_.ComputeTwoUpViewLayout({gfx::Size(100, 200), gfx::Size(200, 100)});
|
|
EXPECT_TRUE(layout_.dirty());
|
|
layout_.clear_dirty();
|
|
EXPECT_FALSE(layout_.dirty());
|
|
|
|
layout_.ComputeTwoUpViewLayout({gfx::Size(100, 200), gfx::Size(200, 100)});
|
|
EXPECT_FALSE(layout_.dirty());
|
|
|
|
layout_.ComputeTwoUpViewLayout({gfx::Size(200, 100), gfx::Size(100, 200)});
|
|
EXPECT_TRUE(layout_.dirty());
|
|
layout_.clear_dirty();
|
|
|
|
layout_.ComputeTwoUpViewLayout(
|
|
{gfx::Size(200, 100), gfx::Size(100, 200), gfx::Size(300, 300)});
|
|
EXPECT_TRUE(layout_.dirty());
|
|
layout_.clear_dirty();
|
|
|
|
layout_.ComputeTwoUpViewLayout({gfx::Size(200, 100), gfx::Size(100, 200)});
|
|
EXPECT_TRUE(layout_.dirty());
|
|
}
|
|
|
|
} // namespace
|
|
|
|
} // namespace chrome_pdf
|