Home | History | Annotate | Download | only in search_engines
      1 // Copyright (c) 2012 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 "base/basictypes.h"
      6 #include "base/memory/scoped_ptr.h"
      7 #include "chrome/browser/search_engines/search_host_to_urls_map.h"
      8 #include "chrome/browser/search_engines/template_url.h"
      9 #include "components/search_engines/search_terms_data.h"
     10 #include "testing/gtest/include/gtest/gtest.h"
     11 
     12 typedef SearchHostToURLsMap::TemplateURLSet TemplateURLSet;
     13 
     14 // Basic functionality for the SearchHostToURLsMap tests.
     15 class SearchHostToURLsMapTest : public testing::Test {
     16  public:
     17   SearchHostToURLsMapTest() {}
     18 
     19   virtual void SetUp();
     20 
     21  protected:
     22   scoped_ptr<SearchHostToURLsMap> provider_map_;
     23   scoped_ptr<TemplateURL> t_urls_[2];
     24   std::string host_;
     25 
     26   DISALLOW_COPY_AND_ASSIGN(SearchHostToURLsMapTest);
     27 };
     28 
     29 void SearchHostToURLsMapTest::SetUp() {
     30   // Add some entries to the search host map.
     31   host_ = "www.unittest.com";
     32   TemplateURLData data;
     33   data.SetURL("http://" + host_ + "/path1");
     34   t_urls_[0].reset(new TemplateURL(data));
     35   data.SetURL("http://" + host_ + "/path2");
     36   t_urls_[1].reset(new TemplateURL(data));
     37   std::vector<TemplateURL*> template_urls;
     38   template_urls.push_back(t_urls_[0].get());
     39   template_urls.push_back(t_urls_[1].get());
     40 
     41   provider_map_.reset(new SearchHostToURLsMap);
     42   provider_map_->Init(template_urls, SearchTermsData());
     43 }
     44 
     45 TEST_F(SearchHostToURLsMapTest, Add) {
     46   std::string new_host = "example.com";
     47   TemplateURLData data;
     48   data.SetURL("http://" + new_host + "/");
     49   TemplateURL new_t_url(data);
     50   provider_map_->Add(&new_t_url, SearchTermsData());
     51 
     52   ASSERT_EQ(&new_t_url, provider_map_->GetTemplateURLForHost(new_host));
     53 }
     54 
     55 TEST_F(SearchHostToURLsMapTest, Remove) {
     56   provider_map_->Remove(t_urls_[0].get(), SearchTermsData());
     57 
     58   const TemplateURL* found_url = provider_map_->GetTemplateURLForHost(host_);
     59   ASSERT_EQ(t_urls_[1].get(), found_url);
     60 
     61   const TemplateURLSet* urls = provider_map_->GetURLsForHost(host_);
     62   ASSERT_TRUE(urls != NULL);
     63 
     64   int url_count = 0;
     65   for (TemplateURLSet::const_iterator i(urls->begin()); i != urls->end(); ++i) {
     66     url_count++;
     67     ASSERT_EQ(t_urls_[1].get(), *i);
     68   }
     69   ASSERT_EQ(1, url_count);
     70 }
     71 
     72 TEST_F(SearchHostToURLsMapTest, GetTemplateURLForKnownHost) {
     73   const TemplateURL* found_url = provider_map_->GetTemplateURLForHost(host_);
     74   ASSERT_TRUE(found_url == t_urls_[0].get() || found_url == t_urls_[1].get());
     75 }
     76 
     77 TEST_F(SearchHostToURLsMapTest, GetTemplateURLForUnknownHost) {
     78   const TemplateURL* found_url =
     79       provider_map_->GetTemplateURLForHost("a" + host_);
     80   ASSERT_TRUE(found_url == NULL);
     81 }
     82 
     83 TEST_F(SearchHostToURLsMapTest, GetURLsForKnownHost) {
     84   const TemplateURLSet* urls = provider_map_->GetURLsForHost(host_);
     85   ASSERT_TRUE(urls != NULL);
     86 
     87   bool found_urls[arraysize(t_urls_)] = { false };
     88 
     89   for (TemplateURLSet::const_iterator i(urls->begin()); i != urls->end(); ++i) {
     90     const TemplateURL* url = *i;
     91     for (size_t i = 0; i < arraysize(found_urls); ++i) {
     92       if (url == t_urls_[i].get()) {
     93         found_urls[i] = true;
     94         break;
     95       }
     96     }
     97   }
     98 
     99   for (size_t i = 0; i < arraysize(found_urls); ++i)
    100     ASSERT_TRUE(found_urls[i]);
    101 }
    102 
    103 TEST_F(SearchHostToURLsMapTest, GetURLsForUnknownHost) {
    104   const SearchHostToURLsMap::TemplateURLSet* urls =
    105       provider_map_->GetURLsForHost("a" + host_);
    106   ASSERT_TRUE(urls == NULL);
    107 }
    108