| Index: components/ntp_tiles/most_visited_sites_unittest.cc
|
| diff --git a/components/ntp_tiles/most_visited_sites_unittest.cc b/components/ntp_tiles/most_visited_sites_unittest.cc
|
| index 6fbc9dcd0872690aeb5e5ffa28b2cb70b036f900..029968dfa138b8e924036cd006e8badde08cd2a1 100644
|
| --- a/components/ntp_tiles/most_visited_sites_unittest.cc
|
| +++ b/components/ntp_tiles/most_visited_sites_unittest.cc
|
| @@ -7,34 +7,48 @@
|
| #include <stddef.h>
|
|
|
| #include <memory>
|
| +#include <ostream>
|
| #include <vector>
|
|
|
| #include "base/macros.h"
|
| #include "base/memory/ptr_util.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| +#include "testing/gmock/include/gmock/gmock.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| namespace ntp_tiles {
|
|
|
| -namespace {
|
| -
|
| -struct TitleURL {
|
| - TitleURL(const std::string& title, const std::string& url)
|
| - : title(base::UTF8ToUTF16(title)), url(url) {}
|
| - TitleURL(const base::string16& title, const std::string& url)
|
| - : title(title), url(url) {}
|
| -
|
| - base::string16 title;
|
| - std::string url;
|
| +// Defined for googletest. Must be defined in the same namespace.
|
| +void PrintTo(const NTPTile& tile, std::ostream* os) {
|
| + *os << "{\"" << tile.title << "\", \"" << tile.url << "\", "
|
| + << static_cast<int>(tile.source) << "}";
|
| +}
|
|
|
| - bool operator==(const TitleURL& other) const {
|
| - return title == other.title && url == other.url;
|
| - }
|
| -};
|
| +namespace {
|
|
|
| -static const size_t kNumSites = 4;
|
| +using testing::ElementsAre;
|
| +
|
| +MATCHER_P3(MatchesTile,
|
| + title,
|
| + url,
|
| + source,
|
| + std::string("has title \"") + title + std::string("\" and url \"") +
|
| + url +
|
| + std::string("\" and source ") +
|
| + testing::PrintToString(static_cast<int>(source))) {
|
| + return arg.title == base::ASCIIToUTF16(title) && arg.url == GURL(url) &&
|
| + arg.source == source;
|
| +}
|
|
|
| -} // namespace
|
| +NTPTile MakeTile(const std::string& title,
|
| + const std::string& url,
|
| + NTPTileSource source) {
|
| + NTPTile tile;
|
| + tile.title = base::ASCIIToUTF16(title);
|
| + tile.url = GURL(url);
|
| + tile.source = source;
|
| + return tile;
|
| +}
|
|
|
| // This a test for MostVisitedSites::MergeTiles(...) method, and thus has the
|
| // same scope as the method itself. This tests merging popular sites with
|
| @@ -43,96 +57,75 @@ static const size_t kNumSites = 4;
|
| // - Removing blacklisted tiles.
|
| // - Correct host extraction from the URL.
|
| // - Ensuring personal tiles are not duplicated in popular tiles.
|
| -class MostVisitedSitesTest : public testing::Test {
|
| - protected:
|
| - void Check(const std::vector<TitleURL>& popular_sites,
|
| - const std::vector<TitleURL>& whitelist_entry_points,
|
| - const std::vector<TitleURL>& personal_sites,
|
| - const std::vector<bool>& expected_sites_is_personal,
|
| - const std::vector<TitleURL>& expected_sites) {
|
| - NTPTilesVector personal_tiles;
|
| - for (const TitleURL& site : personal_sites)
|
| - personal_tiles.push_back(MakeTileFrom(site, true, false));
|
| - NTPTilesVector whitelist_tiles;
|
| - for (const TitleURL& site : whitelist_entry_points)
|
| - whitelist_tiles.push_back(MakeTileFrom(site, false, true));
|
| - NTPTilesVector popular_tiles;
|
| - for (const TitleURL& site : popular_sites)
|
| - popular_tiles.push_back(MakeTileFrom(site, false, false));
|
| - NTPTilesVector result_tiles = MostVisitedSites::MergeTiles(
|
| - std::move(personal_tiles), std::move(whitelist_tiles),
|
| - std::move(popular_tiles));
|
| - std::vector<TitleURL> result_sites;
|
| - std::vector<bool> result_is_personal;
|
| - result_sites.reserve(result_tiles.size());
|
| - result_is_personal.reserve(result_tiles.size());
|
| - for (const auto& tile : result_tiles) {
|
| - result_sites.push_back(TitleURL(tile.title, tile.url.spec()));
|
| - result_is_personal.push_back(tile.source != NTPTileSource::POPULAR);
|
| - }
|
| - EXPECT_EQ(expected_sites_is_personal, result_is_personal);
|
| - EXPECT_EQ(expected_sites, result_sites);
|
| - }
|
| - static NTPTile MakeTileFrom(const TitleURL& title_url,
|
| - bool is_personal,
|
| - bool whitelist) {
|
| - NTPTile tile;
|
| - tile.title = title_url.title;
|
| - tile.url = GURL(title_url.url);
|
| - tile.source = whitelist ? NTPTileSource::WHITELIST
|
| - : (is_personal ? NTPTileSource::TOP_SITES
|
| - : NTPTileSource::POPULAR);
|
| - return tile;
|
| - }
|
| -};
|
| -
|
| -TEST_F(MostVisitedSitesTest, PersonalSites) {
|
| - std::vector<TitleURL> personal_sites{
|
| - TitleURL("Site 1", "https://www.site1.com/"),
|
| - TitleURL("Site 2", "https://www.site2.com/"),
|
| - TitleURL("Site 3", "https://www.site3.com/"),
|
| - TitleURL("Site 4", "https://www.site4.com/"),
|
| +//
|
| +// TODO(mastiz): Add tests for the functionality listed above.
|
| +TEST(MostVisitedSitesTest, ShouldMergeTilesWithPersonalOnly) {
|
| + std::vector<NTPTile> personal_tiles{
|
| + MakeTile("Site 1", "https://www.site1.com/", NTPTileSource::TOP_SITES),
|
| + MakeTile("Site 2", "https://www.site2.com/", NTPTileSource::TOP_SITES),
|
| + MakeTile("Site 3", "https://www.site3.com/", NTPTileSource::TOP_SITES),
|
| + MakeTile("Site 4", "https://www.site4.com/", NTPTileSource::TOP_SITES),
|
| };
|
| // Without any popular tiles, the result after merge should be the personal
|
| // tiles.
|
| - std::vector<bool> expected_sites_source(kNumSites, true /*personal source*/);
|
| - Check(std::vector<TitleURL>(), std::vector<TitleURL>(), personal_sites,
|
| - expected_sites_source, personal_sites);
|
| + EXPECT_THAT(MostVisitedSites::MergeTiles(std::move(personal_tiles),
|
| + /*whitelist_tiles=*/NTPTilesVector(),
|
| + /*popular_tiles=*/NTPTilesVector()),
|
| + ElementsAre(MatchesTile("Site 1", "https://www.site1.com/",
|
| + NTPTileSource::TOP_SITES),
|
| + MatchesTile("Site 2", "https://www.site2.com/",
|
| + NTPTileSource::TOP_SITES),
|
| + MatchesTile("Site 3", "https://www.site3.com/",
|
| + NTPTileSource::TOP_SITES),
|
| + MatchesTile("Site 4", "https://www.site4.com/",
|
| + NTPTileSource::TOP_SITES)));
|
| }
|
|
|
| -TEST_F(MostVisitedSitesTest, PopularSites) {
|
| - std::vector<TitleURL> popular_sites{
|
| - TitleURL("Site 1", "https://www.site1.com/"),
|
| - TitleURL("Site 2", "https://www.site2.com/"),
|
| - TitleURL("Site 3", "https://www.site3.com/"),
|
| - TitleURL("Site 4", "https://www.site4.com/"),
|
| +TEST(MostVisitedSitesTest, ShouldMergeTilesWithPopularOnly) {
|
| + std::vector<NTPTile> popular_tiles{
|
| + MakeTile("Site 1", "https://www.site1.com/", NTPTileSource::POPULAR),
|
| + MakeTile("Site 2", "https://www.site2.com/", NTPTileSource::POPULAR),
|
| + MakeTile("Site 3", "https://www.site3.com/", NTPTileSource::POPULAR),
|
| + MakeTile("Site 4", "https://www.site4.com/", NTPTileSource::POPULAR),
|
| };
|
| // Without any personal tiles, the result after merge should be the popular
|
| // tiles.
|
| - std::vector<bool> expected_sites_source(kNumSites, false /*popular source*/);
|
| - Check(popular_sites, std::vector<TitleURL>(), std::vector<TitleURL>(),
|
| - expected_sites_source, popular_sites);
|
| + EXPECT_THAT(
|
| + MostVisitedSites::MergeTiles(/*personal_tiles=*/NTPTilesVector(),
|
| + /*whitelist_tiles=*/NTPTilesVector(),
|
| + /*popular_tiles=*/std::move(popular_tiles)),
|
| + ElementsAre(MatchesTile("Site 1", "https://www.site1.com/",
|
| + NTPTileSource::POPULAR),
|
| + MatchesTile("Site 2", "https://www.site2.com/",
|
| + NTPTileSource::POPULAR),
|
| + MatchesTile("Site 3", "https://www.site3.com/",
|
| + NTPTileSource::POPULAR),
|
| + MatchesTile("Site 4", "https://www.site4.com/",
|
| + NTPTileSource::POPULAR)));
|
| }
|
|
|
| -TEST_F(MostVisitedSitesTest, PersonalPrecedePopularSites) {
|
| - std::vector<TitleURL> popular_sites{
|
| - TitleURL("Site 1", "https://www.site1.com/"),
|
| - TitleURL("Site 2", "https://www.site2.com/"),
|
| +TEST(MostVisitedSitesTest, ShouldMergeTilesFavoringPersonalOverPopular) {
|
| + std::vector<NTPTile> popular_tiles{
|
| + MakeTile("Site 1", "https://www.site1.com/", NTPTileSource::POPULAR),
|
| + MakeTile("Site 2", "https://www.site2.com/", NTPTileSource::POPULAR),
|
| };
|
| - std::vector<TitleURL> personal_sites{
|
| - TitleURL("Site 3", "https://www.site3.com/"),
|
| - TitleURL("Site 4", "https://www.site4.com/"),
|
| + std::vector<NTPTile> personal_tiles{
|
| + MakeTile("Site 3", "https://www.site3.com/", NTPTileSource::TOP_SITES),
|
| + MakeTile("Site 4", "https://www.site4.com/", NTPTileSource::TOP_SITES),
|
| };
|
| - // Personal tiles should precede popular tiles.
|
| - std::vector<TitleURL> expected_sites{
|
| - TitleURL("Site 3", "https://www.site3.com/"),
|
| - TitleURL("Site 4", "https://www.site4.com/"),
|
| - TitleURL("Site 1", "https://www.site1.com/"),
|
| - TitleURL("Site 2", "https://www.site2.com/"),
|
| - };
|
| - std::vector<bool> expected_sites_source{true, true, false, false};
|
| - Check(popular_sites, std::vector<TitleURL>(), personal_sites,
|
| - expected_sites_source, expected_sites);
|
| + EXPECT_THAT(
|
| + MostVisitedSites::MergeTiles(std::move(personal_tiles),
|
| + /*whitelist_tiles=*/NTPTilesVector(),
|
| + /*popular_tiles=*/std::move(popular_tiles)),
|
| + ElementsAre(MatchesTile("Site 3", "https://www.site3.com/",
|
| + NTPTileSource::TOP_SITES),
|
| + MatchesTile("Site 4", "https://www.site4.com/",
|
| + NTPTileSource::TOP_SITES),
|
| + MatchesTile("Site 1", "https://www.site1.com/",
|
| + NTPTileSource::POPULAR),
|
| + MatchesTile("Site 2", "https://www.site2.com/",
|
| + NTPTileSource::POPULAR)));
|
| }
|
|
|
| +} // namespace
|
| } // namespace ntp_tiles
|
|
|