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