Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3371)

Unified Diff: chrome/browser/ui/views/payments/payment_request_item_list_unittest.cc

Issue 2711973002: [Web Payments] Implement the credit card selection UI functionality. (Closed)
Patch Set: Fix test flakiness. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/ui/views/payments/payment_request_item_list.cc ('k') | chrome/test/BUILD.gn » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « chrome/browser/ui/views/payments/payment_request_item_list.cc ('k') | chrome/test/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698