| Index: components/offline_pages/downloads/download_notifying_observer_unittest.cc
|
| diff --git a/components/offline_pages/downloads/download_notifying_observer_unittest.cc b/components/offline_pages/downloads/download_notifying_observer_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..3606f57a5cd0110789784ec2cb7aaf5ffe39e62d
|
| --- /dev/null
|
| +++ b/components/offline_pages/downloads/download_notifying_observer_unittest.cc
|
| @@ -0,0 +1,231 @@
|
| +// Copyright 2016 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "components/offline_pages/downloads/download_notifying_observer.h"
|
| +
|
| +#include "base/memory/ptr_util.h"
|
| +#include "components/offline_pages/background/save_page_request.h"
|
| +#include "components/offline_pages/client_namespace_constants.h"
|
| +#include "components/offline_pages/downloads/offline_page_download_notifier.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +namespace offline_pages {
|
| +
|
| +namespace {
|
| +static const int64_t kTestOfflineId = 42L;
|
| +static const char kTestUrl[] = "http://foo.com/bar";
|
| +static const char kTestGuid[] = "cccccccc-cccc-4ccc-0ccc-ccccccccccc1";
|
| +static const ClientId kTestClientId(kDownloadNamespace, kTestGuid);
|
| +static const base::Time kTestCreationTime = base::Time::Now();
|
| +static const bool kTestUserRequested = true;
|
| +
|
| +enum class LastNotificationType {
|
| + NONE,
|
| + DOWNLOAD_SUCCESSFUL,
|
| + DOWNLOAD_FAILED,
|
| + DOWNLOAD_PROGRESS,
|
| + DOWNLOAD_PAUSED,
|
| + DOWNLOAD_INTERRUPTED,
|
| + DOWNLOAD_CANCELED,
|
| +};
|
| +
|
| +class TestNotifier : public OfflinePageDownloadNotifier {
|
| + public:
|
| + TestNotifier();
|
| + ~TestNotifier() override;
|
| +
|
| + // OfflinePageDownloadNotifier implementation:
|
| + void NotifyDownloadSuccessful(const DownloadUIItem& item) override;
|
| + void NotifyDownloadFailed(const DownloadUIItem& item) override;
|
| + void NotifyDownloadProgress(const DownloadUIItem& item) override;
|
| + void NotifyDownloadPaused(const DownloadUIItem& item) override;
|
| + void NotifyDownloadInterrupted(const DownloadUIItem& item) override;
|
| + void NotifyDownloadCanceled(const DownloadUIItem& item) override;
|
| +
|
| + void Reset();
|
| +
|
| + LastNotificationType last_notification_type() const {
|
| + return last_notification_type_;
|
| + }
|
| +
|
| + DownloadUIItem* download_item() const { return download_item_.get(); }
|
| +
|
| + private:
|
| + LastNotificationType last_notification_type_;
|
| + std::unique_ptr<DownloadUIItem> download_item_;
|
| +};
|
| +
|
| +TestNotifier::TestNotifier()
|
| + : last_notification_type_(LastNotificationType::NONE) {}
|
| +
|
| +TestNotifier::~TestNotifier() {}
|
| +
|
| +void TestNotifier::NotifyDownloadSuccessful(const DownloadUIItem& item) {
|
| + last_notification_type_ = LastNotificationType::DOWNLOAD_SUCCESSFUL;
|
| + download_item_.reset(new DownloadUIItem(item));
|
| +}
|
| +
|
| +void TestNotifier::NotifyDownloadFailed(const DownloadUIItem& item) {
|
| + last_notification_type_ = LastNotificationType::DOWNLOAD_FAILED;
|
| + download_item_.reset(new DownloadUIItem(item));
|
| +}
|
| +
|
| +void TestNotifier::NotifyDownloadProgress(const DownloadUIItem& item) {
|
| + last_notification_type_ = LastNotificationType::DOWNLOAD_PROGRESS;
|
| + download_item_.reset(new DownloadUIItem(item));
|
| +}
|
| +
|
| +void TestNotifier::NotifyDownloadPaused(const DownloadUIItem& item) {
|
| + last_notification_type_ = LastNotificationType::DOWNLOAD_PAUSED;
|
| + download_item_.reset(new DownloadUIItem(item));
|
| +}
|
| +
|
| +void TestNotifier::NotifyDownloadInterrupted(const DownloadUIItem& item) {
|
| + last_notification_type_ = LastNotificationType::DOWNLOAD_INTERRUPTED;
|
| + download_item_.reset(new DownloadUIItem(item));
|
| +}
|
| +
|
| +void TestNotifier::NotifyDownloadCanceled(const DownloadUIItem& item) {
|
| + last_notification_type_ = LastNotificationType::DOWNLOAD_CANCELED;
|
| + download_item_.reset(new DownloadUIItem(item));
|
| +}
|
| +
|
| +void TestNotifier::Reset() {
|
| + last_notification_type_ = LastNotificationType::NONE;
|
| + download_item_.reset(nullptr);
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +class DownloadNotifyingObserverTest : public testing::Test {
|
| + public:
|
| + DownloadNotifyingObserverTest();
|
| + ~DownloadNotifyingObserverTest() override;
|
| +
|
| + // testing::Test implementation:
|
| + void SetUp() override;
|
| +
|
| + TestNotifier* notifier() const { return notifier_; }
|
| + DownloadNotifyingObserver* observer() { return observer_.get(); }
|
| +
|
| + private:
|
| + TestNotifier* notifier_;
|
| + std::unique_ptr<DownloadNotifyingObserver> observer_;
|
| +};
|
| +
|
| +DownloadNotifyingObserverTest::DownloadNotifyingObserverTest() {}
|
| +
|
| +DownloadNotifyingObserverTest::~DownloadNotifyingObserverTest() {}
|
| +
|
| +void DownloadNotifyingObserverTest::SetUp() {
|
| + std::unique_ptr<TestNotifier> notifier(new TestNotifier);
|
| + notifier_ = notifier.get();
|
| + observer_.reset(new DownloadNotifyingObserver(std::move(notifier)));
|
| +}
|
| +
|
| +TEST_F(DownloadNotifyingObserverTest, OnAdded) {
|
| + SavePageRequest request(kTestOfflineId, GURL(kTestUrl), kTestClientId,
|
| + kTestCreationTime, kTestUserRequested);
|
| + observer()->OnAdded(request);
|
| + EXPECT_EQ(LastNotificationType::DOWNLOAD_PROGRESS,
|
| + notifier()->last_notification_type());
|
| + EXPECT_EQ(kTestGuid, notifier()->download_item()->guid);
|
| + EXPECT_EQ(GURL(kTestUrl), notifier()->download_item()->url);
|
| + EXPECT_EQ(kTestCreationTime, notifier()->download_item()->start_time);
|
| +}
|
| +
|
| +TEST_F(DownloadNotifyingObserverTest, OnChangedToPaused) {
|
| + SavePageRequest request(kTestOfflineId, GURL(kTestUrl), kTestClientId,
|
| + kTestCreationTime, kTestUserRequested);
|
| + request.set_request_state(SavePageRequest::RequestState::PAUSED);
|
| + observer()->OnChanged(request);
|
| + EXPECT_EQ(LastNotificationType::DOWNLOAD_PAUSED,
|
| + notifier()->last_notification_type());
|
| + EXPECT_EQ(kTestGuid, notifier()->download_item()->guid);
|
| + EXPECT_EQ(GURL(kTestUrl), notifier()->download_item()->url);
|
| + EXPECT_EQ(kTestCreationTime, notifier()->download_item()->start_time);
|
| +}
|
| +
|
| +TEST_F(DownloadNotifyingObserverTest, OnChangedToAvailable) {
|
| + SavePageRequest request(kTestOfflineId, GURL(kTestUrl), kTestClientId,
|
| + kTestCreationTime, kTestUserRequested);
|
| + request.set_request_state(SavePageRequest::RequestState::AVAILABLE);
|
| + observer()->OnChanged(request);
|
| + EXPECT_EQ(LastNotificationType::DOWNLOAD_PROGRESS,
|
| + notifier()->last_notification_type());
|
| + EXPECT_EQ(kTestGuid, notifier()->download_item()->guid);
|
| + EXPECT_EQ(GURL(kTestUrl), notifier()->download_item()->url);
|
| + EXPECT_EQ(kTestCreationTime, notifier()->download_item()->start_time);
|
| +}
|
| +
|
| +TEST_F(DownloadNotifyingObserverTest, OnCompletedSuccess) {
|
| + SavePageRequest request(kTestOfflineId, GURL(kTestUrl), kTestClientId,
|
| + kTestCreationTime, kTestUserRequested);
|
| + observer()->OnCompleted(request, RequestNotifier::SavePageStatus::SUCCESS);
|
| + EXPECT_EQ(LastNotificationType::DOWNLOAD_SUCCESSFUL,
|
| + notifier()->last_notification_type());
|
| + EXPECT_EQ(kTestGuid, notifier()->download_item()->guid);
|
| + EXPECT_EQ(GURL(kTestUrl), notifier()->download_item()->url);
|
| + EXPECT_EQ(kTestCreationTime, notifier()->download_item()->start_time);
|
| +}
|
| +
|
| +TEST_F(DownloadNotifyingObserverTest, OnCompletedCanceled) {
|
| + SavePageRequest request(kTestOfflineId, GURL(kTestUrl), kTestClientId,
|
| + kTestCreationTime, kTestUserRequested);
|
| + observer()->OnCompleted(request, RequestNotifier::SavePageStatus::REMOVED);
|
| + EXPECT_EQ(LastNotificationType::DOWNLOAD_CANCELED,
|
| + notifier()->last_notification_type());
|
| + EXPECT_EQ(kTestGuid, notifier()->download_item()->guid);
|
| + EXPECT_EQ(GURL(kTestUrl), notifier()->download_item()->url);
|
| + EXPECT_EQ(kTestCreationTime, notifier()->download_item()->start_time);
|
| +}
|
| +
|
| +TEST_F(DownloadNotifyingObserverTest, OnCompletedFailure) {
|
| + SavePageRequest request(kTestOfflineId, GURL(kTestUrl), kTestClientId,
|
| + kTestCreationTime, kTestUserRequested);
|
| + observer()->OnCompleted(request,
|
| + RequestNotifier::SavePageStatus::PRERENDER_FAILURE);
|
| + EXPECT_EQ(LastNotificationType::DOWNLOAD_FAILED,
|
| + notifier()->last_notification_type());
|
| + EXPECT_EQ(kTestGuid, notifier()->download_item()->guid);
|
| + EXPECT_EQ(GURL(kTestUrl), notifier()->download_item()->url);
|
| + EXPECT_EQ(kTestCreationTime, notifier()->download_item()->start_time);
|
| +
|
| + notifier()->Reset();
|
| + observer()->OnCompleted(request,
|
| + RequestNotifier::SavePageStatus::FOREGROUND_CANCELED);
|
| + EXPECT_EQ(LastNotificationType::DOWNLOAD_FAILED,
|
| + notifier()->last_notification_type());
|
| + EXPECT_EQ(kTestGuid, notifier()->download_item()->guid);
|
| + EXPECT_EQ(GURL(kTestUrl), notifier()->download_item()->url);
|
| + EXPECT_EQ(kTestCreationTime, notifier()->download_item()->start_time);
|
| +
|
| + notifier()->Reset();
|
| + observer()->OnCompleted(request,
|
| + RequestNotifier::SavePageStatus::SAVE_FAILED);
|
| + EXPECT_EQ(LastNotificationType::DOWNLOAD_FAILED,
|
| + notifier()->last_notification_type());
|
| + EXPECT_EQ(kTestGuid, notifier()->download_item()->guid);
|
| + EXPECT_EQ(GURL(kTestUrl), notifier()->download_item()->url);
|
| + EXPECT_EQ(kTestCreationTime, notifier()->download_item()->start_time);
|
| +
|
| + notifier()->Reset();
|
| + observer()->OnCompleted(request, RequestNotifier::SavePageStatus::EXPIRED);
|
| + EXPECT_EQ(LastNotificationType::DOWNLOAD_FAILED,
|
| + notifier()->last_notification_type());
|
| + EXPECT_EQ(kTestGuid, notifier()->download_item()->guid);
|
| + EXPECT_EQ(GURL(kTestUrl), notifier()->download_item()->url);
|
| + EXPECT_EQ(kTestCreationTime, notifier()->download_item()->start_time);
|
| +
|
| + notifier()->Reset();
|
| + observer()->OnCompleted(
|
| + request, RequestNotifier::SavePageStatus::RETRY_COUNT_EXCEEDED);
|
| + EXPECT_EQ(LastNotificationType::DOWNLOAD_FAILED,
|
| + notifier()->last_notification_type());
|
| + EXPECT_EQ(kTestGuid, notifier()->download_item()->guid);
|
| + EXPECT_EQ(GURL(kTestUrl), notifier()->download_item()->url);
|
| + EXPECT_EQ(kTestCreationTime, notifier()->download_item()->start_time);
|
| +}
|
| +
|
| +} // namespace offline_pages
|
|
|