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

Side by Side Diff: chrome/browser/ui/app_list/apps_model_builder_unittest.cc

Issue 17038002: Separate the NTP app ordering from the app list app ordering (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rework + fix tests Created 7 years, 4 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/app_list/apps_model_builder.h" 5 #include "chrome/browser/ui/app_list/apps_model_builder.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/files/file_path.h" 9 #include "base/files/file_path.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
11 #include "base/prefs/pref_service.h" 11 #include "base/prefs/pref_service.h"
12 #include "base/run_loop.h" 12 #include "base/run_loop.h"
13 #include "base/values.h" 13 #include "base/values.h"
14 #include "chrome/browser/extensions/extension_function_test_utils.h" 14 #include "chrome/browser/extensions/extension_function_test_utils.h"
15 #include "chrome/browser/extensions/extension_service_unittest.h" 15 #include "chrome/browser/extensions/extension_service_unittest.h"
16 #include "chrome/browser/extensions/extension_sorting.h" 16 #include "chrome/browser/ui/app_list/app_list_extension_sorting.h"
17 #include "chrome/common/extensions/extension_constants.h" 17 #include "chrome/common/extensions/extension_constants.h"
18 #include "chrome/common/extensions/manifest.h" 18 #include "chrome/common/extensions/manifest.h"
19 #include "chrome/common/pref_names.h" 19 #include "chrome/common/pref_names.h"
20 #include "chrome/test/base/testing_profile.h" 20 #include "chrome/test/base/testing_profile.h"
21 #include "testing/gtest/include/gtest/gtest.h" 21 #include "testing/gtest/include/gtest/gtest.h"
22 #include "ui/app_list/app_list_item_model.h" 22 #include "ui/app_list/app_list_item_model.h"
23 23
24 namespace { 24 namespace {
25 25
26 const char kHostedAppId[] = "dceacbkfkmllgmjmbhgkpjegnodmildf"; 26 const char kHostedAppId[] = "dceacbkfkmllgmjmbhgkpjegnodmildf";
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 183
184 base::RunLoop().RunUntilIdle(); 184 base::RunLoop().RunUntilIdle();
185 } 185 }
186 186
187 TEST_F(AppsModelBuilderTest, OrdinalPrefsChange) { 187 TEST_F(AppsModelBuilderTest, OrdinalPrefsChange) {
188 scoped_ptr<app_list::AppListModel::Apps> model( 188 scoped_ptr<app_list::AppListModel::Apps> model(
189 new app_list::AppListModel::Apps); 189 new app_list::AppListModel::Apps);
190 AppsModelBuilder builder(profile_.get(), model.get(), NULL); 190 AppsModelBuilder builder(profile_.get(), model.get(), NULL);
191 builder.Build(); 191 builder.Build();
192 192
193 ExtensionSorting* sorting = service_->extension_prefs()->extension_sorting(); 193 AppListExtensionSorting* ordering =
194 service_->extension_prefs()->app_list_extension_sorting();
194 195
195 syncer::StringOrdinal package_app_page = 196 syncer::StringOrdinal app1_ordinal =
196 sorting->GetPageOrdinal(kPackagedApp1Id); 197 ordering->GetAppListOrdinalFromPrefs(kPackagedApp1Id);
197 sorting->SetPageOrdinal(kHostedAppId, package_app_page.CreateBefore()); 198 syncer::StringOrdinal app2_ordinal =
199 ordering->GetAppListOrdinalFromPrefs(kPackagedApp2Id);
200
201 ordering->UpdateAppListOrdinalFromSync(
202 kHostedAppId,
203 app1_ordinal.CreateBefore());
198 EXPECT_EQ(std::string("Hosted App,Packaged App 1,Packaged App 2"), 204 EXPECT_EQ(std::string("Hosted App,Packaged App 1,Packaged App 2"),
199 GetModelContent(model.get())); 205 GetModelContent(model.get()));
200 206
201 syncer::StringOrdinal app1_ordinal = 207 ordering->UpdateAppListOrdinalFromSync(
202 sorting->GetAppLaunchOrdinal(kPackagedApp1Id); 208 kHostedAppId,
203 syncer::StringOrdinal app2_ordinal = 209 app1_ordinal.CreateBetween(app2_ordinal));
204 sorting->GetAppLaunchOrdinal(kPackagedApp2Id);
205 sorting->SetPageOrdinal(kHostedAppId, package_app_page);
206 sorting->SetAppLaunchOrdinal(kHostedAppId,
207 app1_ordinal.CreateBetween(app2_ordinal));
208 EXPECT_EQ(std::string("Packaged App 1,Hosted App,Packaged App 2"), 210 EXPECT_EQ(std::string("Packaged App 1,Hosted App,Packaged App 2"),
209 GetModelContent(model.get())); 211 GetModelContent(model.get()));
210 } 212 }
211 213
212 TEST_F(AppsModelBuilderTest, OnExtensionMoved) { 214 TEST_F(AppsModelBuilderTest, OnExtensionMoved) {
213 scoped_ptr<app_list::AppListModel::Apps> model( 215 scoped_ptr<app_list::AppListModel::Apps> model(
214 new app_list::AppListModel::Apps); 216 new app_list::AppListModel::Apps);
215 AppsModelBuilder builder(profile_.get(), model.get(), NULL); 217 AppsModelBuilder builder(profile_.get(), model.get(), NULL);
216 builder.Build(); 218 builder.Build();
217 219
218 ExtensionSorting* sorting = service_->extension_prefs()->extension_sorting(); 220 AppListExtensionSorting* ordering =
219 sorting->SetPageOrdinal(kHostedAppId, 221 service_->extension_prefs()->app_list_extension_sorting();
220 sorting->GetPageOrdinal(kPackagedApp1Id));
221 222
222 service_->OnExtensionMoved(kHostedAppId, kPackagedApp1Id, kPackagedApp2Id); 223 ordering->OnExtensionMoved(kHostedAppId, kPackagedApp1Id, kPackagedApp2Id);
223 EXPECT_EQ(std::string("Packaged App 1,Hosted App,Packaged App 2"), 224 EXPECT_EQ(std::string("Packaged App 1,Hosted App,Packaged App 2"),
224 GetModelContent(model.get())); 225 GetModelContent(model.get()));
225 226
226 service_->OnExtensionMoved(kHostedAppId, kPackagedApp2Id, std::string()); 227 ordering->OnExtensionMoved(kHostedAppId, kPackagedApp2Id, std::string());
227 EXPECT_EQ(std::string("Packaged App 1,Packaged App 2,Hosted App"), 228 EXPECT_EQ(std::string("Packaged App 1,Packaged App 2,Hosted App"),
228 GetModelContent(model.get())); 229 GetModelContent(model.get()));
229 230
230 service_->OnExtensionMoved(kHostedAppId, std::string(), kPackagedApp1Id); 231 ordering->OnExtensionMoved(kHostedAppId, std::string(), kPackagedApp1Id);
231 EXPECT_EQ(std::string("Hosted App,Packaged App 1,Packaged App 2"), 232 EXPECT_EQ(std::string("Hosted App,Packaged App 1,Packaged App 2"),
232 GetModelContent(model.get())); 233 GetModelContent(model.get()));
233 } 234 }
234 235
235 TEST_F(AppsModelBuilderTest, InvalidOrdinal) { 236 TEST_F(AppsModelBuilderTest, InvalidOrdinal) {
236 // Creates a no-ordinal case. 237 // Creates a no-ordinal case.
237 ExtensionSorting* sorting = service_->extension_prefs()->extension_sorting(); 238 AppListExtensionSorting* ordering =
238 sorting->ClearOrdinals(kPackagedApp1Id); 239 service_->extension_prefs()->app_list_extension_sorting();
240 ordering->Erase(kPackagedApp1Id);
239 241
240 // Creates an corrupted ordinal case. 242 // Creates an corrupted ordinal case.
241 ExtensionScopedPrefs* scoped_prefs = service_->extension_prefs(); 243 ExtensionScopedPrefs* scoped_prefs = service_->extension_prefs();
242 scoped_prefs->UpdateExtensionPref( 244 scoped_prefs->UpdateExtensionPref(
243 kHostedAppId, 245 kHostedAppId,
244 "page_ordinal", 246 "app_list_ordinal",
245 base::Value::CreateStringValue("a corrupted ordinal")); 247 base::Value::CreateStringValue("a corrupted ordinal"));
246 248
247 scoped_ptr<app_list::AppListModel::Apps> model( 249 scoped_ptr<app_list::AppListModel::Apps> model(
248 new app_list::AppListModel::Apps); 250 new app_list::AppListModel::Apps);
249 AppsModelBuilder builder(profile_.get(), model.get(), NULL); 251 AppsModelBuilder builder(profile_.get(), model.get(), NULL);
250 252
251 // This should not assert or crash. 253 // This should not assert or crash.
252 builder.Build(); 254 builder.Build();
253 } 255 }
254 256
255 TEST_F(AppsModelBuilderTest, OrdinalConfilicts) { 257 TEST_F(AppsModelBuilderTest, OrdinalConfilicts) {
256 // Creates conflict ordinals for app1 and app2. 258 // Creates conflict ordinals for app1 and app2.
257 syncer::StringOrdinal conflict_ordinal = 259 syncer::StringOrdinal conflict_ordinal =
258 syncer::StringOrdinal::CreateInitialOrdinal(); 260 syncer::StringOrdinal::CreateInitialOrdinal();
259 261
260 ExtensionSorting* sorting = service_->extension_prefs()->extension_sorting(); 262 AppListExtensionSorting* ordering =
261 sorting->SetPageOrdinal(kHostedAppId, conflict_ordinal); 263 service_->extension_prefs()->app_list_extension_sorting();
262 sorting->SetAppLaunchOrdinal(kHostedAppId, conflict_ordinal); 264 ordering->UpdateAppListOrdinalFromSync(kHostedAppId, conflict_ordinal);
263 265 ordering->UpdateAppListOrdinalFromSync(kPackagedApp1Id, conflict_ordinal);
264 sorting->SetPageOrdinal(kPackagedApp1Id, conflict_ordinal); 266 ordering->UpdateAppListOrdinalFromSync(kPackagedApp2Id, conflict_ordinal);
265 sorting->SetAppLaunchOrdinal(kPackagedApp1Id, conflict_ordinal);
266
267 sorting->SetPageOrdinal(kPackagedApp2Id, conflict_ordinal);
268 sorting->SetAppLaunchOrdinal(kPackagedApp2Id, conflict_ordinal);
269 267
270 scoped_ptr<app_list::AppListModel::Apps> model( 268 scoped_ptr<app_list::AppListModel::Apps> model(
271 new app_list::AppListModel::Apps); 269 new app_list::AppListModel::Apps);
272 AppsModelBuilder builder(profile_.get(), model.get(), NULL); 270 AppsModelBuilder builder(profile_.get(), model.get(), NULL);
271 // This fixes the collisions.
273 builder.Build(); 272 builder.Build();
274 273
275 // By default, conflicted items are sorted by their app ids. 274 // By default, conflicted items are sorted by their app ids.
276 EXPECT_EQ(std::string("Hosted App,Packaged App 1,Packaged App 2"), 275 EXPECT_EQ(std::string("Hosted App,Packaged App 1,Packaged App 2"),
277 GetModelContent(model.get())); 276 GetModelContent(model.get()));
278 277
279 // Move hosted app between app1 and app2 and it should not crash. 278 // Move hosted app between app1 and app2 and it should not crash.
280 service_->OnExtensionMoved(kHostedAppId, kPackagedApp1Id, kPackagedApp2Id); 279 ordering->OnExtensionMoved(kHostedAppId, kPackagedApp1Id, kPackagedApp2Id);
281 EXPECT_EQ(std::string("Packaged App 1,Hosted App,Packaged App 2"), 280 EXPECT_EQ(std::string("Packaged App 1,Hosted App,Packaged App 2"),
282 GetModelContent(model.get())); 281 GetModelContent(model.get()));
283 } 282 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698