Home | History | Annotate | Download | only in search
      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.h"
     12 #include "chrome/browser/ui/app_list/app_list_test_util.h"
     13 #include "chrome/browser/ui/app_list/search/app_search_provider.h"
     14 #include "chrome/browser/ui/app_list/search/chrome_search_result.h"
     15 #include "chrome/common/chrome_constants.h"
     16 #include "chrome/test/base/testing_profile.h"
     17 #include "extensions/common/extension_set.h"
     18 #include "testing/gtest/include/gtest/gtest.h"
     19 
     20 namespace app_list {
     21 namespace test {
     22 
     23 class AppSearchProviderTest : public AppListTestBase {
     24  public:
     25   AppSearchProviderTest() {}
     26   virtual ~AppSearchProviderTest() {}
     27 
     28   // AppListTestBase overrides:
     29   virtual void SetUp() OVERRIDE {
     30     AppListTestBase::SetUp();
     31 
     32     app_search_.reset(new AppSearchProvider(profile_.get(), NULL));
     33   }
     34 
     35   std::string RunQuery(const std::string& query) {
     36     app_search_->Start(base::UTF8ToUTF16(query));
     37     app_search_->Stop();
     38 
     39     std::string result_str;
     40     const SearchProvider::Results& results = app_search_->results();
     41     for (size_t i = 0; i < results.size(); ++i) {
     42       if (!result_str.empty())
     43         result_str += ',';
     44 
     45       result_str += base::UTF16ToUTF8(results[i]->title());
     46     }
     47     return result_str;
     48   }
     49 
     50  private:
     51   scoped_ptr<AppSearchProvider> app_search_;
     52 
     53   DISALLOW_COPY_AND_ASSIGN(AppSearchProviderTest);
     54 };
     55 
     56 TEST_F(AppSearchProviderTest, Basic) {
     57   EXPECT_EQ("", RunQuery(""));
     58   EXPECT_EQ("", RunQuery("!@#$-,-_"));
     59   EXPECT_EQ("", RunQuery("unmatched query"));
     60 
     61   // Search for "pa" should return both packaged app. The order is undefined
     62   // because the test only considers textual relevance and the two apps end
     63   // up having the same score.
     64   const std::string result = RunQuery("pa");
     65   EXPECT_TRUE(result == "Packaged App 1,Packaged App 2" ||
     66               result == "Packaged App 2,Packaged App 1");
     67 
     68   EXPECT_EQ("Packaged App 1", RunQuery("pa1"));
     69   EXPECT_EQ("Packaged App 2", RunQuery("pa2"));
     70   EXPECT_EQ("Packaged App 1", RunQuery("app1"));
     71   EXPECT_EQ("Hosted App", RunQuery("host"));
     72 }
     73 
     74 TEST_F(AppSearchProviderTest, DisableAndEnable) {
     75   EXPECT_EQ("Hosted App", RunQuery("host"));
     76 
     77   service_->DisableExtension(kHostedAppId,
     78                              extensions::Extension::DISABLE_NONE);
     79   EXPECT_EQ("Hosted App", RunQuery("host"));
     80 
     81   service_->EnableExtension(kHostedAppId);
     82   EXPECT_EQ("Hosted App", RunQuery("host"));
     83 }
     84 
     85 TEST_F(AppSearchProviderTest, Uninstall) {
     86   EXPECT_EQ("Packaged App 1", RunQuery("pa1"));
     87   service_->UninstallExtension(kPackagedApp1Id, false, NULL);
     88   EXPECT_EQ("", RunQuery("pa1"));
     89 
     90   // Let uninstall code to clean up.
     91   base::RunLoop().RunUntilIdle();
     92 }
     93 
     94 }  // namespace test
     95 }  // namespace app_list
     96