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

Side by Side Diff: components/ntp_tiles/most_visited_sites_unittest.cc

Issue 2567333003: ntp_tiles: Refactor existing MostVisitedSites tests (Closed)
Patch Set: Created 4 years 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/ntp_tiles/most_visited_sites.h" 5 #include "components/ntp_tiles/most_visited_sites.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory> 9 #include <memory>
10 #include <ostream>
10 #include <vector> 11 #include <vector>
11 12
12 #include "base/macros.h" 13 #include "base/macros.h"
13 #include "base/memory/ptr_util.h" 14 #include "base/memory/ptr_util.h"
14 #include "base/strings/utf_string_conversions.h" 15 #include "base/strings/utf_string_conversions.h"
16 #include "testing/gmock/include/gmock/gmock.h"
15 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
16 18
17 namespace ntp_tiles { 19 namespace ntp_tiles {
18 20
21 // Defined for googletest. Must be defined in the same namespace.
Marc Treib 2016/12/13 16:44:15 I think it's also possible to define an "operator<
mastiz 2016/12/14 08:54:27 I *think*, for test-oriented printing, which is th
Marc Treib 2016/12/14 09:27:34 I guess it's just me being unfamiliar with the tes
22 void PrintTo(const NTPTile& tile, std::ostream* os) {
23 *os << "{\"" << tile.title << "\", \"" << tile.url << "\", "
24 << static_cast<int>(tile.source) << "}";
25 }
26
19 namespace { 27 namespace {
20 28
21 struct TitleURL { 29 using testing::AllOf;
22 TitleURL(const std::string& title, const std::string& url) 30 using testing::ElementsAre;
23 : title(base::UTF8ToUTF16(title)), url(url) {}
24 TitleURL(const base::string16& title, const std::string& url)
25 : title(title), url(url) {}
26 31
27 base::string16 title; 32 MATCHER_P(HasSource,
28 std::string url; 33 source,
34 std::string("has source ") +
35 testing::PrintToString(static_cast<int>(source))) {
36 return arg.source == source;
37 }
29 38
30 bool operator==(const TitleURL& other) const { 39 MATCHER_P(HasTitle, title, "") {
31 return title == other.title && url == other.url; 40 return arg.title == base::ASCIIToUTF16(title);
32 } 41 }
33 };
34 42
35 static const size_t kNumSites = 4; 43 MATCHER_P(HasUrl, url, "") {
44 return arg.url == GURL(url);
45 }
36 46
37 } // namespace 47 NTPTile MakeTile(const std::string& title,
48 const std::string& url,
49 NTPTileSource source) {
50 NTPTile tile;
51 tile.title = base::ASCIIToUTF16(title);
52 tile.url = GURL(url);
53 tile.source = source;
54 return tile;
55 }
38 56
39 // This a test for MostVisitedSites::MergeTiles(...) method, and thus has the 57 // This a test for MostVisitedSites::MergeTiles(...) method, and thus has the
40 // same scope as the method itself. This tests merging popular sites with 58 // same scope as the method itself. This tests merging popular sites with
41 // personal tiles. 59 // personal tiles.
42 // More important things out of the scope of testing presently: 60 // More important things out of the scope of testing presently:
43 // - Removing blacklisted tiles. 61 // - Removing blacklisted tiles.
44 // - Correct host extraction from the URL. 62 // - Correct host extraction from the URL.
45 // - Ensuring personal tiles are not duplicated in popular tiles. 63 // - Ensuring personal tiles are not duplicated in popular tiles.
46 class MostVisitedSitesTest : public testing::Test { 64 //
47 protected: 65 // TODO(mastiz): Add tests for the functionality listed above.
48 void Check(const std::vector<TitleURL>& popular_sites, 66 TEST(MostVisitedSitesTest, ShouldMergeTilesWithPersonalOnly) {
49 const std::vector<TitleURL>& whitelist_entry_points, 67 std::vector<NTPTile> personal_tiles{
50 const std::vector<TitleURL>& personal_sites, 68 MakeTile("Site 1", "https://www.site1.com/", NTPTileSource::TOP_SITES),
51 const std::vector<bool>& expected_sites_is_personal, 69 MakeTile("Site 2", "https://www.site2.com/", NTPTileSource::TOP_SITES),
52 const std::vector<TitleURL>& expected_sites) { 70 MakeTile("Site 3", "https://www.site3.com/", NTPTileSource::TOP_SITES),
53 NTPTilesVector personal_tiles; 71 MakeTile("Site 4", "https://www.site4.com/", NTPTileSource::TOP_SITES),
54 for (const TitleURL& site : personal_sites)
55 personal_tiles.push_back(MakeTileFrom(site, true, false));
56 NTPTilesVector whitelist_tiles;
57 for (const TitleURL& site : whitelist_entry_points)
58 whitelist_tiles.push_back(MakeTileFrom(site, false, true));
59 NTPTilesVector popular_tiles;
60 for (const TitleURL& site : popular_sites)
61 popular_tiles.push_back(MakeTileFrom(site, false, false));
62 NTPTilesVector result_tiles = MostVisitedSites::MergeTiles(
63 std::move(personal_tiles), std::move(whitelist_tiles),
64 std::move(popular_tiles));
65 std::vector<TitleURL> result_sites;
66 std::vector<bool> result_is_personal;
67 result_sites.reserve(result_tiles.size());
68 result_is_personal.reserve(result_tiles.size());
69 for (const auto& tile : result_tiles) {
70 result_sites.push_back(TitleURL(tile.title, tile.url.spec()));
71 result_is_personal.push_back(tile.source != NTPTileSource::POPULAR);
72 }
73 EXPECT_EQ(expected_sites_is_personal, result_is_personal);
74 EXPECT_EQ(expected_sites, result_sites);
75 }
76 static NTPTile MakeTileFrom(const TitleURL& title_url,
77 bool is_personal,
78 bool whitelist) {
79 NTPTile tile;
80 tile.title = title_url.title;
81 tile.url = GURL(title_url.url);
82 tile.source = whitelist ? NTPTileSource::WHITELIST
83 : (is_personal ? NTPTileSource::TOP_SITES
84 : NTPTileSource::POPULAR);
85 return tile;
86 }
87 };
88
89 TEST_F(MostVisitedSitesTest, PersonalSites) {
90 std::vector<TitleURL> personal_sites{
91 TitleURL("Site 1", "https://www.site1.com/"),
92 TitleURL("Site 2", "https://www.site2.com/"),
93 TitleURL("Site 3", "https://www.site3.com/"),
94 TitleURL("Site 4", "https://www.site4.com/"),
95 }; 72 };
96 // Without any popular tiles, the result after merge should be the personal 73 // Without any popular tiles, the result after merge should be the personal
97 // tiles. 74 // tiles.
98 std::vector<bool> expected_sites_source(kNumSites, true /*personal source*/); 75 EXPECT_THAT(
99 Check(std::vector<TitleURL>(), std::vector<TitleURL>(), personal_sites, 76 MostVisitedSites::MergeTiles(std::move(personal_tiles),
100 expected_sites_source, personal_sites); 77 /*whitelist_tiles=*/{},
78 /*popular_tiles=*/{}),
79 ElementsAre(AllOf(HasSource(NTPTileSource::TOP_SITES), HasTitle("Site 1"),
80 HasUrl("https://www.site1.com/")),
Marc Treib 2016/12/13 16:44:15 Instead of checking three separate properties, cou
mastiz 2016/12/14 08:54:27 Done.
81 AllOf(HasSource(NTPTileSource::TOP_SITES), HasTitle("Site 2"),
82 HasUrl("https://www.site2.com/")),
83 AllOf(HasSource(NTPTileSource::TOP_SITES), HasTitle("Site 3"),
84 HasUrl("https://www.site3.com/")),
85 AllOf(HasSource(NTPTileSource::TOP_SITES), HasTitle("Site 4"),
86 HasUrl("https://www.site4.com/"))));
101 } 87 }
102 88
103 TEST_F(MostVisitedSitesTest, PopularSites) { 89 TEST(MostVisitedSitesTest, ShouldMergeTilesWithPopularOnly) {
104 std::vector<TitleURL> popular_sites{ 90 std::vector<NTPTile> popular_tiles{
105 TitleURL("Site 1", "https://www.site1.com/"), 91 MakeTile("Site 1", "https://www.site1.com/", NTPTileSource::POPULAR),
106 TitleURL("Site 2", "https://www.site2.com/"), 92 MakeTile("Site 2", "https://www.site2.com/", NTPTileSource::POPULAR),
107 TitleURL("Site 3", "https://www.site3.com/"), 93 MakeTile("Site 3", "https://www.site3.com/", NTPTileSource::POPULAR),
108 TitleURL("Site 4", "https://www.site4.com/"), 94 MakeTile("Site 4", "https://www.site4.com/", NTPTileSource::POPULAR),
109 }; 95 };
110 // Without any personal tiles, the result after merge should be the popular 96 // Without any personal tiles, the result after merge should be the popular
111 // tiles. 97 // tiles.
112 std::vector<bool> expected_sites_source(kNumSites, false /*popular source*/); 98 EXPECT_THAT(
113 Check(popular_sites, std::vector<TitleURL>(), std::vector<TitleURL>(), 99 MostVisitedSites::MergeTiles(/*personal_tiles=*/{},
114 expected_sites_source, popular_sites); 100 /*whitelist_tiles=*/{},
101 /*popular_tiles=*/std::move(popular_tiles)),
102 ElementsAre(AllOf(HasSource(NTPTileSource::POPULAR), HasTitle("Site 1"),
103 HasUrl("https://www.site1.com/")),
104 AllOf(HasSource(NTPTileSource::POPULAR), HasTitle("Site 2"),
105 HasUrl("https://www.site2.com/")),
106 AllOf(HasSource(NTPTileSource::POPULAR), HasTitle("Site 3"),
107 HasUrl("https://www.site3.com/")),
108 AllOf(HasSource(NTPTileSource::POPULAR), HasTitle("Site 4"),
109 HasUrl("https://www.site4.com/"))));
115 } 110 }
116 111
117 TEST_F(MostVisitedSitesTest, PersonalPrecedePopularSites) { 112 TEST(MostVisitedSitesTest, ShouldMergeTilesFavoringPersonalOverPopular) {
118 std::vector<TitleURL> popular_sites{ 113 std::vector<NTPTile> popular_tiles{
119 TitleURL("Site 1", "https://www.site1.com/"), 114 MakeTile("Site 1", "https://www.site1.com/", NTPTileSource::POPULAR),
120 TitleURL("Site 2", "https://www.site2.com/"), 115 MakeTile("Site 2", "https://www.site2.com/", NTPTileSource::POPULAR),
121 }; 116 };
122 std::vector<TitleURL> personal_sites{ 117 std::vector<NTPTile> personal_tiles{
123 TitleURL("Site 3", "https://www.site3.com/"), 118 MakeTile("Site 3", "https://www.site3.com/", NTPTileSource::TOP_SITES),
124 TitleURL("Site 4", "https://www.site4.com/"), 119 MakeTile("Site 4", "https://www.site4.com/", NTPTileSource::TOP_SITES),
125 }; 120 };
126 // Personal tiles should precede popular tiles. 121 EXPECT_THAT(
127 std::vector<TitleURL> expected_sites{ 122 MostVisitedSites::MergeTiles(std::move(personal_tiles),
128 TitleURL("Site 3", "https://www.site3.com/"), 123 /*whitelist_tiles=*/{},
129 TitleURL("Site 4", "https://www.site4.com/"), 124 /*popular_tiles=*/std::move(popular_tiles)),
130 TitleURL("Site 1", "https://www.site1.com/"), 125 ElementsAre(AllOf(HasSource(NTPTileSource::TOP_SITES), HasTitle("Site 3"),
131 TitleURL("Site 2", "https://www.site2.com/"), 126 HasUrl("https://www.site3.com/")),
132 }; 127 AllOf(HasSource(NTPTileSource::TOP_SITES), HasTitle("Site 4"),
133 std::vector<bool> expected_sites_source{true, true, false, false}; 128 HasUrl("https://www.site4.com/")),
134 Check(popular_sites, std::vector<TitleURL>(), personal_sites, 129 AllOf(HasSource(NTPTileSource::POPULAR), HasTitle("Site 1"),
135 expected_sites_source, expected_sites); 130 HasUrl("https://www.site1.com/")),
131 AllOf(HasSource(NTPTileSource::POPULAR), HasTitle("Site 2"),
132 HasUrl("https://www.site2.com/"))));
136 } 133 }
137 134
135 } // namespace
138 } // namespace ntp_tiles 136 } // namespace ntp_tiles
OLDNEW
« components/ntp_tiles/most_visited_sites.h ('K') | « components/ntp_tiles/most_visited_sites.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698