app_search_provider_unittest.cc revision 3551c9c881056c480085172ff9840cab31610854
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/test/base/testing_profile.h" 15#include "testing/gtest/include/gtest/gtest.h" 16 17namespace app_list { 18namespace test { 19 20const char kHostedAppId[] = "dceacbkfkmllgmjmbhgkpjegnodmildf"; 21const char kPackagedApp1Id[] = "emfkafnhnpcmabnnkckkchdilgeoekbo"; 22const char kPackagedApp2Id[] = "jlklkagmeajbjiobondfhiekepofmljl"; 23 24class AppSearchProviderTest : public ExtensionServiceTestBase { 25 public: 26 AppSearchProviderTest() {} 27 virtual ~AppSearchProviderTest() {} 28 29 // ExtensionServiceTestBase overrides: 30 virtual void SetUp() OVERRIDE { 31 ExtensionServiceTestBase::SetUp(); 32 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 40 .DirName() 41 .AppendASCII("Preferences"); 42 InitializeInstalledExtensionService(pref_path, source_install_dir); 43 service_->Init(); 44 45 // There should be 4 extensions in the test profile. 46 const ExtensionSet* extensions = service_->extensions(); 47 ASSERT_EQ(static_cast<size_t>(4), extensions->size()); 48 49 app_search_.reset(new AppSearchProvider(profile_.get(), NULL)); 50 } 51 52 std::string RunQuery(const std::string& query) { 53 app_search_->Start(UTF8ToUTF16(query)); 54 app_search_->Stop(); 55 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()) 60 result_str += ','; 61 62 result_str += UTF16ToUTF8(results[i]->title()); 63 } 64 return result_str; 65 } 66 67 private: 68 scoped_ptr<AppSearchProvider> app_search_; 69 70 DISALLOW_COPY_AND_ASSIGN(AppSearchProviderTest); 71}; 72 73TEST_F(AppSearchProviderTest, Basic) { 74 EXPECT_EQ("", RunQuery("")); 75 EXPECT_EQ("", RunQuery("!@#$-,-_")); 76 EXPECT_EQ("", RunQuery("unmatched query")); 77 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"); 84 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")); 89} 90 91TEST_F(AppSearchProviderTest, DisableAndEnable) { 92 EXPECT_EQ("Hosted App", RunQuery("host")); 93 94 service_->DisableExtension(kHostedAppId, 95 extensions::Extension::DISABLE_NONE); 96 EXPECT_EQ("Hosted App", RunQuery("host")); 97 98 service_->EnableExtension(kHostedAppId); 99 EXPECT_EQ("Hosted App", RunQuery("host")); 100} 101 102TEST_F(AppSearchProviderTest, Uninstall) { 103 EXPECT_EQ("Packaged App 1", RunQuery("pa1")); 104 service_->UninstallExtension(kPackagedApp1Id, false, NULL); 105 EXPECT_EQ("", RunQuery("pa1")); 106 107 // Let uninstall code to clean up. 108 base::RunLoop().RunUntilIdle(); 109} 110 111} // namespace test 112} // namespace app_list 113