0dd99442618ab3e045bd2f77a1d2e1dd19831f87
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / app_list / search / app_search_provider_unittest.cc
1 // Copyright 2013 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 <string>
6
7 #include "base/basictypes.h"
8 #include "base/memory/scoped_ptr.h"
9 #include "base/run_loop.h"
10 #include "base/strings/utf_string_conversions.h"
11 #include "chrome/browser/extensions/extension_service.h"
12 #include "chrome/browser/ui/app_list/app_list_test_util.h"
13 #include "chrome/browser/ui/app_list/search/app_search_provider.h"
14 #include "chrome/common/chrome_constants.h"
15 #include "chrome/test/base/testing_profile.h"
16 #include "extensions/browser/extension_prefs.h"
17 #include "extensions/browser/uninstall_reason.h"
18 #include "extensions/common/extension_set.h"
19 #include "testing/gtest/include/gtest/gtest.h"
20 #include "ui/app_list/search_result.h"
21
22 namespace app_list {
23 namespace test {
24
25 const base::Time kTestCurrentTime = base::Time::FromInternalValue(1000);
26
27 bool MoreRelevant(const SearchResult* result1, const SearchResult* result2) {
28   return result1->relevance() > result2->relevance();
29 }
30
31 class AppSearchProviderTest : public AppListTestBase {
32  public:
33   AppSearchProviderTest() {}
34   ~AppSearchProviderTest() override {}
35
36   // AppListTestBase overrides:
37   void SetUp() override {
38     AppListTestBase::SetUp();
39
40     app_search_.reset(new AppSearchProvider(profile_.get(), NULL));
41   }
42
43   std::string RunQuery(const std::string& query) {
44     app_search_->StartImpl(kTestCurrentTime, base::UTF8ToUTF16(query));
45
46     // Sort results by relevance.
47     std::vector<SearchResult*> sorted_results;
48     std::copy(app_search_->results().begin(),
49               app_search_->results().end(),
50               std::back_inserter(sorted_results));
51     std::sort(sorted_results.begin(), sorted_results.end(), &MoreRelevant);
52
53     std::string result_str;
54     for (size_t i = 0; i < sorted_results.size(); ++i) {
55       if (!result_str.empty())
56         result_str += ',';
57
58       result_str += base::UTF16ToUTF8(sorted_results[i]->title());
59     }
60     return result_str;
61   }
62
63  private:
64   scoped_ptr<AppSearchProvider> app_search_;
65
66   DISALLOW_COPY_AND_ASSIGN(AppSearchProviderTest);
67 };
68
69 TEST_F(AppSearchProviderTest, Basic) {
70   EXPECT_EQ("", RunQuery("!@#$-,-_"));
71   EXPECT_EQ("", RunQuery("unmatched query"));
72
73   // Search for "pa" should return both packaged app. The order is undefined
74   // because the test only considers textual relevance and the two apps end
75   // up having the same score.
76   const std::string result = RunQuery("pa");
77   EXPECT_TRUE(result == "Packaged App 1,Packaged App 2" ||
78               result == "Packaged App 2,Packaged App 1");
79
80   EXPECT_EQ("Packaged App 1", RunQuery("pa1"));
81   EXPECT_EQ("Packaged App 2", RunQuery("pa2"));
82   EXPECT_EQ("Packaged App 1", RunQuery("app1"));
83   EXPECT_EQ("Hosted App", RunQuery("host"));
84 }
85
86 TEST_F(AppSearchProviderTest, DisableAndEnable) {
87   EXPECT_EQ("Hosted App", RunQuery("host"));
88
89   service_->DisableExtension(kHostedAppId,
90                              extensions::Extension::DISABLE_NONE);
91   EXPECT_EQ("Hosted App", RunQuery("host"));
92
93   service_->EnableExtension(kHostedAppId);
94   EXPECT_EQ("Hosted App", RunQuery("host"));
95 }
96
97 TEST_F(AppSearchProviderTest, Uninstall) {
98   EXPECT_EQ("Packaged App 1", RunQuery("pa1"));
99   service_->UninstallExtension(kPackagedApp1Id,
100                                extensions::UNINSTALL_REASON_FOR_TESTING,
101                                base::Bind(&base::DoNothing),
102                                NULL);
103   EXPECT_EQ("", RunQuery("pa1"));
104
105   // Let uninstall code to clean up.
106   base::RunLoop().RunUntilIdle();
107 }
108
109 TEST_F(AppSearchProviderTest, FetchRecommendations) {
110   extensions::ExtensionPrefs* prefs =
111       extensions::ExtensionPrefs::Get(profile_.get());
112
113   prefs->SetLastLaunchTime(kHostedAppId, base::Time::FromInternalValue(20));
114   prefs->SetLastLaunchTime(kPackagedApp1Id, base::Time::FromInternalValue(10));
115   prefs->SetLastLaunchTime(kPackagedApp2Id, base::Time::FromInternalValue(0));
116   EXPECT_EQ("Hosted App,Packaged App 1,Packaged App 2", RunQuery(""));
117
118   prefs->SetLastLaunchTime(kHostedAppId, base::Time::FromInternalValue(0));
119   prefs->SetLastLaunchTime(kPackagedApp1Id, base::Time::FromInternalValue(10));
120   prefs->SetLastLaunchTime(kPackagedApp2Id, base::Time::FromInternalValue(20));
121   EXPECT_EQ("Packaged App 2,Packaged App 1,Hosted App", RunQuery(""));
122 }
123
124 }  // namespace test
125 }  // namespace app_list