| Index: chrome/browser/ui/views/payments/payment_request_item_list_unittest.cc
|
| diff --git a/chrome/browser/ui/views/payments/payment_request_item_list_unittest.cc b/chrome/browser/ui/views/payments/payment_request_item_list_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..8f1f86db3b2b92f58f2e6891c037f802aa465d23
|
| --- /dev/null
|
| +++ b/chrome/browser/ui/views/payments/payment_request_item_list_unittest.cc
|
| @@ -0,0 +1,124 @@
|
| +// Copyright 2017 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 "chrome/browser/ui/views/payments/payment_request_item_list.h"
|
| +
|
| +#include <algorithm>
|
| +
|
| +#include "base/memory/ptr_util.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +#include "ui/views/view.h"
|
| +
|
| +namespace payments {
|
| +
|
| +namespace {
|
| +
|
| +class TestListItem : public PaymentRequestItemList::Item {
|
| + public:
|
| + TestListItem(PaymentRequestItemList* list, bool selected)
|
| + : PaymentRequestItemList::Item(nullptr, list, selected),
|
| + selected_state_changed_calls_count_(0) {}
|
| +
|
| + int selected_state_changed_calls_count() {
|
| + return selected_state_changed_calls_count_;
|
| + }
|
| +
|
| + private:
|
| + std::unique_ptr<views::View> CreateItemView() override {
|
| + return base::MakeUnique<views::View>();
|
| + }
|
| +
|
| + void SelectedStateChanged() override {
|
| + ++selected_state_changed_calls_count_;
|
| + }
|
| +
|
| + int selected_state_changed_calls_count_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(TestListItem);
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| +TEST(PaymentRequestItemListTest, TestAddItem) {
|
| + PaymentRequestItemList list;
|
| +
|
| + std::unique_ptr<views::View> list_view = list.CreateListView();
|
| + EXPECT_FALSE(list_view->has_children());
|
| +
|
| + std::vector<std::unique_ptr<TestListItem>> items;
|
| + items.push_back(base::MakeUnique<TestListItem>(&list, false));
|
| + items.push_back(base::MakeUnique<TestListItem>(&list, true));
|
| + items.push_back(base::MakeUnique<TestListItem>(&list, false));
|
| + items.push_back(base::MakeUnique<TestListItem>(&list, true));
|
| +
|
| + // The unique_ptr objects will become owned by |list|, but the underlying
|
| + // pointers will be needed for assertions after the unique_ptr is moved.
|
| + std::vector<TestListItem*> item_pointers;
|
| + for (auto& item : items) {
|
| + item_pointers.push_back(item.get());
|
| + list.AddItem(std::move(item));
|
| + }
|
| +
|
| + EXPECT_FALSE(item_pointers[0]->selected());
|
| + // Only one item should be selected at a time, so adding item at index 3 with
|
| + // |selected| set to true should have deselected item at index 1.
|
| + EXPECT_FALSE(item_pointers[1]->selected());
|
| + EXPECT_FALSE(item_pointers[2]->selected());
|
| + EXPECT_TRUE(item_pointers[3]->selected());
|
| +
|
| + list_view = list.CreateListView();
|
| + EXPECT_EQ(4, list_view->child_count());
|
| +}
|
| +
|
| +TEST(PaymentRequestItemListTest, TestSelectItemResultsInSingleItemSelected) {
|
| + PaymentRequestItemList list;
|
| +
|
| + std::vector<std::unique_ptr<TestListItem>> items;
|
| + items.push_back(base::MakeUnique<TestListItem>(&list, false));
|
| + items.push_back(base::MakeUnique<TestListItem>(&list, false));
|
| + items.push_back(base::MakeUnique<TestListItem>(&list, false));
|
| +
|
| + // The unique_ptr objects will become owned by |list|, but the underlying
|
| + // pointers will be needed for assertions after the unique_ptr is moved.
|
| + std::vector<TestListItem*> item_pointers;
|
| + for (auto& item : items) {
|
| + item_pointers.push_back(item.get());
|
| + list.AddItem(std::move(item));
|
| + }
|
| +
|
| + // Only one item should be selected at once and items should have their
|
| + // SelectedStateChanged() function called when they are selected and when
|
| + // they are unselected.
|
| + list.SelectItem(item_pointers[0]);
|
| + EXPECT_TRUE(item_pointers[0]->selected());
|
| + EXPECT_EQ(1, item_pointers[0]->selected_state_changed_calls_count());
|
| +
|
| + EXPECT_FALSE(item_pointers[1]->selected());
|
| + EXPECT_EQ(0, item_pointers[1]->selected_state_changed_calls_count());
|
| +
|
| + EXPECT_FALSE(item_pointers[2]->selected());
|
| + EXPECT_EQ(0, item_pointers[2]->selected_state_changed_calls_count());
|
| +
|
| + list.SelectItem(item_pointers[2]);
|
| + EXPECT_FALSE(item_pointers[0]->selected());
|
| + EXPECT_EQ(2, item_pointers[0]->selected_state_changed_calls_count());
|
| +
|
| + EXPECT_FALSE(item_pointers[1]->selected());
|
| + EXPECT_EQ(0, item_pointers[1]->selected_state_changed_calls_count());
|
| +
|
| + EXPECT_TRUE(item_pointers[2]->selected());
|
| + EXPECT_EQ(1, item_pointers[2]->selected_state_changed_calls_count());
|
| +
|
| + list.SelectItem(item_pointers[1]);
|
| + EXPECT_FALSE(item_pointers[0]->selected());
|
| + EXPECT_EQ(2, item_pointers[0]->selected_state_changed_calls_count());
|
| +
|
| + EXPECT_TRUE(item_pointers[1]->selected());
|
| + EXPECT_EQ(1, item_pointers[1]->selected_state_changed_calls_count());
|
| +
|
| + EXPECT_FALSE(item_pointers[2]->selected());
|
| + EXPECT_EQ(2, item_pointers[2]->selected_state_changed_calls_count());
|
| +}
|
| +
|
| +} // namespace payments
|
|
|