app_search_provider_unittest.cc revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
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
19namespace app_list {
20namespace test {
21
22const char kHostedAppId[] = "dceacbkfkmllgmjmbhgkpjegnodmildf";
23const char kPackagedApp1Id[] = "emfkafnhnpcmabnnkckkchdilgeoekbo";
24
25class 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
74TEST_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
92TEST_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
103TEST_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
114