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

Side by Side Diff: ui/app_list/test/app_list_model_unittest.cc

Issue 27438002: Store AppItems as pages in AppListModel. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 7 years, 2 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "ui/app_list/app_list_model.h"
6
7 #include <map>
8
9 #include "base/message_loop/message_loop.h"
10 #include "base/run_loop.h"
11 #include "base/strings/utf_string_conversions.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13 #include "ui/app_list/app_list_item_model.h"
14 #include "ui/app_list/app_list_model_observer.h"
15 #include "ui/app_list/test/app_list_test_model.h"
16
17 namespace app_list {
18
19 namespace {
20
21 class TestObserver : public AppListModelObserver {
22 public:
23 TestObserver()
24 : status_changed_count_(0),
25 users_changed_count_(0),
26 signin_changed_count_(0) {
27 }
28 virtual ~TestObserver() {
29 }
30
31 virtual void OnAppListModelStatusChanged() OVERRIDE {
32 ++status_changed_count_;
33 }
34
35 virtual void OnAppListModelUsersChanged() OVERRIDE {
36 ++users_changed_count_;
37 }
38
39 virtual void OnAppListModelSigninStatusChanged() OVERRIDE {
40 ++signin_changed_count_;
41 }
42
43 virtual void OnListItemsAdded(size_t page_index,
44 size_t start, size_t count) OVERRIDE {
45 items_added_[page_index] += count;
46 }
47
48 virtual void OnListItemsRemoved(size_t page_index,
49 size_t start, size_t count) OVERRIDE {
50 items_removed_[page_index] += count;
51 }
52
53 virtual void OnListItemMoved(size_t page_index,
54 size_t index, size_t target_index) OVERRIDE {
55 items_moved_[page_index]++;
56 }
57
58 int status_changed_count() const { return status_changed_count_; }
59 int users_changed_count() const { return users_changed_count_; }
60 int signin_changed_count() const { return signin_changed_count_; }
61 size_t items_added(int page) { return items_added_[page]; }
62 size_t items_removed(int page) { return items_removed_[page]; }
63 size_t items_moved(int page) { return items_moved_[page]; }
64
65 private:
66 int status_changed_count_;
67 int users_changed_count_;
68 int signin_changed_count_;
69 std::map<size_t, size_t> items_added_;
70 std::map<size_t, size_t> items_removed_;
71 std::map<size_t, size_t> items_moved_;
72 base::MessageLoop message_loop_;
73
74 DISALLOW_COPY_AND_ASSIGN(TestObserver);
75 };
76
77 } // namespace
78
79 class AppListModelTest : public testing::Test {
80 public:
81 AppListModelTest() {}
82 virtual ~AppListModelTest() {}
83
84 // testing::Test overrides:
85 virtual void SetUp() OVERRIDE {
86 model_.AddObserver(&observer_);
87 }
88 virtual void TearDown() OVERRIDE {
89 model_.RemoveObserver(&observer_);
90 }
91
92 protected:
93 void Run() {
94 base::RunLoop run_loop;
koz (OOO until 15th September) 2013/10/18 05:17:17 Why do we need to have a message loop in this test
stevenjb 2013/10/18 22:14:26 I suppose that's true. I tend to assume that an Ob
95 run_loop.RunUntilIdle();
96 }
97
98 test::AppListTestModel model_;
99 TestObserver observer_;
100
101 private:
102 DISALLOW_COPY_AND_ASSIGN(AppListModelTest);
103 };
104
105 TEST_F(AppListModelTest, SetStatus) {
106 EXPECT_EQ(AppListModel::STATUS_NORMAL, model_.status());
107 model_.SetStatus(AppListModel::STATUS_SYNCING);
108 Run();
109 EXPECT_EQ(1, observer_.status_changed_count());
110 EXPECT_EQ(AppListModel::STATUS_SYNCING, model_.status());
111 model_.SetStatus(AppListModel::STATUS_NORMAL);
112 Run();
113 EXPECT_EQ(2, observer_.status_changed_count());
114 // Set the same status, no change is expected.
115 model_.SetStatus(AppListModel::STATUS_NORMAL);
116 Run();
117 EXPECT_EQ(2, observer_.status_changed_count());
118 }
119
120 TEST_F(AppListModelTest, SetUsers) {
121 EXPECT_EQ(0u, model_.users().size());
122 AppListModel::Users users;
123 users.push_back(AppListModel::User());
124 users[0].name = UTF8ToUTF16("test");
125 model_.SetUsers(users);
126 Run();
127 EXPECT_EQ(1, observer_.users_changed_count());
128 ASSERT_EQ(1u, model_.users().size());
129 EXPECT_EQ(UTF8ToUTF16("test"), model_.users()[0].name);
130 }
131
132 TEST_F(AppListModelTest, SetSignedIn) {
133 EXPECT_TRUE(model_.signed_in());
134 model_.SetSignedIn(false);
135 Run();
136 EXPECT_EQ(1, observer_.signin_changed_count());
137 EXPECT_FALSE(model_.signed_in());
138 model_.SetSignedIn(true);
139 Run();
140 EXPECT_EQ(2, observer_.signin_changed_count());
141 EXPECT_TRUE(model_.signed_in());
142 // Set the same signin state, no change is expected.
143 model_.SetSignedIn(true);
144 Run();
145 EXPECT_EQ(2, observer_.signin_changed_count());
146 }
147
148 TEST_F(AppListModelTest, ModelOnePage) {
149 const size_t num_apps = AppListModel::GetNumAppsPerPage();
150 model_.PopulateApps(num_apps);
151 EXPECT_EQ(1u, model_.GetNumAppPages());
152 EXPECT_EQ(num_apps, model_.GetAppItems(0).item_count());
153 EXPECT_EQ(num_apps, observer_.items_added(0));
154 }
155
156 TEST_F(AppListModelTest, ModelTwoPages) {
157 const size_t num_apps = AppListModel::GetNumAppsPerPage() + 1;
158 model_.PopulateApps(num_apps);
159 ASSERT_EQ(2u, model_.GetNumAppPages());
160 EXPECT_EQ(AppListModel::GetNumAppsPerPage(),
161 model_.GetAppItems(0).item_count());
162 EXPECT_EQ(AppListModel::GetNumAppsPerPage(), observer_.items_added(0));
163 EXPECT_EQ(num_apps - AppListModel::GetNumAppsPerPage(),
164 model_.GetAppItems(1).item_count());
165 EXPECT_EQ(num_apps - AppListModel::GetNumAppsPerPage(),
166 observer_.items_added(1));
167 }
168
169 TEST_F(AppListModelTest, ModelThreePages) {
170 const size_t num_apps = AppListModel::GetNumAppsPerPage() * 3;
171 model_.PopulateApps(num_apps);
172 ASSERT_EQ(3u, model_.GetNumAppPages());
173 EXPECT_EQ(AppListModel::GetNumAppsPerPage(),
174 model_.GetAppItems(2).item_count());
175 EXPECT_EQ(AppListModel::GetNumAppsPerPage(), observer_.items_added(2));
176 }
177
178 TEST_F(AppListModelTest, ModelFindItem) {
179 const size_t num_apps = AppListModel::GetNumAppsPerPage() + 2;
180 model_.PopulateApps(num_apps);
181 // Check finding an item on the first page.
182 std::string item_name = model_.GetItemName(0);
183 AppListItemModel* item = model_.FindItem(item_name);
184 ASSERT_TRUE(item);
185 EXPECT_EQ(item_name, item->id());
186 // Check finding an item on the second page.
187 item_name = model_.GetItemName(AppListModel::GetNumAppsPerPage() + 1);
188 item = model_.FindItem(item_name);
189 ASSERT_TRUE(item);
190 EXPECT_EQ(item_name, item->id());
191 }
192
193 TEST_F(AppListModelTest, ModelGetItem) {
194 const size_t num_apps = AppListModel::GetNumAppsPerPage() + 2;
195 model_.PopulateApps(num_apps);
196 AppListItemModel* item = model_.GetItemAt(0, 0);
197 ASSERT_TRUE(item);
198 EXPECT_EQ(model_.GetItemName(0), item->id());
199 item = model_.GetItemAt(1, 0);
200 ASSERT_TRUE(item);
201 EXPECT_EQ(model_.GetItemName(AppListModel::GetNumAppsPerPage()), item->id());
202 }
203
204 TEST_F(AppListModelTest, ModelMoveItem) {
205 const size_t num_apps = AppListModel::GetNumAppsPerPage();
206 model_.PopulateApps(num_apps);
207 // Adding another item will add it to the end and create a new page.
208 model_.CreateAndAddItem("Inserted Item");
209 ASSERT_EQ(2u, model_.GetNumAppPages());
210 // Move it to the beginning.
211 model_.MoveItem(1, 0, 0, 0);
212 AppListItemModel* item = model_.GetItemAt(0, 0);
213 ASSERT_TRUE(item);
214 EXPECT_EQ("Inserted Item", item->id());
215 item = model_.GetItemAt(0, 1);
216 ASSERT_TRUE(item);
217 EXPECT_EQ(model_.GetItemName(0), item->id());
218 item = model_.GetItemAt(1, 0);
219 ASSERT_TRUE(item);
220 EXPECT_EQ(model_.GetItemName(num_apps - 1), item->id());
221 }
222
223 } // namespace app_list
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698