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