blob: 8185464d54ea603296eb3b1a9ccd3ddaf4220fa3 [file] [log] [blame]
// 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 "base/test/gtest_util.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace chrome_pdf {
namespace {
class DocumentLayoutTest : public testing::Test {
protected:
DocumentLayout layout_;
};
using DocumentLayoutDeathTest = DocumentLayoutTest;
// TODO(kmoon): Need to use this with EXPECT_PRED2 instead of just using
// EXPECT_EQ, due to ADL issues with pp::Size's operator== (defined in global
// namespace, instead of in "pp").
inline bool PpSizeEq(const pp::Size& lhs, const pp::Size& rhs) {
return lhs == rhs;
}
TEST_F(DocumentLayoutTest, DefaultConstructor) {
EXPECT_EQ(layout_.default_page_orientation(), 0);
EXPECT_PRED2(PpSizeEq, layout_.size(), pp::Size(0, 0));
}
TEST_F(DocumentLayoutTest, CopyConstructor) {
layout_.RotatePagesClockwise();
layout_.EnlargeHeight(2);
DocumentLayout copy(layout_);
EXPECT_EQ(copy.default_page_orientation(), 1);
EXPECT_PRED2(PpSizeEq, copy.size(), pp::Size(0, 2));
layout_.RotatePagesClockwise();
layout_.EnlargeHeight(5);
EXPECT_EQ(copy.default_page_orientation(), 1);
EXPECT_PRED2(PpSizeEq, copy.size(), pp::Size(0, 2));
}
TEST_F(DocumentLayoutTest, CopyAssignment) {
layout_.RotatePagesClockwise();
layout_.EnlargeHeight(2);
DocumentLayout copy;
EXPECT_EQ(copy.default_page_orientation(), 0);
EXPECT_PRED2(PpSizeEq, copy.size(), pp::Size(0, 0));
copy = layout_;
EXPECT_EQ(copy.default_page_orientation(), 1);
EXPECT_PRED2(PpSizeEq, copy.size(), pp::Size(0, 2));
layout_.RotatePagesClockwise();
layout_.EnlargeHeight(5);
EXPECT_EQ(copy.default_page_orientation(), 1);
EXPECT_PRED2(PpSizeEq, copy.size(), pp::Size(0, 2));
}
TEST_F(DocumentLayoutTest, RotatePagesClockwise) {
layout_.RotatePagesClockwise();
EXPECT_EQ(layout_.default_page_orientation(), 1);
layout_.RotatePagesClockwise();
EXPECT_EQ(layout_.default_page_orientation(), 2);
layout_.RotatePagesClockwise();
EXPECT_EQ(layout_.default_page_orientation(), 3);
layout_.RotatePagesClockwise();
EXPECT_EQ(layout_.default_page_orientation(), 0);
}
TEST_F(DocumentLayoutTest, RotatePagesCounterclockwise) {
layout_.RotatePagesCounterclockwise();
EXPECT_EQ(layout_.default_page_orientation(), 3);
layout_.RotatePagesCounterclockwise();
EXPECT_EQ(layout_.default_page_orientation(), 2);
layout_.RotatePagesCounterclockwise();
EXPECT_EQ(layout_.default_page_orientation(), 1);
layout_.RotatePagesCounterclockwise();
EXPECT_EQ(layout_.default_page_orientation(), 0);
}
TEST_F(DocumentLayoutTest, RotatePagesDoesNotRecomputeLayout) {
layout_.EnlargeHeight(2);
layout_.RotatePagesClockwise();
EXPECT_PRED2(PpSizeEq, layout_.size(), pp::Size(0, 2));
layout_.RotatePagesCounterclockwise();
EXPECT_PRED2(PpSizeEq, layout_.size(), pp::Size(0, 2));
}
TEST_F(DocumentLayoutTest, EnlargeHeight) {
layout_.EnlargeHeight(5);
EXPECT_PRED2(PpSizeEq, layout_.size(), pp::Size(0, 5));
layout_.EnlargeHeight(11);
EXPECT_PRED2(PpSizeEq, layout_.size(), pp::Size(0, 16));
}
TEST_F(DocumentLayoutDeathTest, EnlargeHeightNegativeIncrement) {
EXPECT_DCHECK_DEATH(layout_.EnlargeHeight(-5));
}
TEST_F(DocumentLayoutTest, AppendPageRect) {
layout_.AppendPageRect(pp::Size(3, 5));
EXPECT_PRED2(PpSizeEq, layout_.size(), pp::Size(3, 5));
layout_.AppendPageRect(pp::Size(7, 11));
EXPECT_PRED2(PpSizeEq, layout_.size(), pp::Size(7, 16));
layout_.AppendPageRect(pp::Size(5, 11));
EXPECT_PRED2(PpSizeEq, layout_.size(), pp::Size(7, 27));
}
} // namespace
} // namespace chrome_pdf