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

Unified Diff: components/dom_distiller/core/distiller_unittest.cc

Issue 130543003: Store page no for distilled pages undergoing distillation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address comments. Created 6 years, 10 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: components/dom_distiller/core/distiller_unittest.cc
diff --git a/components/dom_distiller/core/distiller_unittest.cc b/components/dom_distiller/core/distiller_unittest.cc
index 3865aefa4d60fbcec500aa27e4df8a1fdf89fb8f..16b8d23a31d34bb1f8404dc681bdb7b730e96c71 100644
--- a/components/dom_distiller/core/distiller_unittest.cc
+++ b/components/dom_distiller/core/distiller_unittest.cc
@@ -28,6 +28,8 @@ using::testing::Return;
using::testing::_;
namespace {
+const size_t kMaxPagesInArticle = 10;
cjhopman 2014/02/15 02:44:15 nit: this can just be moved into the CheckMaxPageL
shashi 2014/02/15 03:15:36 Done.
+
const char kTitle[] = "Title";
const char kContent[] = "Content";
const char kURL[] = "http://a.com/";
@@ -117,7 +119,6 @@ class MockDistillerPageFactory : public DistillerPageFactory {
}
};
-
class DistillerTest : public testing::Test {
public:
virtual ~DistillerTest() {}
@@ -290,4 +291,96 @@ TEST_F(DistillerTest, DistillLinkLoop) {
EXPECT_EQ(article_proto_->pages_size(), 1);
}
+TEST_F(DistillerTest, CheckMaxPageLimit) {
cjhopman 2014/02/15 02:44:15 Nit: maybe test that an article that is exactly th
shashi 2014/02/15 03:15:36 Done.
+ base::MessageLoopForUI loop;
+ string page_urls[kMaxPagesInArticle];
+ scoped_ptr<base::ListValue> list[kMaxPagesInArticle];
+
+ // Note: Next page url of the last page of article is set. So distiller will
+ // try to do kMaxPagesInArticle + 1 calls if the max article limit does not
+ // work.
+ string url_prefix = "http://a.com/";
+ for (size_t page_num = 0; page_num < kMaxPagesInArticle; ++page_num) {
+ page_urls[page_num] = url_prefix + base::IntToString(page_num + 1);
+ string content = "Content for page:" + base::IntToString(page_num);
+ string next_page_url = url_prefix + base::IntToString(page_num + 2);
+ list[page_num] = CreateDistilledValueReturnedFromJS(
+ kTitle, content, vector<int>(), next_page_url);
+ }
+
+ EXPECT_CALL(page_factory_, CreateDistillerPageMock(_))
+ .WillOnce(CreateMockDistillerPages(
+ list, page_urls, static_cast<int>(kMaxPagesInArticle)));
+
+ distiller_.reset(new DistillerImpl(page_factory_, url_fetcher_factory_));
+
+ distiller_->SetMaxNumPagesInArticle(kMaxPagesInArticle);
+
+ distiller_->Init();
+ distiller_->DistillPage(
+ GURL(page_urls[0]),
+ base::Bind(&DistillerTest::OnDistillPageDone, base::Unretained(this)));
+ base::MessageLoop::current()->RunUntilIdle();
+ EXPECT_EQ(kTitle, article_proto_->title());
+ EXPECT_EQ(kMaxPagesInArticle,
+ static_cast<size_t>(article_proto_->pages_size()));
+}
+
+TEST_F(DistillerTest, SinglePageDistillationFailure) {
+ base::MessageLoopForUI loop;
+ // To simulate failure return a null value.
+ scoped_ptr<base::Value> nullValue(base::Value::CreateNullValue());
+ EXPECT_CALL(page_factory_, CreateDistillerPageMock(_))
+ .WillOnce(CreateMockDistillerPage(nullValue.get(), GURL(kURL)));
+ distiller_.reset(new DistillerImpl(page_factory_, url_fetcher_factory_));
+ distiller_->Init();
+ distiller_->DistillPage(
+ GURL(kURL),
+ base::Bind(&DistillerTest::OnDistillPageDone, base::Unretained(this)));
+ base::MessageLoop::current()->RunUntilIdle();
+ EXPECT_EQ("", article_proto_->title());
+ EXPECT_EQ(0, article_proto_->pages_size());
+}
+
+TEST_F(DistillerTest, MultiplePagesDistillationFailure) {
+ base::MessageLoopForUI loop;
+ const int kNumPages = 8;
+ string content[kNumPages];
+ string page_urls[kNumPages];
+ scoped_ptr<base::Value> distilled_values[kNumPages];
+ // The page number of the failed page.
+ int failed_page_num = 3;
+ string url_prefix = "http://a.com/";
+ for (int page_num = 0; page_num < kNumPages; ++page_num) {
+ page_urls[page_num] = url_prefix + base::IntToString(page_num);
+ content[page_num] = "Content for page:" + base::IntToString(page_num);
+ string next_page_url = url_prefix + base::IntToString(page_num + 1);
+ if (page_num != failed_page_num) {
+ distilled_values[page_num] = CreateDistilledValueReturnedFromJS(
+ kTitle, content[page_num], vector<int>(), next_page_url);
+ } else {
+ distilled_values[page_num].reset(base::Value::CreateNullValue());
+ }
+ }
+
+ // Expect only calls till the failed page number.
+ EXPECT_CALL(page_factory_, CreateDistillerPageMock(_))
+ .WillOnce(CreateMockDistillerPages(
+ distilled_values, page_urls, failed_page_num + 1));
+
+ distiller_.reset(new DistillerImpl(page_factory_, url_fetcher_factory_));
+ distiller_->Init();
+ distiller_->DistillPage(
+ GURL(page_urls[0]),
+ base::Bind(&DistillerTest::OnDistillPageDone, base::Unretained(this)));
+ base::MessageLoop::current()->RunUntilIdle();
+ EXPECT_EQ(kTitle, article_proto_->title());
+ EXPECT_EQ(article_proto_->pages_size(), failed_page_num);
+ for (int page_num = 0; page_num < failed_page_num; ++page_num) {
+ const DistilledPageProto& page = article_proto_->pages(page_num);
+ EXPECT_EQ(content[page_num], page.html());
+ EXPECT_EQ(page_urls[page_num], page.url());
+ }
+}
+
} // namespace dom_distiller
« components/dom_distiller/core/distiller.cc ('K') | « components/dom_distiller/core/distiller.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698