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

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

Issue 10957048: app_list: Use NTP ordering in ExtensionSorting to sort apps. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 3 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
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/file_path.h" 9 #include "base/file_path.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
11 #include "base/stl_util.h"
12 #include "chrome/browser/extensions/extension_service_unittest.h" 11 #include "chrome/browser/extensions/extension_service_unittest.h"
12 #include "chrome/browser/extensions/extension_sorting.h"
13 #include "chrome/test/base/testing_profile.h" 13 #include "chrome/test/base/testing_profile.h"
14 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
15 #include "ui/app_list/app_list_item_model.h" 15 #include "ui/app_list/app_list_item_model.h"
16 16
17 namespace { 17 namespace {
18 18
19 class TestAppListItemModel : public app_list::AppListItemModel { 19 const char kHostedAppId[] = "dceacbkfkmllgmjmbhgkpjegnodmildf";
20 public: 20 const char kPackagedApp1Id[] = "emfkafnhnpcmabnnkckkchdilgeoekbo";
21 explicit TestAppListItemModel(const std::string& title) { 21 const char kPackagedApp2Id[] = "jlklkagmeajbjiobondfhiekepofmljl";
22 SetTitle(title);
23 }
24
25 private:
26 DISALLOW_COPY_AND_ASSIGN(TestAppListItemModel);
27 };
28 22
29 // Get a string of all apps in |model| joined with ','. 23 // Get a string of all apps in |model| joined with ','.
30 std::string GetModelContent(app_list::AppListModel::Apps* model) { 24 std::string GetModelContent(app_list::AppListModel::Apps* model) {
31 std::string content; 25 std::string content;
32 for (size_t i = 0; i < model->item_count(); ++i) { 26 for (size_t i = 0; i < model->item_count(); ++i) {
33 if (i > 0) 27 if (i > 0)
34 content += ','; 28 content += ',';
35 content += model->GetItemAt(i)->title(); 29 content += model->GetItemAt(i)->title();
36 } 30 }
37 return content; 31 return content;
38 } 32 }
39 33
40 } // namespace 34 } // namespace
41 35
42 class AppsModelBuilderTest : public ExtensionServiceTestBase { 36 class AppsModelBuilderTest : public ExtensionServiceTestBase {
43 public: 37 public:
44 AppsModelBuilderTest() {} 38 AppsModelBuilderTest() {}
45 virtual ~AppsModelBuilderTest() {} 39 virtual ~AppsModelBuilderTest() {}
40
41 virtual void SetUp() OVERRIDE {
42 // Load "app_list" extensions test profile.
43 // The test profile has 4 extensions:
44 // 1 dummy extension, 2 packaged extension apps and 1 hosted extension app.
45 FilePath source_install_dir = data_dir_
46 .AppendASCII("app_list")
47 .AppendASCII("Extensions");
48 FilePath pref_path = source_install_dir
49 .DirName()
50 .AppendASCII("Preferences");
51 InitializeInstalledExtensionService(pref_path, source_install_dir);
52 service_->Init();
53
54 // There should be 4 extensions in the test profile.
55 const ExtensionSet* extensions = service_->extensions();
56 ASSERT_EQ(static_cast<size_t>(4), extensions->size());
57 }
46 }; 58 };
47 59
48 TEST_F(AppsModelBuilderTest, GetExtensionApps) { 60 TEST_F(AppsModelBuilderTest, Build) {
49 // Load "app_list" extensions test profile. The test profile has 4 extensions:
50 // 1 dummy extension, 2 packaged extension apps and 1 hosted extension app.
51 FilePath source_install_dir = data_dir_
52 .AppendASCII("app_list")
53 .AppendASCII("Extensions");
54 FilePath pref_path = source_install_dir
55 .DirName()
56 .AppendASCII("Preferences");
57 InitializeInstalledExtensionService(pref_path, source_install_dir);
58 service_->Init();
59
60 // There should be 4 extensions in the test profile.
61 const ExtensionSet* extensions = service_->extensions();
62 ASSERT_EQ(static_cast<size_t>(4), extensions->size());
63
64 AppsModelBuilder builder(profile_.get(), NULL, NULL);
65
66 AppsModelBuilder::Apps apps;
67 builder.GetExtensionApps(&apps);
68
69 // The apps list would have 3 extension apps in the profile.
70 EXPECT_EQ(static_cast<size_t>(3), apps.size());
71 EXPECT_EQ("Hosted App", apps[0]->title());
72 EXPECT_EQ("Packaged App 1", apps[1]->title());
73 EXPECT_EQ("Packaged App 2", apps[2]->title());
74
75 STLDeleteElements(&apps);
76 }
77
78 TEST_F(AppsModelBuilderTest, SortAndPopulateModel) {
79 const char* kInput[] = {
80 "CB", "Ca", "B", "a",
81 };
82 const char* kExpected = "a,B,Ca,CB";
83
84 scoped_ptr<app_list::AppListModel::Apps> model(
85 new app_list::AppListModel::Apps);
86
87 AppsModelBuilder::Apps apps;
88 for (size_t i = 0; i < arraysize(kInput); ++i)
89 apps.push_back(new TestAppListItemModel(kInput[i]));
90
91 AppsModelBuilder builder(profile_.get(), model.get(), NULL);
92 builder.SortAndPopulateModel(apps);
93
94 EXPECT_EQ(kExpected, GetModelContent(model.get()));
95 }
96
97 TEST_F(AppsModelBuilderTest, InsertItemByTitle) {
98 scoped_ptr<app_list::AppListModel::Apps> model( 61 scoped_ptr<app_list::AppListModel::Apps> model(
99 new app_list::AppListModel::Apps); 62 new app_list::AppListModel::Apps);
100 AppsModelBuilder builder(profile_.get(), model.get(), NULL); 63 AppsModelBuilder builder(profile_.get(), model.get(), NULL);
64 builder.Build();
101 65
102 const char* kInput[] = { 66 // The apps list would have 3 extension apps in the profile.
103 "CB", "Ca", "B", "a", "z", "D" 67 EXPECT_EQ(std::string("Packaged App 1,Packaged App 2,Hosted App"),
104 }; 68 GetModelContent(model.get()));
105 const char* kExpected = "a,B,Ca,CB,D,z";
106
107 for (size_t i = 0; i < arraysize(kInput); ++i)
108 builder.InsertItemByTitle(new TestAppListItemModel(kInput[i]));
109
110 EXPECT_EQ(kExpected, GetModelContent(model.get()));
111 } 69 }
112 70
71 TEST_F(AppsModelBuilderTest, DisableAndEnable) {
72 scoped_ptr<app_list::AppListModel::Apps> model(
73 new app_list::AppListModel::Apps);
74 AppsModelBuilder builder(profile_.get(), model.get(), NULL);
75 builder.Build();
76
77 service_->DisableExtension(kHostedAppId,
78 extensions::Extension::DISABLE_NONE);
79 EXPECT_EQ(std::string("Packaged App 1,Packaged App 2"),
80 GetModelContent(model.get()));
81
82 service_->EnableExtension(kHostedAppId);
83 EXPECT_EQ(std::string("Packaged App 1,Packaged App 2,Hosted App"),
84 GetModelContent(model.get()));
85 }
86
87 TEST_F(AppsModelBuilderTest, OrdinalPrefsChange) {
88 scoped_ptr<app_list::AppListModel::Apps> model(
89 new app_list::AppListModel::Apps);
90 AppsModelBuilder builder(profile_.get(), model.get(), NULL);
91 builder.Build();
92
93 ExtensionSorting* sorting = service_->extension_prefs()->extension_sorting();
94
95 syncer::StringOrdinal package_app_page =
96 sorting->GetPageOrdinal(kPackagedApp1Id);
97 sorting->SetPageOrdinal(kHostedAppId, package_app_page.CreateBefore());
98 EXPECT_EQ(std::string("Hosted App,Packaged App 1,Packaged App 2"),
99 GetModelContent(model.get()));
100
101 syncer::StringOrdinal app1_ordinal =
102 sorting->GetAppLaunchOrdinal(kPackagedApp1Id);
103 syncer::StringOrdinal app2_ordinal =
104 sorting->GetAppLaunchOrdinal(kPackagedApp2Id);
105 sorting->SetPageOrdinal(kHostedAppId, package_app_page);
106 sorting->SetAppLaunchOrdinal(kHostedAppId,
107 app1_ordinal.CreateBetween(app2_ordinal));
108 EXPECT_EQ(std::string("Packaged App 1,Hosted App,Packaged App 2"),
109 GetModelContent(model.get()));
110 }
111
112 TEST_F(AppsModelBuilderTest, OnExtensionMoved) {
113 scoped_ptr<app_list::AppListModel::Apps> model(
114 new app_list::AppListModel::Apps);
115 AppsModelBuilder builder(profile_.get(), model.get(), NULL);
116 builder.Build();
117
118 ExtensionSorting* sorting = service_->extension_prefs()->extension_sorting();
119 sorting->SetPageOrdinal(kHostedAppId,
120 sorting->GetPageOrdinal(kPackagedApp1Id));
121
122 service_->OnExtensionMoved(kHostedAppId, kPackagedApp1Id, kPackagedApp2Id);
123 EXPECT_EQ(std::string("Packaged App 1,Hosted App,Packaged App 2"),
124 GetModelContent(model.get()));
125
126 service_->OnExtensionMoved(kHostedAppId, kPackagedApp2Id, std::string());
127 EXPECT_EQ(std::string("Packaged App 1,Packaged App 2,Hosted App"),
128 GetModelContent(model.get()));
129
130 service_->OnExtensionMoved(kHostedAppId, std::string(), kPackagedApp1Id);
131 EXPECT_EQ(std::string("Hosted App,Packaged App 1,Packaged App 2"),
132 GetModelContent(model.get()));
133 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698