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

Side by Side Diff: components/ntp_snippets/remote/ntp_snippets_fetcher_unittest.cc

Issue 2387293009: Removes a data-dependent DCHECK(). (Closed)
Patch Set: merged to head Created 4 years, 2 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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_snippets/remote/ntp_snippets_fetcher.h" 5 #include "components/ntp_snippets/remote/ntp_snippets_fetcher.h"
6 6
7 #include <map> 7 #include <map>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/json/json_reader.h" 10 #include "base/json/json_reader.h"
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 56
57 ACTION_P(MovePointeeTo, ptr) { 57 ACTION_P(MovePointeeTo, ptr) {
58 *ptr = std::move(*arg0); 58 *ptr = std::move(*arg0);
59 } 59 }
60 60
61 MATCHER(HasValue, "") { 61 MATCHER(HasValue, "") {
62 return static_cast<bool>(*arg); 62 return static_cast<bool>(*arg);
63 } 63 }
64 64
65 MATCHER(IsEmptyArticleList, "is an empty list of articles") { 65 MATCHER(IsEmptyArticleList, "is an empty list of articles") {
66 NTPSnippetsFetcher::OptionalSnippets& snippets = *arg; 66 NTPSnippetsFetcher::OptionalFetchedCategories& fetched_categories = *arg;
67 return snippets && snippets->size() == 1 && 67 return fetched_categories && fetched_categories->size() == 1 &&
68 snippets->begin()->snippets.empty(); 68 fetched_categories->begin()->snippets.empty();
69 } 69 }
70 70
71 MATCHER_P(IsSingleArticle, url, "is a list with the single article %(url)s") { 71 MATCHER_P(IsSingleArticle, url, "is a list with the single article %(url)s") {
72 NTPSnippetsFetcher::OptionalSnippets& snippets = *arg; 72 NTPSnippetsFetcher::OptionalFetchedCategories& fetched_categories = *arg;
73 return snippets && snippets->size() == 1 && 73 return fetched_categories && fetched_categories->size() == 1 &&
74 snippets->begin()->snippets.size() == 1 && 74 fetched_categories->begin()->snippets.size() == 1 &&
75 snippets->begin()->snippets[0]->best_source().url.spec() == url; 75 fetched_categories->begin()->snippets[0]->best_source().url.spec() ==
76 url;
76 } 77 }
77 78
78 MATCHER_P(EqualsJSON, json, "equals JSON") { 79 MATCHER_P(EqualsJSON, json, "equals JSON") {
79 std::unique_ptr<base::Value> expected = base::JSONReader::Read(json); 80 std::unique_ptr<base::Value> expected = base::JSONReader::Read(json);
80 if (!expected) { 81 if (!expected) {
81 *result_listener << "INTERNAL ERROR: couldn't parse expected JSON"; 82 *result_listener << "INTERNAL ERROR: couldn't parse expected JSON";
82 return false; 83 return false;
83 } 84 }
84 85
85 std::string err_msg; 86 std::string err_msg;
86 int err_line, err_col; 87 int err_line, err_col;
87 std::unique_ptr<base::Value> actual = base::JSONReader::ReadAndReturnError( 88 std::unique_ptr<base::Value> actual = base::JSONReader::ReadAndReturnError(
88 arg, base::JSON_PARSE_RFC, nullptr, &err_msg, &err_line, &err_col); 89 arg, base::JSON_PARSE_RFC, nullptr, &err_msg, &err_line, &err_col);
89 if (!actual) { 90 if (!actual) {
90 *result_listener << "input:" << err_line << ":" << err_col << ": " 91 *result_listener << "input:" << err_line << ":" << err_col << ": "
91 << "parse error: " << err_msg; 92 << "parse error: " << err_msg;
92 return false; 93 return false;
93 } 94 }
94 return base::Value::Equals(actual.get(), expected.get()); 95 return base::Value::Equals(actual.get(), expected.get());
95 } 96 }
96 97
97 class MockSnippetsAvailableCallback { 98 class MockSnippetsAvailableCallback {
98 public: 99 public:
99 // Workaround for gMock's lack of support for movable arguments. 100 // Workaround for gMock's lack of support for movable arguments.
100 void WrappedRun(NTPSnippetsFetcher::OptionalSnippets snippets) { 101 void WrappedRun(
101 Run(&snippets); 102 NTPSnippetsFetcher::OptionalFetchedCategories fetched_categories) {
103 Run(&fetched_categories);
102 } 104 }
103 105
104 MOCK_METHOD1(Run, void(NTPSnippetsFetcher::OptionalSnippets* snippets)); 106 MOCK_METHOD1(
107 Run,
108 void(NTPSnippetsFetcher::OptionalFetchedCategories* fetched_categories));
105 }; 109 };
106 110
107 // Factory for FakeURLFetcher objects that always generate errors. 111 // Factory for FakeURLFetcher objects that always generate errors.
108 class FailingFakeURLFetcherFactory : public net::URLFetcherFactory { 112 class FailingFakeURLFetcherFactory : public net::URLFetcherFactory {
109 public: 113 public:
110 std::unique_ptr<net::URLFetcher> CreateURLFetcher( 114 std::unique_ptr<net::URLFetcher> CreateURLFetcher(
111 int id, const GURL& url, net::URLFetcher::RequestType request_type, 115 int id, const GURL& url, net::URLFetcher::RequestType request_type,
112 net::URLFetcherDelegate* d) override { 116 net::URLFetcherDelegate* d) override {
113 return base::MakeUnique<net::FakeURLFetcher>( 117 return base::MakeUnique<net::FakeURLFetcher>(
114 url, d, /*response_data=*/std::string(), net::HTTP_NOT_FOUND, 118 url, d, /*response_data=*/std::string(), net::HTTP_NOT_FOUND,
(...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after
521 " \"creationTime\" : \"2016-06-30T11:01:37.000Z\"," 525 " \"creationTime\" : \"2016-06-30T11:01:37.000Z\","
522 " \"expirationTime\" : \"2016-07-01T11:01:37.000Z\"," 526 " \"expirationTime\" : \"2016-07-01T11:01:37.000Z\","
523 " \"attribution\" : \"Foo News\"," 527 " \"attribution\" : \"Foo News\","
524 " \"imageUrl\" : \"http://localhost/foo2.jpg\"," 528 " \"imageUrl\" : \"http://localhost/foo2.jpg\","
525 " \"ampUrl\" : \"http://localhost/amp\"," 529 " \"ampUrl\" : \"http://localhost/amp\","
526 " \"faviconUrl\" : \"http://localhost/favicon.ico\" " 530 " \"faviconUrl\" : \"http://localhost/favicon.ico\" "
527 " }]" 531 " }]"
528 "}]}"; 532 "}]}";
529 SetFakeResponse(/*response_data=*/kJsonStr, net::HTTP_OK, 533 SetFakeResponse(/*response_data=*/kJsonStr, net::HTTP_OK,
530 net::URLRequestStatus::SUCCESS); 534 net::URLRequestStatus::SUCCESS);
531 NTPSnippetsFetcher::OptionalSnippets snippets; 535 NTPSnippetsFetcher::OptionalFetchedCategories fetched_categories;
532 EXPECT_CALL(mock_callback(), Run(_)) 536 EXPECT_CALL(mock_callback(), Run(_))
533 .WillOnce(WithArg<0>(MovePointeeTo(&snippets))); 537 .WillOnce(WithArg<0>(MovePointeeTo(&fetched_categories)));
534 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 538 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(),
535 test_excluded(), 539 test_excluded(),
536 /*count=*/1, 540 /*count=*/1,
537 /*interactive_request=*/true); 541 /*interactive_request=*/true);
538 FastForwardUntilNoTasksRemain(); 542 FastForwardUntilNoTasksRemain();
539 543
540 ASSERT_TRUE(snippets); 544 ASSERT_TRUE(fetched_categories);
541 ASSERT_THAT(snippets->size(), Eq(2u)); 545 ASSERT_THAT(fetched_categories->size(), Eq(2u));
542 for (const auto& category : *snippets) { 546 for (const auto& category : *fetched_categories) {
543 const auto& articles = category.snippets; 547 const auto& articles = category.snippets;
544 switch (category.category.id()) { 548 switch (category.category.id()) {
545 case static_cast<int>(KnownCategories::ARTICLES): 549 case static_cast<int>(KnownCategories::ARTICLES):
546 ASSERT_THAT(articles.size(), Eq(1u)); 550 ASSERT_THAT(articles.size(), Eq(1u));
547 EXPECT_THAT(articles[0]->best_source().url.spec(), 551 EXPECT_THAT(articles[0]->best_source().url.spec(),
548 Eq("http://localhost/foobar")); 552 Eq("http://localhost/foobar"));
549 break; 553 break;
550 case static_cast<int>(KnownCategories::ARTICLES) + 1: 554 case static_cast<int>(KnownCategories::ARTICLES) + 1:
551 ASSERT_THAT(articles.size(), Eq(1u)); 555 ASSERT_THAT(articles.size(), Eq(1u));
552 EXPECT_THAT(articles[0]->best_source().url.spec(), 556 EXPECT_THAT(articles[0]->best_source().url.spec(),
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
758 EXPECT_THAT(histogram_tester().GetAllSamples( 762 EXPECT_THAT(histogram_tester().GetAllSamples(
759 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"), 763 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"),
760 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1))); 764 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1)));
761 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"), 765 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"),
762 ElementsAre(base::Bucket(/*min=*/kTestJsonParsingLatencyMs, 766 ElementsAre(base::Bucket(/*min=*/kTestJsonParsingLatencyMs,
763 /*count=*/1))); 767 /*count=*/1)));
764 } 768 }
765 769
766 ::std::ostream& operator<<( 770 ::std::ostream& operator<<(
767 ::std::ostream& os, 771 ::std::ostream& os,
768 const NTPSnippetsFetcher::OptionalSnippets& snippets) { 772 const NTPSnippetsFetcher::OptionalFetchedCategories& fetched_categories) {
769 if (snippets) { 773 if (fetched_categories) {
770 // Matchers above aren't any more precise than this, so this is sufficient 774 // Matchers above aren't any more precise than this, so this is sufficient
771 // for test-failure diagnostics. 775 // for test-failure diagnostics.
772 return os << "list with " << snippets->size() << " elements"; 776 return os << "list with " << fetched_categories->size() << " elements";
773 } 777 }
774 return os << "null"; 778 return os << "null";
775 } 779 }
776 780
777 } // namespace ntp_snippets 781 } // namespace ntp_snippets
OLDNEW
« no previous file with comments | « components/ntp_snippets/remote/ntp_snippets_fetcher.cc ('k') | components/ntp_snippets/remote/ntp_snippets_service.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698