OLD | NEW |
---|---|
(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 | |
OLD | NEW |