Chromium Code Reviews| Index: components/dom_distiller/core/task_tracker_unittest.cc |
| diff --git a/components/dom_distiller/core/task_tracker_unittest.cc b/components/dom_distiller/core/task_tracker_unittest.cc |
| index c6eef4be519782dfc74428bac361d5c1e2a83e75..87ef929d9661c52c5962f31c7bc21a15899b918b 100644 |
| --- a/components/dom_distiller/core/task_tracker_unittest.cc |
| +++ b/components/dom_distiller/core/task_tracker_unittest.cc |
| @@ -7,6 +7,7 @@ |
| #include "base/run_loop.h" |
| #include "components/dom_distiller/core/article_distillation_update.h" |
| #include "components/dom_distiller/core/article_entry.h" |
| +#include "components/dom_distiller/core/distilled_content_store.h" |
| #include "components/dom_distiller/core/fake_distiller.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| @@ -73,7 +74,8 @@ class DomDistillerTaskTrackerTest : public testing::Test { |
| TEST_F(DomDistillerTaskTrackerTest, TestHasEntryId) { |
| MockDistillerFactory distiller_factory; |
| TestCancelCallback cancel_callback; |
| - TaskTracker task_tracker(GetDefaultEntry(), cancel_callback.GetCallback()); |
| + TaskTracker task_tracker( |
| + GetDefaultEntry(), cancel_callback.GetCallback(), NULL); |
| EXPECT_TRUE(task_tracker.HasEntryId(entry_id_)); |
| EXPECT_FALSE(task_tracker.HasEntryId("other_id")); |
| } |
| @@ -81,7 +83,8 @@ TEST_F(DomDistillerTaskTrackerTest, TestHasEntryId) { |
| TEST_F(DomDistillerTaskTrackerTest, TestHasUrl) { |
| MockDistillerFactory distiller_factory; |
| TestCancelCallback cancel_callback; |
| - TaskTracker task_tracker(GetDefaultEntry(), cancel_callback.GetCallback()); |
| + TaskTracker task_tracker( |
| + GetDefaultEntry(), cancel_callback.GetCallback(), NULL); |
| EXPECT_TRUE(task_tracker.HasUrl(page_0_url_)); |
| EXPECT_TRUE(task_tracker.HasUrl(page_1_url_)); |
| EXPECT_FALSE(task_tracker.HasUrl(GURL("http://other.url/"))); |
| @@ -90,7 +93,8 @@ TEST_F(DomDistillerTaskTrackerTest, TestHasUrl) { |
| TEST_F(DomDistillerTaskTrackerTest, TestViewerCancelled) { |
| MockDistillerFactory distiller_factory; |
| TestCancelCallback cancel_callback; |
| - TaskTracker task_tracker(GetDefaultEntry(), cancel_callback.GetCallback()); |
| + TaskTracker task_tracker( |
| + GetDefaultEntry(), cancel_callback.GetCallback(), NULL); |
| FakeViewRequestDelegate viewer_delegate; |
| FakeViewRequestDelegate viewer_delegate2; |
| @@ -107,7 +111,8 @@ TEST_F(DomDistillerTaskTrackerTest, TestViewerCancelled) { |
| TEST_F(DomDistillerTaskTrackerTest, TestViewerCancelledWithSaveRequest) { |
| MockDistillerFactory distiller_factory; |
| TestCancelCallback cancel_callback; |
| - TaskTracker task_tracker(GetDefaultEntry(), cancel_callback.GetCallback()); |
| + TaskTracker task_tracker( |
| + GetDefaultEntry(), cancel_callback.GetCallback(), NULL); |
| FakeViewRequestDelegate viewer_delegate; |
| scoped_ptr<ViewerHandle> handle(task_tracker.AddViewer(&viewer_delegate)); |
| @@ -128,7 +133,8 @@ TEST_F(DomDistillerTaskTrackerTest, TestViewerNotifiedOnDistillationComplete) { |
| EXPECT_CALL(distiller_factory, CreateDistillerImpl()) |
| .WillOnce(Return(distiller)); |
| TestCancelCallback cancel_callback; |
| - TaskTracker task_tracker(GetDefaultEntry(), cancel_callback.GetCallback()); |
| + TaskTracker task_tracker( |
| + GetDefaultEntry(), cancel_callback.GetCallback(), NULL); |
| FakeViewRequestDelegate viewer_delegate; |
| scoped_ptr<ViewerHandle> handle(task_tracker.AddViewer(&viewer_delegate)); |
| @@ -149,7 +155,8 @@ TEST_F(DomDistillerTaskTrackerTest, |
| EXPECT_CALL(distiller_factory, CreateDistillerImpl()) |
| .WillOnce(Return(distiller)); |
| TestCancelCallback cancel_callback; |
| - TaskTracker task_tracker(GetDefaultEntry(), cancel_callback.GetCallback()); |
| + TaskTracker task_tracker( |
| + GetDefaultEntry(), cancel_callback.GetCallback(), NULL); |
| MockSaveCallback save_callback; |
| task_tracker.AddSaveCallback( |
| @@ -164,5 +171,123 @@ TEST_F(DomDistillerTaskTrackerTest, |
| EXPECT_TRUE(cancel_callback.Cancelled()); |
| } |
| +DistilledArticleProto CreateDistilledArticleForEntry( |
| + const ArticleEntry& entry) { |
| + DistilledArticleProto article; |
| + for (int i = 0; i < entry.pages_size(); ++i) { |
| + DistilledPageProto* page = article.add_pages(); |
| + page->set_url(entry.pages(i).url()); |
| + page->set_html("<div>" + entry.pages(i).url() + "</div>"); |
| + } |
| + return article; |
| +} |
| + |
| +TEST_F(DomDistillerTaskTrackerTest, TestBlobFetcher) { |
| + ArticleEntry entry_with_blob = GetDefaultEntry(); |
| + DistilledArticleProto stored_distilled_article = |
| + CreateDistilledArticleForEntry(entry_with_blob); |
| + InMemoryContentStore content_store; |
| + content_store.InjectContent(entry_with_blob, stored_distilled_article); |
| + TestCancelCallback cancel_callback; |
| + |
| + TaskTracker task_tracker( |
| + entry_with_blob, cancel_callback.GetCallback(), &content_store); |
| + |
| + FakeViewRequestDelegate viewer_delegate; |
| + scoped_ptr<ViewerHandle> handle(task_tracker.AddViewer(&viewer_delegate)); |
| + base::RunLoop().RunUntilIdle(); |
| + |
| + const DistilledArticleProto* distilled_article; |
| + |
| + EXPECT_CALL(viewer_delegate, OnArticleReady(_)) |
| + .WillOnce(testing::SaveArg<0>(&distilled_article)); |
| + |
| + task_tracker.StartBlobFetcher(); |
| + base::RunLoop().RunUntilIdle(); |
| + |
| + EXPECT_EQ(stored_distilled_article.SerializeAsString(), |
| + distilled_article->SerializeAsString()); |
| + |
| + EXPECT_FALSE(cancel_callback.Cancelled()); |
| +} |
| + |
| +TEST_F(DomDistillerTaskTrackerTest, TestBlobFetcherFinishesFirst) { |
| + MockDistillerFactory distiller_factory; |
| + FakeDistiller* distiller = new FakeDistiller(false); |
| + EXPECT_CALL(distiller_factory, CreateDistillerImpl()) |
| + .WillOnce(Return(distiller)); |
| + |
| + ArticleEntry entry_with_blob = GetDefaultEntry(); |
| + DistilledArticleProto stored_distilled_article = |
| + CreateDistilledArticleForEntry(entry_with_blob); |
| + InMemoryContentStore content_store; |
| + content_store.InjectContent(entry_with_blob, stored_distilled_article); |
| + TestCancelCallback cancel_callback; |
| + TaskTracker task_tracker( |
| + entry_with_blob, cancel_callback.GetCallback(), &content_store); |
| + |
| + FakeViewRequestDelegate viewer_delegate; |
| + scoped_ptr<ViewerHandle> handle(task_tracker.AddViewer(&viewer_delegate)); |
| + base::RunLoop().RunUntilIdle(); |
| + |
| + const DistilledArticleProto* distilled_article; |
| + |
| + EXPECT_CALL(viewer_delegate, OnArticleReady(_)) |
| + .WillOnce(testing::SaveArg<0>(&distilled_article)); |
| + |
| + task_tracker.StartDistiller(&distiller_factory); |
| + task_tracker.StartBlobFetcher(); |
| + base::RunLoop().RunUntilIdle(); |
| + |
| + testing::Mock::VerifyAndClearExpectations(&viewer_delegate); |
| + EXPECT_EQ(stored_distilled_article.SerializeAsString(), |
| + distilled_article->SerializeAsString()); |
| + |
| + distiller->RunDistillerCallback( |
| + scoped_ptr<DistilledArticleProto>(new DistilledArticleProto)); |
| + |
| + EXPECT_FALSE(cancel_callback.Cancelled()); |
| + |
| + base::RunLoop().RunUntilIdle(); |
| +} |
| + |
| +TEST_F(DomDistillerTaskTrackerTest, TestBlobFetcherWithoutBlob) { |
| + MockDistillerFactory distiller_factory; |
| + FakeDistiller* distiller = new FakeDistiller(false); |
| + EXPECT_CALL(distiller_factory, CreateDistillerImpl()) |
| + .WillOnce(Return(distiller)); |
| + |
| + ArticleEntry entry(GetDefaultEntry()); |
| + InMemoryContentStore content_store; |
| + scoped_ptr<DistilledArticleProto> distilled_article( |
| + new DistilledArticleProto(CreateDistilledArticleForEntry(entry))); |
| + |
| + TestCancelCallback cancel_callback; |
| + TaskTracker task_tracker( |
| + GetDefaultEntry(), cancel_callback.GetCallback(), &content_store); |
| + |
| + FakeViewRequestDelegate viewer_delegate; |
| + scoped_ptr<ViewerHandle> handle(task_tracker.AddViewer(&viewer_delegate)); |
| + base::RunLoop().RunUntilIdle(); |
| + |
| + const DistilledArticleProto* final_distilled_article; |
|
shashi
2014/03/13 00:32:45
Why is final_distilled_article needed?
cjhopman
2014/03/18 16:06:10
Done.
|
| + |
| + task_tracker.StartBlobFetcher(); |
| + task_tracker.StartDistiller(&distiller_factory); |
| + |
| + // OnArticleReady shouldn't be called until distillation finishes (i.e. the |
| + // blob fetcher shouldn't return distilled content). |
| + base::RunLoop().RunUntilIdle(); |
| + |
|
shashi
2014/03/13 00:32:45
Should there be a testing::Mock::VerifyAndClearEx
cjhopman
2014/03/18 16:06:10
How about this?
|
| + EXPECT_CALL(viewer_delegate, OnArticleReady(_)) |
| + .WillOnce(testing::SaveArg<0>(&final_distilled_article)); |
| + |
| + distiller->RunDistillerCallback(distilled_article.Pass()); |
| + |
| + base::RunLoop().RunUntilIdle(); |
| + |
| + EXPECT_FALSE(cancel_callback.Cancelled()); |
| +} |
| + |
| } // namespace test |
| } // namespace dom_distiller |