| Index: chrome/browser/ui/webui/ntp/suggestions_combiner_unittest.cc
|
| diff --git a/chrome/browser/ui/webui/ntp/suggestions_combiner_unittest.cc b/chrome/browser/ui/webui/ntp/suggestions_combiner_unittest.cc
|
| deleted file mode 100644
|
| index d6bc8802b6fa1a80c2f8ba97e0d9e3acb9aaee6c..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/ui/webui/ntp/suggestions_combiner_unittest.cc
|
| +++ /dev/null
|
| @@ -1,298 +0,0 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -// TODO(beaudoin): What is really needed here?
|
| -
|
| -#include <deque>
|
| -#include <string>
|
| -
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/stl_util.h"
|
| -#include "base/strings/string_util.h"
|
| -#include "base/values.h"
|
| -#include "chrome/browser/ui/webui/ntp/suggestions_combiner.h"
|
| -#include "chrome/browser/ui/webui/ntp/suggestions_page_handler.h"
|
| -#include "chrome/browser/ui/webui/ntp/suggestions_source.h"
|
| -#include "chrome/test/base/testing_profile.h"
|
| -#include "content/public/test/test_browser_thread_bundle.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -namespace {
|
| -
|
| -struct SourceInfo {
|
| - int weight;
|
| - const char* source_name;
|
| - int number_of_suggestions;
|
| -};
|
| -
|
| -struct TestDescription {
|
| - SourceInfo sources[3];
|
| - const char* results[8];
|
| -} test_suite[] = {
|
| - // One source, more than 8 items.
|
| - {
|
| - {{1, "A", 10}},
|
| - {"A 0", "A 1", "A 2", "A 3", "A 4", "A 5", "A 6", "A 7"}
|
| - },
|
| - // One source, exactly 8 items.
|
| - {
|
| - {{1, "A", 8}},
|
| - {"A 0", "A 1", "A 2", "A 3", "A 4", "A 5", "A 6", "A 7"}
|
| - },
|
| - // One source, not enough items.
|
| - {
|
| - {{1, "A", 3}},
|
| - {"A 0", "A 1", "A 2"}
|
| - },
|
| - // One source, no items.
|
| - {
|
| - {{1, "A", 0}},
|
| - {}
|
| - },
|
| - // Two sources, equal weight, more than 8 items.
|
| - {
|
| - {{1, "A", 10}, {1, "B", 10}},
|
| - {"A 0", "A 1", "A 2", "A 3", "B 0", "B 1", "B 2", "B 3"}
|
| - },
|
| - // Two sources, equal weight, exactly 8 items.
|
| - {
|
| - {{1, "A", 4}, {1, "B", 4}},
|
| - {"A 0", "A 1", "A 2", "A 3", "B 0", "B 1", "B 2", "B 3"}
|
| - },
|
| - // Two sources, equal weight, exactly 8 items but source A has more.
|
| - {
|
| - {{1, "A", 5}, {1, "B", 3}},
|
| - {"A 0", "A 1", "A 2", "A 3", "A 4", "B 0", "B 1", "B 2"}
|
| - },
|
| - // Two sources, equal weight, exactly 8 items but source B has more.
|
| - {
|
| - {{1, "A", 2}, {1, "B", 6}},
|
| - {"A 0", "A 1", "B 0", "B 1", "B 2", "B 3", "B 4", "B 5"}
|
| - },
|
| - // Two sources, equal weight, exactly 8 items but source A has none.
|
| - {
|
| - {{1, "A", 0}, {1, "B", 8}},
|
| - {"B 0", "B 1", "B 2", "B 3", "B 4", "B 5", "B 6", "B 7"}
|
| - },
|
| - // Two sources, equal weight, exactly 8 items but source B has none.
|
| - {
|
| - {{1, "A", 8}, {1, "B", 0}},
|
| - {"A 0", "A 1", "A 2", "A 3", "A 4", "A 5", "A 6", "A 7"}
|
| - },
|
| - // Two sources, equal weight, less than 8 items.
|
| - {
|
| - {{1, "A", 3}, {1, "B", 3}},
|
| - {"A 0", "A 1", "A 2", "B 0", "B 1", "B 2"}
|
| - },
|
| - // Two sources, equal weight, less than 8 items but source A has more.
|
| - {
|
| - {{1, "A", 4}, {1, "B", 3}},
|
| - {"A 0", "A 1", "A 2", "A 3", "B 0", "B 1", "B 2"}
|
| - },
|
| - // Two sources, equal weight, less than 8 items but source B has more.
|
| - {
|
| - {{1, "A", 1}, {1, "B", 3}},
|
| - {"A 0", "B 0", "B 1", "B 2"}
|
| - },
|
| - // Two sources, weights 3/4 A 1/4 B, more than 8 items.
|
| - {
|
| - {{3, "A", 10}, {1, "B", 10}},
|
| - {"A 0", "A 1", "A 2", "A 3", "A 4", "A 5", "B 0", "B 1"}
|
| - },
|
| - // Two sources, weights 1/8 A 7/8 B, more than 8 items.
|
| - {
|
| - {{1, "A", 10}, {7, "B", 10}},
|
| - {"A 0", "B 0", "B 1", "B 2", "B 3", "B 4", "B 5", "B 6"}
|
| - },
|
| - // Two sources, weights 1/3 A 2/3 B, more than 8 items.
|
| - {
|
| - {{1, "A", 10}, {2, "B", 10}},
|
| - {"A 0", "A 1", "B 0", "B 1", "B 2", "B 3", "B 4", "B 5"}
|
| - },
|
| - // Three sources, weights 1/2 A 1/4 B 1/4 C, more than 8 items.
|
| - {
|
| - {{2, "A", 10}, {1, "B", 10}, {1, "C", 10}},
|
| - {"A 0", "A 1", "A 2", "A 3", "B 0", "B 1", "C 0", "C 1"}
|
| - },
|
| - // Three sources, weights 1/3 A 1/3 B 1/3 C, more than 8 items.
|
| - {
|
| - {{1, "A", 10}, {1, "B", 10}, {1, "C", 10}},
|
| - {"A 0", "A 1", "B 0", "B 1", "B 2", "C 0", "C 1", "C 2"}
|
| - },
|
| - // Extra items should be grouped together.
|
| - {
|
| - {{1, "A", 3}, {1, "B", 4}, {10, "C", 1}},
|
| - {"A 0", "A 1", "A 2", "B 0", "B 1", "B 2", "B 3", "C 0"}
|
| - }
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -// Stub for a SuggestionsSource that can provide a number of fake suggestions.
|
| -// Fake suggestions are DictionaryValue with a single "title" string field
|
| -// containing the |source_name| followed by the index of the suggestion.
|
| -// Not in the empty namespace since it's a friend of SuggestionsCombiner.
|
| -class SuggestionsSourceStub : public SuggestionsSource {
|
| - public:
|
| - explicit SuggestionsSourceStub(int weight,
|
| - const std::string& source_name, int number_of_suggestions)
|
| - : combiner_(NULL),
|
| - weight_(weight),
|
| - source_name_(source_name),
|
| - number_of_suggestions_(number_of_suggestions),
|
| - debug_(false) {
|
| - }
|
| - ~SuggestionsSourceStub() override { STLDeleteElements(&items_); }
|
| -
|
| - // Call this method to simulate that the SuggestionsSource has received all
|
| - // its suggestions.
|
| - void Done() {
|
| - combiner_->OnItemsReady();
|
| - }
|
| -
|
| - private:
|
| - // SuggestionsSource Override and implementation.
|
| - void SetDebug(bool enable) override { debug_ = enable; }
|
| - int GetWeight() override { return weight_; }
|
| - int GetItemCount() override { return items_.size(); }
|
| - base::DictionaryValue* PopItem() override {
|
| - if (items_.empty())
|
| - return NULL;
|
| - base::DictionaryValue* item = items_.front();
|
| - items_.pop_front();
|
| - return item;
|
| - }
|
| -
|
| - void FetchItems(Profile* profile) override {
|
| - char num_str[21]; // Enough to hold all numbers up to 64-bits.
|
| - for (int i = 0; i < number_of_suggestions_; ++i) {
|
| - base::snprintf(num_str, sizeof(num_str), "%d", i);
|
| - AddSuggestion(source_name_ + ' ' + num_str);
|
| - }
|
| - }
|
| -
|
| - // Adds a fake suggestion. This suggestion is a DictionaryValue with a single
|
| - // "title" field containing |title|.
|
| - void AddSuggestion(const std::string& title) {
|
| - base::DictionaryValue* item = new base::DictionaryValue();
|
| - item->SetString("title", title);
|
| - items_.push_back(item);
|
| - }
|
| -
|
| - void SetCombiner(SuggestionsCombiner* combiner) override {
|
| - DCHECK(!combiner_);
|
| - combiner_ = combiner;
|
| - }
|
| -
|
| - // Our combiner.
|
| - SuggestionsCombiner* combiner_;
|
| -
|
| - int weight_;
|
| - std::string source_name_;
|
| - int number_of_suggestions_;
|
| - bool debug_;
|
| -
|
| - // Keep the results of the db query here.
|
| - std::deque<base::DictionaryValue*> items_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(SuggestionsSourceStub);
|
| -};
|
| -
|
| -class SuggestionsCombinerTest : public testing::Test {
|
| - public:
|
| - SuggestionsCombinerTest() {
|
| - }
|
| -
|
| - protected:
|
| - content::TestBrowserThreadBundle thread_bundle_;
|
| - Profile* profile_;
|
| - SuggestionsHandler* suggestions_handler_;
|
| - SuggestionsCombiner* combiner_;
|
| -
|
| - void Reset() {
|
| - delete combiner_;
|
| - combiner_ = new SuggestionsCombiner(suggestions_handler_, profile_);
|
| - }
|
| -
|
| - private:
|
| - void SetUp() override {
|
| - profile_ = new TestingProfile();
|
| - suggestions_handler_ = new SuggestionsHandler();
|
| - combiner_ = new SuggestionsCombiner(suggestions_handler_, profile_);
|
| - }
|
| -
|
| - void TearDown() override {
|
| - delete combiner_;
|
| - delete suggestions_handler_;
|
| - delete profile_;
|
| - }
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(SuggestionsCombinerTest);
|
| -};
|
| -
|
| -TEST_F(SuggestionsCombinerTest, NoSource) {
|
| - combiner_->FetchItems(NULL);
|
| - EXPECT_EQ(0UL, combiner_->GetPageValues()->GetSize());
|
| -}
|
| -
|
| -TEST_F(SuggestionsCombinerTest, SourcesAreNotDoneFetching) {
|
| - combiner_->AddSource(new SuggestionsSourceStub(1, "sourceA", 10));
|
| - combiner_->AddSource(new SuggestionsSourceStub(1, "sourceB", 10));
|
| - combiner_->FetchItems(NULL);
|
| - EXPECT_EQ(0UL, combiner_->GetPageValues()->GetSize());
|
| -}
|
| -
|
| -TEST_F(SuggestionsCombinerTest, TestSuite) {
|
| - size_t test_count = arraysize(test_suite);
|
| - for (size_t i = 0; i < test_count; ++i) {
|
| - const TestDescription& description = test_suite[i];
|
| - size_t source_count = arraysize(description.sources);
|
| -
|
| - scoped_ptr<SuggestionsSourceStub*[]> sources(
|
| - new SuggestionsSourceStub*[source_count]);
|
| -
|
| - // Setup sources.
|
| - for (size_t j = 0; j < source_count; ++j) {
|
| - const SourceInfo& source_info = description.sources[j];
|
| - // A NULL |source_name| means we shouldn't add this source.
|
| - if (source_info.source_name) {
|
| - sources[j] = new SuggestionsSourceStub(source_info.weight,
|
| - source_info.source_name, source_info.number_of_suggestions);
|
| - combiner_->AddSource(sources[j]);
|
| - } else {
|
| - sources[j] = NULL;
|
| - }
|
| - }
|
| -
|
| - // Start fetching.
|
| - combiner_->FetchItems(NULL);
|
| -
|
| - // Sources complete.
|
| - for (size_t j = 0; j < source_count; ++j) {
|
| - if (sources[j])
|
| - sources[j]->Done();
|
| - }
|
| -
|
| - // Verify expectations.
|
| - base::ListValue* results = combiner_->GetPageValues();
|
| - size_t result_count = results->GetSize();
|
| - EXPECT_LE(result_count, 8UL);
|
| - for (size_t j = 0; j < 8; ++j) {
|
| - if (j < result_count) {
|
| - std::string value;
|
| - base::DictionaryValue* dictionary;
|
| - results->GetDictionary(j, &dictionary);
|
| - dictionary->GetString("title", &value);
|
| - EXPECT_STREQ(description.results[j], value.c_str()) <<
|
| - " test index:" << i;
|
| - } else {
|
| - EXPECT_EQ(description.results[j], static_cast<const char*>(NULL)) <<
|
| - " test index:" << i;
|
| - }
|
| - }
|
| -
|
| - Reset();
|
| - }
|
| -}
|
| -
|
|
|