Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(304)

Unified Diff: chrome/browser/ui/webui/ntp/suggestions_combiner_unittest.cc

Issue 1141843004: NTP Zombie Code Slayer II: Suggestions Page (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: and remove urls Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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();
- }
-}
-
« no previous file with comments | « chrome/browser/ui/webui/ntp/suggestions_combiner.cc ('k') | chrome/browser/ui/webui/ntp/suggestions_page_handler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698