Chromium Code Reviews| Index: ui/message_center/views/message_list_view_unittest.cc |
| diff --git a/ui/message_center/views/message_list_view_unittest.cc b/ui/message_center/views/message_list_view_unittest.cc |
| index 730bda1798a2f2049cba92ba1f45bff9e8470695..96c54cd50f20fd3fbf04ab344f3d7afe7840975e 100644 |
| --- a/ui/message_center/views/message_list_view_unittest.cc |
| +++ b/ui/message_center/views/message_list_view_unittest.cc |
| @@ -9,6 +9,7 @@ |
| #include "base/macros.h" |
| #include "base/memory/ptr_util.h" |
| #include "base/strings/utf_string_conversions.h" |
| +#include "testing/gmock/include/gmock/gmock.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| #include "ui/message_center/fake_message_center.h" |
| #include "ui/message_center/notification.h" |
| @@ -18,6 +19,8 @@ |
| #include "ui/message_center/views/notification_view.h" |
| #include "ui/views/test/views_test_base.h" |
| +using ::testing::ElementsAre; |
| + |
| namespace message_center { |
| static const char* kNotificationId1 = "notification id 1"; |
| @@ -124,6 +127,18 @@ class MessageListViewTest : public views::ViewsTestBase, |
| return message_list_view_.get(); |
| } |
| + int& reposition_top() { return message_list_view_->reposition_top_; } |
| + |
| + int& fixed_height() { return message_list_view_->fixed_height_; } |
| + |
| + std::vector<int> ComputeRepositionOffsets(const std::vector<int>& heights, |
|
dewittj
2017/02/16 18:15:13
It's good that you can cover this function directl
Eliot Courtney
2017/02/17 07:49:49
Looks like those type of tests live in MessageCent
|
| + const std::vector<bool>& deleting, |
| + int target_index, |
| + int padding) { |
| + return message_list_view_->ComputeRepositionOffsets(heights, deleting, |
| + target_index, padding); |
| + } |
| + |
| MockNotificationView* CreateNotificationView( |
| const Notification& notification) { |
| return new MockNotificationView(this, notification, this); |
| @@ -189,4 +204,175 @@ TEST_F(MessageListViewTest, AddNotification) { |
| EXPECT_TRUE(message_list_view()->Contains(notification_view)); |
| } |
| +TEST_F(MessageListViewTest, RepositionOffsets) { |
| + const auto insets = message_list_view()->GetInsets(); |
| + const int top = insets.top(); |
| + std::vector<int> positions; |
| + |
| + // Notification above grows. |reposition_top| should remain at the same |
| + // offset from the bottom. |
| + fixed_height() = 4 + insets.height(); |
| + reposition_top() = 1 + top; |
| + positions = |
| + ComputeRepositionOffsets({2, 1, 1, 1}, {false, false, false, false}, |
| + 1 /* target_index */, 0 /* padding */); |
| + EXPECT_THAT(positions, ElementsAre(top, top + 2, top + 3, top + 4)); |
| + EXPECT_EQ(4 + insets.height() + 1, fixed_height()); |
| + EXPECT_EQ(1 + top + 1, reposition_top()); |
| + |
| + // Notification above shrinks. |reposition_top| should remain at the same |
| + // offset from the bottom. |
| + fixed_height() = 5 + insets.height(); |
| + reposition_top() = 2 + top; |
| + positions = |
| + ComputeRepositionOffsets({1, 1, 1, 1}, {false, false, false, false}, |
| + 1 /* target_index */, 0 /* padding */); |
| + EXPECT_THAT(positions, ElementsAre(top, top + 1, top + 2, top + 3)); |
| + EXPECT_EQ(4 + insets.height(), fixed_height()); |
| + EXPECT_EQ(1 + top, reposition_top()); |
| + |
| + // Notification above is being deleted. |reposition_top| should remain at the |
| + // same offset from the bottom. |
| + fixed_height() = 4 + insets.height(); |
| + reposition_top() = 1 + top; |
| + positions = |
| + ComputeRepositionOffsets({1, 1, 1, 1}, {true, false, false, false}, |
| + 1 /* target_index */, 0 /* padding */); |
| + EXPECT_THAT(positions, ElementsAre(top, top, top + 1, top + 2)); |
| + EXPECT_EQ(4 + insets.height() - 1, fixed_height()); |
| + EXPECT_EQ(1 + top - 1, reposition_top()); |
| + |
| + // Notification above is inserted. |reposition_top| should remain at the |
| + // same offset from the bottom. |
| + fixed_height() = 3 + insets.height(); |
| + reposition_top() = top; |
| + positions = |
| + ComputeRepositionOffsets({1, 1, 1, 1}, {false, false, false, false}, |
| + 1 /* target_index */, 0 /* padding */); |
| + EXPECT_THAT(positions, ElementsAre(top, top + 1, top + 2, top + 3)); |
| + EXPECT_EQ(3 + insets.height() + 1, fixed_height()); |
| + EXPECT_EQ(top + 1, reposition_top()); |
| + |
| + // Target notification grows with no free space. |reposition_top| is forced to |
| + // change its offset from the bottom. |
| + fixed_height() = 4 + insets.height(); |
| + reposition_top() = 1 + top; |
| + positions = |
| + ComputeRepositionOffsets({1, 2, 1, 1}, {false, false, false, false}, |
| + 1 /* target_index */, 0 /* padding */); |
| + EXPECT_THAT(positions, ElementsAre(top, top + 1, top + 3, top + 4)); |
| + EXPECT_EQ(4 + insets.height() + 1, fixed_height()); |
| + EXPECT_EQ(1 + top, reposition_top()); |
| + |
| + // Target notification grows with free space. |reposition_top| should remain |
| + // at the same offset from the bottom. |
| + fixed_height() = 5 + insets.height(); |
| + reposition_top() = 1 + top; |
| + positions = |
| + ComputeRepositionOffsets({1, 2, 1, 1}, {false, false, false, false}, |
| + 1 /* target_index */, 0 /* padding */); |
| + EXPECT_THAT(positions, ElementsAre(top, top + 1, top + 3, top + 4)); |
| + EXPECT_EQ(5 + insets.height(), fixed_height()); |
| + EXPECT_EQ(1 + top, reposition_top()); |
| + |
| + // Target notification grows with not enough free space. |reposition_top| |
| + // should change its offset as little as possible, and consume the free space. |
| + fixed_height() = 5 + insets.height(); |
| + reposition_top() = 1 + top; |
| + positions = |
| + ComputeRepositionOffsets({1, 3, 1, 1}, {false, false, false, false}, |
| + 1 /* target_index */, 0 /* padding */); |
| + EXPECT_THAT(positions, ElementsAre(top, top + 1, top + 4, top + 5)); |
| + EXPECT_EQ(5 + insets.height() + 1, fixed_height()); |
| + EXPECT_EQ(1 + top, reposition_top()); |
| + |
| + // Target notification shrinks. |reposition_top| should remain at the |
| + // same offset from the bottom. |
| + fixed_height() = 5 + insets.height(); |
| + reposition_top() = 1 + top; |
| + positions = |
| + ComputeRepositionOffsets({1, 1, 1, 1}, {false, false, false, false}, |
| + 1 /* target_index */, 0 /* padding */); |
| + EXPECT_THAT(positions, ElementsAre(top, top + 1, top + 2, top + 3)); |
| + EXPECT_EQ(5 + insets.height(), fixed_height()); |
| + EXPECT_EQ(1 + top, reposition_top()); |
| + |
| + // Notification below grows with no free space. |reposition_top| is forced to |
| + // change its offset from the bottom. |
| + fixed_height() = 4 + insets.height(); |
| + reposition_top() = 1 + top; |
| + positions = |
| + ComputeRepositionOffsets({1, 1, 2, 1}, {false, false, false, false}, |
| + 1 /* target_index */, 0 /* padding */); |
| + EXPECT_THAT(positions, ElementsAre(top, top + 1, top + 2, top + 4)); |
| + EXPECT_EQ(4 + insets.height() + 1, fixed_height()); |
| + EXPECT_EQ(1 + top, reposition_top()); |
| + |
| + // Notification below grows with free space. |reposition_top| should remain |
| + // at the same offset from the bottom. |
| + fixed_height() = 5 + insets.height(); |
| + reposition_top() = 1 + top; |
| + positions = |
| + ComputeRepositionOffsets({1, 1, 2, 1}, {false, false, false, false}, |
| + 1 /* target_index */, 0 /* padding */); |
| + EXPECT_THAT(positions, ElementsAre(top, top + 1, top + 2, top + 4)); |
| + EXPECT_EQ(5 + insets.height(), fixed_height()); |
| + EXPECT_EQ(1 + top, reposition_top()); |
| + |
| + // Notification below shrinks. |reposition_top| should remain at the same |
| + // offset from the bottom. |
| + fixed_height() = 5 + insets.height(); |
| + reposition_top() = 1 + top; |
| + positions = |
| + ComputeRepositionOffsets({1, 1, 1, 1}, {false, false, false, false}, |
| + 1 /* target_index */, 0 /* padding */); |
| + EXPECT_THAT(positions, ElementsAre(top, top + 1, top + 2, top + 3)); |
| + EXPECT_EQ(5 + insets.height(), fixed_height()); |
| + EXPECT_EQ(1 + top, reposition_top()); |
| + |
| + // Notification below is being deleted. |reposition_top| should remain at the |
| + // same offset from the bottom. |
| + fixed_height() = 4 + insets.height(); |
| + reposition_top() = 1 + top; |
| + positions = |
| + ComputeRepositionOffsets({1, 1, 1, 1}, {false, false, true, false}, |
| + 1 /* target_index */, 0 /* padding */); |
| + EXPECT_THAT(positions, ElementsAre(top, top + 1, top + 2, top + 2)); |
| + EXPECT_EQ(4 + insets.height(), fixed_height()); |
| + EXPECT_EQ(1 + top, reposition_top()); |
| + |
| + // Notification below is inserted with free space. |reposition_top| should |
| + // remain at the same offset from the bottom. |
| + fixed_height() = 4 + insets.height(); |
| + reposition_top() = 1 + top; |
| + positions = |
| + ComputeRepositionOffsets({1, 1, 1, 1}, {false, false, false, false}, |
| + 1 /* target_index */, 0 /* padding */); |
| + EXPECT_THAT(positions, ElementsAre(top, top + 1, top + 2, top + 3)); |
| + EXPECT_EQ(4 + insets.height(), fixed_height()); |
| + EXPECT_EQ(1 + top, reposition_top()); |
| + |
| + // Notification below is inserted with no free space. |reposition_top| is |
| + // forced to change its offset from the bottom. |
| + fixed_height() = 3 + insets.height(); |
| + reposition_top() = 1 + top; |
| + positions = |
| + ComputeRepositionOffsets({1, 1, 1, 1}, {false, false, false, false}, |
| + 1 /* target_index */, 0 /* padding */); |
| + EXPECT_THAT(positions, ElementsAre(top, top + 1, top + 2, top + 3)); |
| + EXPECT_EQ(3 + insets.height() + 1, fixed_height()); |
| + EXPECT_EQ(1 + top, reposition_top()); |
| + |
| + // Test padding. |
| + fixed_height() = 20 + insets.height(); |
| + reposition_top() = 5 + top; |
| + positions = |
| + ComputeRepositionOffsets({5, 3, 3, 3}, {false, false, false, false}, |
| + 1 /* target_index */, 2 /* padding */); |
| + EXPECT_THAT(positions, |
| + ElementsAre(top, top + 7, top + 7 + 5, top + 7 + 5 + 5)); |
| + EXPECT_EQ(20 + insets.height() + 2, fixed_height()); |
| + EXPECT_EQ(5 + top + 2, reposition_top()); |
| +} |
| + |
| } // namespace |