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.
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/test/base/testing_profile.h"
15 #include "extensions/common/extension_set.h"
16 #include "testing/gtest/include/gtest/gtest.h"
21 const char kHostedAppId[] = "dceacbkfkmllgmjmbhgkpjegnodmildf";
22 const char kPackagedApp1Id[] = "emfkafnhnpcmabnnkckkchdilgeoekbo";
24 class AppSearchProviderTest : public ExtensionServiceTestBase {
26 AppSearchProviderTest() {}
27 virtual ~AppSearchProviderTest() {}
29 // ExtensionServiceTestBase overrides:
30 virtual void SetUp() OVERRIDE {
31 ExtensionServiceTestBase::SetUp();
33 // Load "app_list" extensions test profile.
34 // The test profile has 4 extensions:
35 // 1 dummy extension, 2 packaged extension apps and 1 hosted extension app.
36 base::FilePath source_install_dir = data_dir_
37 .AppendASCII("app_list")
38 .AppendASCII("Extensions");
39 base::FilePath pref_path = source_install_dir
41 .AppendASCII("Preferences");
42 InitializeInstalledExtensionService(pref_path, source_install_dir);
45 // There should be 4 extensions in the test profile.
46 const extensions::ExtensionSet* extensions = service_->extensions();
47 ASSERT_EQ(static_cast<size_t>(4), extensions->size());
49 app_search_.reset(new AppSearchProvider(profile_.get(), NULL));
52 std::string RunQuery(const std::string& query) {
53 app_search_->Start(base::UTF8ToUTF16(query));
56 std::string result_str;
57 const SearchProvider::Results& results = app_search_->results();
58 for (size_t i = 0; i < results.size(); ++i) {
59 if (!result_str.empty())
62 result_str += base::UTF16ToUTF8(results[i]->title());
68 scoped_ptr<AppSearchProvider> app_search_;
70 DISALLOW_COPY_AND_ASSIGN(AppSearchProviderTest);
73 TEST_F(AppSearchProviderTest, Basic) {
74 EXPECT_EQ("", RunQuery(""));
75 EXPECT_EQ("", RunQuery("!@#$-,-_"));
76 EXPECT_EQ("", RunQuery("unmatched query"));
78 // Search for "pa" should return both packaged app. The order is undefined
79 // because the test only considers textual relevance and the two apps end
80 // up having the same score.
81 const std::string result = RunQuery("pa");
82 EXPECT_TRUE(result == "Packaged App 1,Packaged App 2" ||
83 result == "Packaged App 2,Packaged App 1");
85 EXPECT_EQ("Packaged App 1", RunQuery("pa1"));
86 EXPECT_EQ("Packaged App 2", RunQuery("pa2"));
87 EXPECT_EQ("Packaged App 1", RunQuery("app1"));
88 EXPECT_EQ("Hosted App", RunQuery("host"));
91 TEST_F(AppSearchProviderTest, DisableAndEnable) {
92 EXPECT_EQ("Hosted App", RunQuery("host"));
94 service_->DisableExtension(kHostedAppId,
95 extensions::Extension::DISABLE_NONE);
96 EXPECT_EQ("Hosted App", RunQuery("host"));
98 service_->EnableExtension(kHostedAppId);
99 EXPECT_EQ("Hosted App", RunQuery("host"));
102 TEST_F(AppSearchProviderTest, Uninstall) {
103 EXPECT_EQ("Packaged App 1", RunQuery("pa1"));
104 service_->UninstallExtension(kPackagedApp1Id, false, NULL);
105 EXPECT_EQ("", RunQuery("pa1"));
107 // Let uninstall code to clean up.
108 base::RunLoop().RunUntilIdle();
112 } // namespace app_list