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

Unified Diff: chrome/browser/android/offline_pages/offline_page_utils_unittest.cc

Issue 1521193002: [Offline pages] Refactor URL conversions from TabAndroid (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressing feedback, updating tests, moving functions to a static class Created 5 years 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: chrome/browser/android/offline_pages/offline_page_utils_unittest.cc
diff --git a/chrome/browser/android/offline_pages/offline_page_utils_unittest.cc b/chrome/browser/android/offline_pages/offline_page_utils_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..14cbfdd085ec1a443e5c5c23af3bddda2f249115
--- /dev/null
+++ b/chrome/browser/android/offline_pages/offline_page_utils_unittest.cc
@@ -0,0 +1,226 @@
+// Copyright 2015 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 "chrome/browser/android/offline_pages/offline_page_utils.h"
+
+#include "base/callback.h"
+#include "base/command_line.h"
+#include "base/files/file.h"
+#include "base/files/file_path.h"
+#include "base/files/file_util.h"
+#include "base/test/test_simple_task_runner.h"
+#include "base/thread_task_runner_handle.h"
+#include "chrome/browser/android/offline_pages/offline_page_model_factory.h"
+#include "chrome/browser/android/offline_pages/test_offline_page_model_builder.h"
+#include "chrome/common/chrome_constants.h"
+#include "chrome/test/base/testing_profile.h"
+#include "components/offline_pages/offline_page_model.h"
+#include "components/offline_pages/offline_page_switches.h"
+#include "components/offline_pages/offline_page_test_archiver.h"
+#include "components/offline_pages/offline_page_test_store.h"
+#include "net/base/filename_util.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "url/gurl.h"
+
+namespace offline_pages {
+namespace {
+
+const GURL kTestPage1Url("http://test.org/page1");
+const GURL kTestPage2Url("http://test.org/page2");
+const GURL kTestPage3Url("http://test.org/page3");
+int64 kTestPage1BookmarkId = 1234;
jianli 2015/12/16 23:08:08 nit: why not also adding const for this and one be
fgorski 2015/12/17 19:00:14 Done.
+int64 kTestPage2BookmarkId = 5678;
+const int64 kTestFileSize = 876543LL;
+
+} // namespace
+
+class OfflinePageUtilsTest
+ : public testing::Test,
+ public OfflinePageTestArchiver::Observer,
+ public base::SupportsWeakPtr<OfflinePageUtilsTest> {
+ public:
+ OfflinePageUtilsTest();
+ ~OfflinePageUtilsTest() override;
+
+ void SetUp() override;
+ void RunUntilIdle();
+
+ // Necessary callbacks for the offline page model.
+ void OnSavePageDone(OfflinePageModel::SavePageResult result);
+ void OnClearAllDone();
+
+ // OfflinePageTestArchiver::Observer implementation:
+ void SetLastPathCreatedByArchiver(const base::FilePath& file_path) override;
+
+ const GURL& offline_url_1() const { return offline_url_1_; }
jianli 2015/12/16 23:08:08 Please comment on these URLs, like their behaviors
fgorski 2015/12/17 19:00:14 Done.
+ const GURL& offline_url_2() const { return offline_url_2_; }
+ const GURL& offline_url_3() const { return offline_url_3_; }
+ TestingProfile* profile() { return &profile_; }
+
+ private:
+ void CreateOfflinePages();
+ scoped_ptr<OfflinePageTestArchiver> BuildArchiver(
+ const GURL& url,
+ const base::FilePath& file_name);
+
+ GURL offline_url_1_;
+ GURL offline_url_2_;
+ GURL offline_url_3_;
+
+ scoped_refptr<base::TestSimpleTaskRunner> task_runner_;
+ base::ThreadTaskRunnerHandle task_runner_handle_;
+ TestingProfile profile_;
+};
+
+OfflinePageUtilsTest::OfflinePageUtilsTest()
+ : task_runner_(new base::TestSimpleTaskRunner),
+ task_runner_handle_(task_runner_) {}
+
+OfflinePageUtilsTest::~OfflinePageUtilsTest() {}
+
+void OfflinePageUtilsTest::SetUp() {
+ // Enable offline pages feature.
+ base::CommandLine::ForCurrentProcess()->AppendSwitch(
+ switches::kEnableOfflinePages);
+
+ // Set up the factory for testing.
+ OfflinePageModelFactory::GetInstance()->SetTestingFactoryAndUse(
+ &profile_, BuildTestOfflinePageModel);
+ RunUntilIdle();
+
+ // Make sure the store contains the right offline pages before the load
+ // happens.
+ CreateOfflinePages();
+}
+
+void OfflinePageUtilsTest::RunUntilIdle() {
+ task_runner_->RunUntilIdle();
+}
+
+void OfflinePageUtilsTest::OnSavePageDone(
+ OfflinePageModel::SavePageResult result) {
+ // Result ignored here.
+}
+
+void OfflinePageUtilsTest::OnClearAllDone() {
+ // Result ignored here.
+}
+
+void OfflinePageUtilsTest::SetLastPathCreatedByArchiver(
+ const base::FilePath& file_path) {
+ LOG(INFO) << file_path.value();
+ if (offline_url_1_.is_empty()) {
+ offline_url_1_ = net::FilePathToFileURL(file_path);
jianli 2015/12/16 23:08:07 I think this trick is not better than trying to ge
fgorski 2015/12/17 19:00:14 Done, but I simply decided to ask the model, which
+ return;
+ }
+
+ ASSERT_TRUE(offline_url_2_.is_empty());
+ offline_url_2_ = net::FilePathToFileURL(file_path);
+}
+
+void OfflinePageUtilsTest::CreateOfflinePages() {
+ // Create page 1.
+ scoped_ptr<OfflinePageTestArchiver> archiver(
+ BuildArchiver(kTestPage1Url,
+ base::FilePath(FILE_PATH_LITERAL("page1.mhtml")))
+ .Pass());
+ OfflinePageModelFactory::GetForBrowserContext(profile())->SavePage(
+ kTestPage1Url, kTestPage1BookmarkId, archiver.Pass(),
+ base::Bind(&OfflinePageUtilsTest::OnSavePageDone, AsWeakPtr()));
+ RunUntilIdle();
+
+ // Create page 2.
+ archiver = BuildArchiver(kTestPage2Url,
+ base::FilePath(FILE_PATH_LITERAL("page2.mhtml")))
+ .Pass();
+ OfflinePageModelFactory::GetForBrowserContext(profile())->SavePage(
+ kTestPage2Url, kTestPage2BookmarkId, archiver.Pass(),
+ base::Bind(&OfflinePageUtilsTest::OnSavePageDone, AsWeakPtr()));
+ RunUntilIdle();
+
+ // Create path to 3rd file.
jianli 2015/12/16 23:08:07 nit: Create a file that is not associated with any
fgorski 2015/12/17 19:00:14 Done.
+ offline_url_3_ = net::FilePathToFileURL(
+ profile()
+ ->GetPath()
+ .Append(chrome::kOfflinePageArchviesDirname)
+ .Append(FILE_PATH_LITERAL("missing_file.mhtml")));
+}
+
+scoped_ptr<OfflinePageTestArchiver> OfflinePageUtilsTest::BuildArchiver(
+ const GURL& url,
+ const base::FilePath& file_name) {
+ scoped_ptr<OfflinePageTestArchiver> archiver(new OfflinePageTestArchiver(
+ this, url, OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED,
+ kTestFileSize, base::ThreadTaskRunnerHandle::Get()));
+ archiver->set_file_name(file_name);
+ return archiver.Pass();
+}
+
+// Simple test for offline page model having any pages loaded.
+TEST_F(OfflinePageUtilsTest, HasOfflinePages) {
+ EXPECT_TRUE(OfflinePageUtils::HasOfflinePages(profile()));
+
+ OfflinePageModelFactory::GetForBrowserContext(profile())->ClearAll(
+ base::Bind(&OfflinePageUtilsTest::OnClearAllDone, AsWeakPtr()));
+ RunUntilIdle();
+
+ EXPECT_FALSE(OfflinePageUtils::HasOfflinePages(profile()));
+}
+
+TEST_F(OfflinePageUtilsTest, MightBeOfflineURL) {
+ // URL is invalid.
+ EXPECT_FALSE(OfflinePageUtils::MightBeOfflineURL(GURL("/test.mhtml")));
+ // Scheme is not file.
+ EXPECT_FALSE(OfflinePageUtils::MightBeOfflineURL(GURL("http://test.com/")));
+ // Does not end with .mhtml.
+ EXPECT_FALSE(OfflinePageUtils::MightBeOfflineURL(GURL("file:///test.txt")));
+ // Might still be an offline page.
+ EXPECT_TRUE(OfflinePageUtils::MightBeOfflineURL(GURL("file:///test.mhtml")));
+}
+
+TEST_F(OfflinePageUtilsTest, GetOfflineURLByOnlineURL) {
+ EXPECT_EQ(offline_url_1(), OfflinePageUtils::GetOfflineURLByOnlineURL(
+ profile(), kTestPage1Url));
+ EXPECT_EQ(offline_url_2(), OfflinePageUtils::GetOfflineURLByOnlineURL(
+ profile(), kTestPage2Url));
+ EXPECT_EQ(GURL(), OfflinePageUtils::GetOfflineURLByOnlineURL(
+ profile(), GURL(kTestPage3Url)));
+}
+
+TEST_F(OfflinePageUtilsTest, GetOnlineURLByOfflineURL) {
+ EXPECT_EQ(kTestPage1Url, OfflinePageUtils::GetOnlineURLByOfflineURL(
+ profile(), offline_url_1()));
+ EXPECT_EQ(kTestPage2Url, OfflinePageUtils::GetOnlineURLByOfflineURL(
+ profile(), offline_url_2()));
+ EXPECT_EQ(GURL::EmptyGURL(), OfflinePageUtils::GetOfflineURLByOnlineURL(
+ profile(), offline_url_3()));
+}
+
+TEST_F(OfflinePageUtilsTest, GetBookmarkIdByOfflineURL) {
+ EXPECT_EQ(kTestPage1BookmarkId, OfflinePageUtils::GetBookmarkIdByOfflineURL(
+ profile(), offline_url_1()));
+ EXPECT_EQ(kTestPage2BookmarkId, OfflinePageUtils::GetBookmarkIdByOfflineURL(
+ profile(), offline_url_2()));
+ EXPECT_EQ(-1, OfflinePageUtils::GetBookmarkIdByOfflineURL(profile(),
+ offline_url_3()));
+}
+
+TEST_F(OfflinePageUtilsTest, IsOfflinePage) {
+ EXPECT_TRUE(OfflinePageUtils::IsOfflinePage(profile(), offline_url_1()));
+ EXPECT_TRUE(OfflinePageUtils::IsOfflinePage(profile(), offline_url_2()));
+ EXPECT_FALSE(OfflinePageUtils::IsOfflinePage(profile(), offline_url_3()));
+ EXPECT_FALSE(OfflinePageUtils::IsOfflinePage(profile(), kTestPage1Url));
+ EXPECT_FALSE(OfflinePageUtils::IsOfflinePage(profile(), kTestPage2Url));
+}
+
+TEST_F(OfflinePageUtilsTest, HasOfflinePageForOnlineURL) {
+ EXPECT_TRUE(
+ OfflinePageUtils::HasOfflinePageForOnlineURL(profile(), kTestPage1Url));
+ EXPECT_TRUE(
+ OfflinePageUtils::HasOfflinePageForOnlineURL(profile(), kTestPage2Url));
+ EXPECT_FALSE(
+ OfflinePageUtils::HasOfflinePageForOnlineURL(profile(), kTestPage3Url));
+}
+
+} // namespace offline_pages

Powered by Google App Engine
This is Rietveld 408576698