Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / components / dom_distiller / core / task_tracker_unittest.cc
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
3 // found in the LICENSE file.
4
5 #include "components/dom_distiller/core/task_tracker.h"
6
7 #include "base/run_loop.h"
8 #include "components/dom_distiller/core/article_entry.h"
9 #include "components/dom_distiller/core/fake_distiller.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11
12 using testing::Return;
13 using testing::_;
14
15 namespace dom_distiller {
16 namespace test {
17
18 class FakeViewRequestDelegate : public ViewRequestDelegate {
19  public:
20   virtual ~FakeViewRequestDelegate() {}
21   MOCK_METHOD1(OnArticleReady,
22                void(const DistilledArticleProto* article_proto));
23 };
24
25 class TestCancelCallback {
26  public:
27   TestCancelCallback() : cancelled_(false) {}
28   TaskTracker::CancelCallback GetCallback() {
29     return base::Bind(&TestCancelCallback::Cancel, base::Unretained(this));
30   }
31   void Cancel(TaskTracker*) { cancelled_ = true; }
32   bool Cancelled() { return cancelled_; }
33
34  private:
35   bool cancelled_;
36 };
37
38 class MockSaveCallback {
39  public:
40   MOCK_METHOD3(Save,
41                void(const ArticleEntry&, const DistilledArticleProto*, bool));
42 };
43
44 class DomDistillerTaskTrackerTest : public testing::Test {
45  public:
46   virtual void SetUp() OVERRIDE {
47     message_loop_.reset(new base::MessageLoop());
48     entry_id_ = "id0";
49     page_0_url_ = GURL("http://www.example.com/1");
50     page_1_url_ = GURL("http://www.example.com/2");
51   }
52
53   ArticleEntry GetDefaultEntry() {
54     ArticleEntry entry;
55     entry.set_entry_id(entry_id_);
56     ArticleEntryPage* page0 = entry.add_pages();
57     ArticleEntryPage* page1 = entry.add_pages();
58     page0->set_url(page_0_url_.spec());
59     page1->set_url(page_1_url_.spec());
60     return entry;
61   }
62
63  protected:
64   scoped_ptr<base::MessageLoop> message_loop_;
65   std::string entry_id_;
66   GURL page_0_url_;
67   GURL page_1_url_;
68 };
69
70 TEST_F(DomDistillerTaskTrackerTest, TestHasEntryId) {
71   MockDistillerFactory distiller_factory;
72   TestCancelCallback cancel_callback;
73   TaskTracker task_tracker(GetDefaultEntry(), cancel_callback.GetCallback());
74   EXPECT_TRUE(task_tracker.HasEntryId(entry_id_));
75   EXPECT_FALSE(task_tracker.HasEntryId("other_id"));
76 }
77
78 TEST_F(DomDistillerTaskTrackerTest, TestHasUrl) {
79   MockDistillerFactory distiller_factory;
80   TestCancelCallback cancel_callback;
81   TaskTracker task_tracker(GetDefaultEntry(), cancel_callback.GetCallback());
82   EXPECT_TRUE(task_tracker.HasUrl(page_0_url_));
83   EXPECT_TRUE(task_tracker.HasUrl(page_1_url_));
84   EXPECT_FALSE(task_tracker.HasUrl(GURL("http://other.url/")));
85 }
86
87 TEST_F(DomDistillerTaskTrackerTest, TestViewerCancelled) {
88   MockDistillerFactory distiller_factory;
89   TestCancelCallback cancel_callback;
90   TaskTracker task_tracker(GetDefaultEntry(), cancel_callback.GetCallback());
91
92   FakeViewRequestDelegate viewer_delegate;
93   FakeViewRequestDelegate viewer_delegate2;
94   scoped_ptr<ViewerHandle> handle(task_tracker.AddViewer(&viewer_delegate));
95   scoped_ptr<ViewerHandle> handle2(task_tracker.AddViewer(&viewer_delegate2));
96
97   EXPECT_FALSE(cancel_callback.Cancelled());
98   handle.reset();
99   EXPECT_FALSE(cancel_callback.Cancelled());
100   handle2.reset();
101   EXPECT_TRUE(cancel_callback.Cancelled());
102 }
103
104 TEST_F(DomDistillerTaskTrackerTest, TestViewerCancelledWithSaveRequest) {
105   MockDistillerFactory distiller_factory;
106   TestCancelCallback cancel_callback;
107   TaskTracker task_tracker(GetDefaultEntry(), cancel_callback.GetCallback());
108
109   FakeViewRequestDelegate viewer_delegate;
110   scoped_ptr<ViewerHandle> handle(task_tracker.AddViewer(&viewer_delegate));
111   EXPECT_FALSE(cancel_callback.Cancelled());
112
113   MockSaveCallback save_callback;
114   task_tracker.AddSaveCallback(
115       base::Bind(&MockSaveCallback::Save, base::Unretained(&save_callback)));
116   handle.reset();
117
118   // Since there is a pending save request, the task shouldn't be cancelled.
119   EXPECT_FALSE(cancel_callback.Cancelled());
120 }
121
122 TEST_F(DomDistillerTaskTrackerTest, TestViewerNotifiedOnDistillationComplete) {
123   MockDistillerFactory distiller_factory;
124   FakeDistiller* distiller = new FakeDistiller(true);
125   EXPECT_CALL(distiller_factory, CreateDistillerImpl())
126       .WillOnce(Return(distiller));
127   TestCancelCallback cancel_callback;
128   TaskTracker task_tracker(GetDefaultEntry(), cancel_callback.GetCallback());
129
130   FakeViewRequestDelegate viewer_delegate;
131   scoped_ptr<ViewerHandle> handle(task_tracker.AddViewer(&viewer_delegate));
132   base::RunLoop().RunUntilIdle();
133
134   EXPECT_CALL(viewer_delegate, OnArticleReady(_));
135
136   task_tracker.StartDistiller(&distiller_factory);
137   base::RunLoop().RunUntilIdle();
138
139   EXPECT_FALSE(cancel_callback.Cancelled());
140 }
141
142 TEST_F(DomDistillerTaskTrackerTest,
143        TestSaveCallbackCalledOnDistillationComplete) {
144   MockDistillerFactory distiller_factory;
145   FakeDistiller* distiller = new FakeDistiller(true);
146   EXPECT_CALL(distiller_factory, CreateDistillerImpl())
147       .WillOnce(Return(distiller));
148   TestCancelCallback cancel_callback;
149   TaskTracker task_tracker(GetDefaultEntry(), cancel_callback.GetCallback());
150
151   MockSaveCallback save_callback;
152   task_tracker.AddSaveCallback(
153       base::Bind(&MockSaveCallback::Save, base::Unretained(&save_callback)));
154   base::RunLoop().RunUntilIdle();
155
156   EXPECT_CALL(save_callback, Save(_, _, _));
157
158   task_tracker.StartDistiller(&distiller_factory);
159   base::RunLoop().RunUntilIdle();
160
161   EXPECT_TRUE(cancel_callback.Cancelled());
162 }
163
164 }  // namespace test
165 }  // namespace dom_distiller