OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 <map> | 5 #include <map> |
6 #include <string> | 6 #include <string> |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
(...skipping 10 matching lines...) Expand all Loading... | |
21 #include "testing/gmock/include/gmock/gmock.h" | 21 #include "testing/gmock/include/gmock/gmock.h" |
22 #include "testing/gtest/include/gtest/gtest.h" | 22 #include "testing/gtest/include/gtest/gtest.h" |
23 | 23 |
24 using std::vector; | 24 using std::vector; |
25 using std::string; | 25 using std::string; |
26 using::testing::Invoke; | 26 using::testing::Invoke; |
27 using::testing::Return; | 27 using::testing::Return; |
28 using::testing::_; | 28 using::testing::_; |
29 | 29 |
30 namespace { | 30 namespace { |
31 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.
| |
32 | |
31 const char kTitle[] = "Title"; | 33 const char kTitle[] = "Title"; |
32 const char kContent[] = "Content"; | 34 const char kContent[] = "Content"; |
33 const char kURL[] = "http://a.com/"; | 35 const char kURL[] = "http://a.com/"; |
34 const size_t kTotalImages = 2; | 36 const size_t kTotalImages = 2; |
35 const char* kImageURLs[kTotalImages] = {"http://a.com/img1.jpg", | 37 const char* kImageURLs[kTotalImages] = {"http://a.com/img1.jpg", |
36 "http://a.com/img2.jpg"}; | 38 "http://a.com/img2.jpg"}; |
37 const char* kImageData[kTotalImages] = {"abcde", "12345"}; | 39 const char* kImageData[kTotalImages] = {"abcde", "12345"}; |
38 | 40 |
39 const string GetImageName(int page_num, int image_num) { | 41 const string GetImageName(int page_num, int image_num) { |
40 return base::IntToString(page_num) + "_" + base::IntToString(image_num); | 42 return base::IntToString(page_num) + "_" + base::IntToString(image_num); |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
110 MOCK_CONST_METHOD1( | 112 MOCK_CONST_METHOD1( |
111 CreateDistillerPageMock, | 113 CreateDistillerPageMock, |
112 DistillerPage*(DistillerPage::Delegate* delegate)); | 114 DistillerPage*(DistillerPage::Delegate* delegate)); |
113 | 115 |
114 virtual scoped_ptr<DistillerPage> CreateDistillerPage( | 116 virtual scoped_ptr<DistillerPage> CreateDistillerPage( |
115 DistillerPage::Delegate* delegate) const OVERRIDE { | 117 DistillerPage::Delegate* delegate) const OVERRIDE { |
116 return scoped_ptr<DistillerPage>(CreateDistillerPageMock(delegate)); | 118 return scoped_ptr<DistillerPage>(CreateDistillerPageMock(delegate)); |
117 } | 119 } |
118 }; | 120 }; |
119 | 121 |
120 | |
121 class DistillerTest : public testing::Test { | 122 class DistillerTest : public testing::Test { |
122 public: | 123 public: |
123 virtual ~DistillerTest() {} | 124 virtual ~DistillerTest() {} |
124 void OnDistillPageDone(scoped_ptr<DistilledArticleProto> proto) { | 125 void OnDistillPageDone(scoped_ptr<DistilledArticleProto> proto) { |
125 article_proto_ = proto.Pass(); | 126 article_proto_ = proto.Pass(); |
126 } | 127 } |
127 | 128 |
128 protected: | 129 protected: |
129 scoped_ptr<DistillerImpl> distiller_; | 130 scoped_ptr<DistillerImpl> distiller_; |
130 scoped_ptr<DistilledArticleProto> article_proto_; | 131 scoped_ptr<DistilledArticleProto> article_proto_; |
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
283 distiller_.reset(new DistillerImpl(page_factory_, url_fetcher_factory_)); | 284 distiller_.reset(new DistillerImpl(page_factory_, url_fetcher_factory_)); |
284 distiller_->Init(); | 285 distiller_->Init(); |
285 distiller_->DistillPage( | 286 distiller_->DistillPage( |
286 GURL(kURL), | 287 GURL(kURL), |
287 base::Bind(&DistillerTest::OnDistillPageDone, base::Unretained(this))); | 288 base::Bind(&DistillerTest::OnDistillPageDone, base::Unretained(this))); |
288 base::MessageLoop::current()->RunUntilIdle(); | 289 base::MessageLoop::current()->RunUntilIdle(); |
289 EXPECT_EQ(kTitle, article_proto_->title()); | 290 EXPECT_EQ(kTitle, article_proto_->title()); |
290 EXPECT_EQ(article_proto_->pages_size(), 1); | 291 EXPECT_EQ(article_proto_->pages_size(), 1); |
291 } | 292 } |
292 | 293 |
294 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.
| |
295 base::MessageLoopForUI loop; | |
296 string page_urls[kMaxPagesInArticle]; | |
297 scoped_ptr<base::ListValue> list[kMaxPagesInArticle]; | |
298 | |
299 // Note: Next page url of the last page of article is set. So distiller will | |
300 // try to do kMaxPagesInArticle + 1 calls if the max article limit does not | |
301 // work. | |
302 string url_prefix = "http://a.com/"; | |
303 for (size_t page_num = 0; page_num < kMaxPagesInArticle; ++page_num) { | |
304 page_urls[page_num] = url_prefix + base::IntToString(page_num + 1); | |
305 string content = "Content for page:" + base::IntToString(page_num); | |
306 string next_page_url = url_prefix + base::IntToString(page_num + 2); | |
307 list[page_num] = CreateDistilledValueReturnedFromJS( | |
308 kTitle, content, vector<int>(), next_page_url); | |
309 } | |
310 | |
311 EXPECT_CALL(page_factory_, CreateDistillerPageMock(_)) | |
312 .WillOnce(CreateMockDistillerPages( | |
313 list, page_urls, static_cast<int>(kMaxPagesInArticle))); | |
314 | |
315 distiller_.reset(new DistillerImpl(page_factory_, url_fetcher_factory_)); | |
316 | |
317 distiller_->SetMaxNumPagesInArticle(kMaxPagesInArticle); | |
318 | |
319 distiller_->Init(); | |
320 distiller_->DistillPage( | |
321 GURL(page_urls[0]), | |
322 base::Bind(&DistillerTest::OnDistillPageDone, base::Unretained(this))); | |
323 base::MessageLoop::current()->RunUntilIdle(); | |
324 EXPECT_EQ(kTitle, article_proto_->title()); | |
325 EXPECT_EQ(kMaxPagesInArticle, | |
326 static_cast<size_t>(article_proto_->pages_size())); | |
327 } | |
328 | |
329 TEST_F(DistillerTest, SinglePageDistillationFailure) { | |
330 base::MessageLoopForUI loop; | |
331 // To simulate failure return a null value. | |
332 scoped_ptr<base::Value> nullValue(base::Value::CreateNullValue()); | |
333 EXPECT_CALL(page_factory_, CreateDistillerPageMock(_)) | |
334 .WillOnce(CreateMockDistillerPage(nullValue.get(), GURL(kURL))); | |
335 distiller_.reset(new DistillerImpl(page_factory_, url_fetcher_factory_)); | |
336 distiller_->Init(); | |
337 distiller_->DistillPage( | |
338 GURL(kURL), | |
339 base::Bind(&DistillerTest::OnDistillPageDone, base::Unretained(this))); | |
340 base::MessageLoop::current()->RunUntilIdle(); | |
341 EXPECT_EQ("", article_proto_->title()); | |
342 EXPECT_EQ(0, article_proto_->pages_size()); | |
343 } | |
344 | |
345 TEST_F(DistillerTest, MultiplePagesDistillationFailure) { | |
346 base::MessageLoopForUI loop; | |
347 const int kNumPages = 8; | |
348 string content[kNumPages]; | |
349 string page_urls[kNumPages]; | |
350 scoped_ptr<base::Value> distilled_values[kNumPages]; | |
351 // The page number of the failed page. | |
352 int failed_page_num = 3; | |
353 string url_prefix = "http://a.com/"; | |
354 for (int page_num = 0; page_num < kNumPages; ++page_num) { | |
355 page_urls[page_num] = url_prefix + base::IntToString(page_num); | |
356 content[page_num] = "Content for page:" + base::IntToString(page_num); | |
357 string next_page_url = url_prefix + base::IntToString(page_num + 1); | |
358 if (page_num != failed_page_num) { | |
359 distilled_values[page_num] = CreateDistilledValueReturnedFromJS( | |
360 kTitle, content[page_num], vector<int>(), next_page_url); | |
361 } else { | |
362 distilled_values[page_num].reset(base::Value::CreateNullValue()); | |
363 } | |
364 } | |
365 | |
366 // Expect only calls till the failed page number. | |
367 EXPECT_CALL(page_factory_, CreateDistillerPageMock(_)) | |
368 .WillOnce(CreateMockDistillerPages( | |
369 distilled_values, page_urls, failed_page_num + 1)); | |
370 | |
371 distiller_.reset(new DistillerImpl(page_factory_, url_fetcher_factory_)); | |
372 distiller_->Init(); | |
373 distiller_->DistillPage( | |
374 GURL(page_urls[0]), | |
375 base::Bind(&DistillerTest::OnDistillPageDone, base::Unretained(this))); | |
376 base::MessageLoop::current()->RunUntilIdle(); | |
377 EXPECT_EQ(kTitle, article_proto_->title()); | |
378 EXPECT_EQ(article_proto_->pages_size(), failed_page_num); | |
379 for (int page_num = 0; page_num < failed_page_num; ++page_num) { | |
380 const DistilledPageProto& page = article_proto_->pages(page_num); | |
381 EXPECT_EQ(content[page_num], page.html()); | |
382 EXPECT_EQ(page_urls[page_num], page.url()); | |
383 } | |
384 } | |
385 | |
293 } // namespace dom_distiller | 386 } // namespace dom_distiller |
OLD | NEW |