Upstream version 5.34.104.0
[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_unittest.h"
12 #include "chrome/browser/ui/app_list/search/app_search_provider.h"
13 #include "chrome/browser/ui/app_list/search/chrome_search_result.h"
14 #include "chrome/common/chrome_constants.h"
15 #include "chrome/test/base/testing_profile.h"
16 #include "extensions/common/extension_set.h"
17 #include "testing/gtest/include/gtest/gtest.h"
18
19 namespace app_list {
20 namespace test {
21
22 const char kHostedAppId[] = "dceacbkfkmllgmjmbhgkpjegnodmildf";
23 const char kPackagedApp1Id[] = "emfkafnhnpcmabnnkckkchdilgeoekbo";
24
25 class AppSearchProviderTest : public ExtensionServiceTestBase {
26  public:
27   AppSearchProviderTest() {}
28   virtual ~AppSearchProviderTest() {}
29
30   // ExtensionServiceTestBase overrides:
31   virtual void SetUp() OVERRIDE {
32     ExtensionServiceTestBase::SetUp();
33
34     // Load "app_list" extensions test profile.
35     // The test profile has 4 extensions:
36     // 1 dummy extension, 2 packaged extension apps and 1 hosted extension app.
37     base::FilePath source_install_dir = data_dir_
38         .AppendASCII("app_list")
39         .AppendASCII("Extensions");
40     base::FilePath pref_path = source_install_dir
41         .DirName()
42         .Append(chrome::kPreferencesFilename);
43     InitializeInstalledExtensionService(pref_path, source_install_dir);
44     service_->Init();
45
46     // There should be 4 extensions in the test profile.
47     const extensions::ExtensionSet* extensions = service_->extensions();
48     ASSERT_EQ(static_cast<size_t>(4),  extensions->size());
49
50     app_search_.reset(new AppSearchProvider(profile_.get(), NULL));
51   }
52
53   std::string RunQuery(const std::string& query) {
54     app_search_->Start(base::UTF8ToUTF16(query));
55     app_search_->Stop();
56
57     std::string result_str;
58     const SearchProvider::Results& results = app_search_->results();
59     for (size_t i = 0; i < results.size(); ++i) {
60       if (!result_str.empty())
61         result_str += ',';
62
63       result_str += base::UTF16ToUTF8(results[i]->title());
64     }
65     return result_str;
66   }
67
68  private:
69   scoped_ptr<AppSearchProvider> app_search_;
70
71   DISALLOW_COPY_AND_ASSIGN(AppSearchProviderTest);
72 };
73
74 TEST_F(AppSearchProviderTest, Basic) {
75   EXPECT_EQ("", RunQuery(""));
76   EXPECT_EQ("", RunQuery("!@#$-,-_"));
77   EXPECT_EQ("", RunQuery("unmatched query"));
78
79   // Search for "pa" should return both packaged app. The order is undefined
80   // because the test only considers textual relevance and the two apps end
81   // up having the same score.
82   const std::string result = RunQuery("pa");
83   EXPECT_TRUE(result == "Packaged App 1,Packaged App 2" ||
84               result == "Packaged App 2,Packaged App 1");
85
86   EXPECT_EQ("Packaged App 1", RunQuery("pa1"));
87   EXPECT_EQ("Packaged App 2", RunQuery("pa2"));
88   EXPECT_EQ("Packaged App 1", RunQuery("app1"));
89   EXPECT_EQ("Hosted App", RunQuery("host"));
90 }
91
92 TEST_F(AppSearchProviderTest, DisableAndEnable) {
93   EXPECT_EQ("Hosted App", RunQuery("host"));
94
95   service_->DisableExtension(kHostedAppId,
96                              extensions::Extension::DISABLE_NONE);
97   EXPECT_EQ("Hosted App", RunQuery("host"));
98
99   service_->EnableExtension(kHostedAppId);
100   EXPECT_EQ("Hosted App", RunQuery("host"));
101 }
102
103 TEST_F(AppSearchProviderTest, Uninstall) {
104   EXPECT_EQ("Packaged App 1", RunQuery("pa1"));
105   service_->UninstallExtension(kPackagedApp1Id, false, NULL);
106   EXPECT_EQ("", RunQuery("pa1"));
107
108   // Let uninstall code to clean up.
109   base::RunLoop().RunUntilIdle();
110 }
111
112 }  // namespace test
113 }  // namespace app_list