Index: components/dom_distiller/core/dom_distiller_request_view_base_unittest.cc |
diff --git a/components/dom_distiller/core/dom_distiller_request_view_base_unittest.cc b/components/dom_distiller/core/dom_distiller_request_view_base_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..352d38ca21bba3258ffaf1094b6378993dbe5221 |
--- /dev/null |
+++ b/components/dom_distiller/core/dom_distiller_request_view_base_unittest.cc |
@@ -0,0 +1,239 @@ |
+// 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 <vector> |
+ |
+#include "components/dom_distiller/core/article_distillation_update.h" |
+#include "components/dom_distiller/core/test_request_view_handle.h" |
+#include "components/pref_registry/testing_pref_service_syncable.h" |
+#include "grit/components_resources.h" |
+#include "grit/components_strings.h" |
+#include "testing/gmock/include/gmock/gmock.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+#include "ui/base/l10n/l10n_util.h" |
+ |
+using testing::HasSubstr; |
+using testing::Not; |
+ |
+namespace dom_distiller { |
+ |
+class DomDistillerRequestViewTest : public testing::Test { |
+ protected: |
+ void SetUp() override { |
+ pref_service_.reset(new user_prefs::TestingPrefServiceSyncable()); |
+ DistilledPagePrefs::RegisterProfilePrefs(pref_service_->registry()); |
+ distilled_page_prefs_.reset(new DistilledPagePrefs(pref_service_.get())); |
+ } |
+ |
+ scoped_ptr<user_prefs::TestingPrefServiceSyncable> pref_service_; |
+ scoped_ptr<DistilledPagePrefs> distilled_page_prefs_; |
+}; |
+ |
+TEST_F(DomDistillerRequestViewTest, TestTitleEscaped) { |
+ const std::string no_title = |
+ l10n_util::GetStringUTF8(IDS_DOM_DISTILLER_VIEWER_NO_DATA_TITLE); |
+ const std::string valid_title = "valid title"; |
+ const std::string has_quotes = "\"" + valid_title + "\""; |
+ const std::string escaped_quotes = "\\\"" + valid_title + "\\\""; |
+ const std::string has_special_chars = "<" + valid_title + "\\"; |
+ const std::string escaped_special_chars = "\\u003C" + valid_title + "\\\\"; |
+ |
+ TestRequestViewHandle handle(distilled_page_prefs_.get()); |
+ |
+ // Make sure title is properly escaped from quotes. |
+ { |
+ scoped_ptr<DistilledArticleProto> article_proto( |
+ new DistilledArticleProto()); |
+ article_proto->set_title(has_quotes); |
+ |
+ handle.OnArticleReady(article_proto.get()); |
+ |
+ EXPECT_THAT(handle.GetJavaScriptBuffer(), HasSubstr(escaped_quotes)); |
+ EXPECT_THAT(handle.GetJavaScriptBuffer(), Not(HasSubstr(has_quotes))); |
+ handle.ClearJavaScriptBuffer(); |
+ } |
+ |
+ // Make sure title is properly escaped from special characters. |
+ { |
+ scoped_ptr<DistilledArticleProto> article_proto( |
+ new DistilledArticleProto()); |
+ article_proto->set_title(has_special_chars); |
+ |
+ handle.OnArticleReady(article_proto.get()); |
+ |
+ EXPECT_THAT(handle.GetJavaScriptBuffer(), HasSubstr(escaped_special_chars)); |
+ EXPECT_THAT(handle.GetJavaScriptBuffer(), |
+ Not(HasSubstr(has_special_chars))); |
+ handle.ClearJavaScriptBuffer(); |
+ } |
+ |
+} |
+ |
+TEST_F(DomDistillerRequestViewTest, TestTitleNeverEmpty) { |
+ const std::string no_title = |
+ l10n_util::GetStringUTF8(IDS_DOM_DISTILLER_VIEWER_NO_DATA_TITLE); |
+ const std::string valid_title = "valid title"; |
+ |
+ TestRequestViewHandle handle(distilled_page_prefs_.get()); |
+ |
+ // Test that the title actually gets shown. |
+ { |
+ scoped_ptr<DistilledArticleProto> article_proto( |
+ new DistilledArticleProto()); |
+ article_proto->set_title(valid_title); |
+ |
+ handle.OnArticleReady(article_proto.get()); |
+ |
+ EXPECT_THAT(handle.GetJavaScriptBuffer(), HasSubstr(valid_title)); |
+ EXPECT_THAT(handle.GetJavaScriptBuffer(), Not(HasSubstr(no_title))); |
+ handle.ClearJavaScriptBuffer(); |
+ } |
+ |
+ // Test empty string title |
+ { |
+ scoped_ptr<DistilledArticleProto> article_proto( |
+ new DistilledArticleProto()); |
+ article_proto->set_title(""); |
+ |
+ handle.OnArticleReady(article_proto.get()); |
+ |
+ EXPECT_THAT(handle.GetJavaScriptBuffer(), HasSubstr(no_title)); |
+ EXPECT_THAT(handle.GetJavaScriptBuffer(), Not(HasSubstr(valid_title))); |
+ handle.ClearJavaScriptBuffer(); |
+ } |
+ |
+ // Test no title. |
+ { |
+ scoped_ptr<DistilledArticleProto> article_proto( |
+ new DistilledArticleProto()); |
+ |
+ handle.OnArticleReady(article_proto.get()); |
+ |
+ EXPECT_THAT(handle.GetJavaScriptBuffer(), HasSubstr(no_title)); |
+ EXPECT_THAT(handle.GetJavaScriptBuffer(), Not(HasSubstr(valid_title))); |
+ handle.ClearJavaScriptBuffer(); |
+ } |
+} |
+ |
+TEST_F(DomDistillerRequestViewTest, TestContentNeverEmpty) { |
+ const std::string no_content = |
+ l10n_util::GetStringUTF8(IDS_DOM_DISTILLER_VIEWER_NO_DATA_CONTENT); |
+ const std::string valid_content = "valid content"; |
+ |
+ TestRequestViewHandle handle(distilled_page_prefs_.get()); |
+ |
+ // Test single page content |
+ { |
+ scoped_ptr<DistilledArticleProto> article_proto( |
+ new DistilledArticleProto()); |
+ (*(article_proto->add_pages())).set_html(valid_content); |
+ |
+ handle.OnArticleReady(article_proto.get()); |
+ |
+ EXPECT_THAT(handle.GetJavaScriptBuffer(), HasSubstr(valid_content)); |
+ EXPECT_THAT(handle.GetJavaScriptBuffer(), Not(HasSubstr(no_content))); |
+ handle.ClearJavaScriptBuffer(); |
+ } |
+ |
+ // Test multiple page content |
+ { |
+ scoped_ptr<DistilledArticleProto> article_proto( |
+ new DistilledArticleProto()); |
+ (*(article_proto->add_pages())).set_html(valid_content); |
+ (*(article_proto->add_pages())).set_html(valid_content); |
+ |
+ handle.OnArticleReady(article_proto.get()); |
+ |
+ EXPECT_THAT(handle.GetJavaScriptBuffer(), |
+ HasSubstr(valid_content + valid_content)); |
+ EXPECT_THAT(handle.GetJavaScriptBuffer(), Not(HasSubstr(no_content))); |
+ handle.ClearJavaScriptBuffer(); |
+ } |
+ |
+ // Test empty string content |
+ { |
+ scoped_ptr<DistilledArticleProto> article_proto( |
+ new DistilledArticleProto()); |
+ (*(article_proto->add_pages())).set_html(""); |
+ |
+ handle.OnArticleReady(article_proto.get()); |
+ |
+ EXPECT_THAT(handle.GetJavaScriptBuffer(), HasSubstr(no_content)); |
+ EXPECT_THAT(handle.GetJavaScriptBuffer(), Not(HasSubstr(valid_content))); |
+ handle.ClearJavaScriptBuffer(); |
+ } |
+ |
+ // Test page no content |
+ { |
+ scoped_ptr<DistilledArticleProto> article_proto( |
+ new DistilledArticleProto()); |
+ article_proto->add_pages(); |
+ |
+ handle.OnArticleReady(article_proto.get()); |
+ |
+ EXPECT_THAT(handle.GetJavaScriptBuffer(), HasSubstr(no_content)); |
+ EXPECT_THAT(handle.GetJavaScriptBuffer(), Not(HasSubstr(valid_content))); |
+ handle.ClearJavaScriptBuffer(); |
+ } |
+ |
+ // Test no page. |
+ { |
+ scoped_ptr<DistilledArticleProto> article_proto( |
+ new DistilledArticleProto()); |
+ |
+ handle.OnArticleReady(article_proto.get()); |
+ |
+ EXPECT_THAT(handle.GetJavaScriptBuffer(), HasSubstr(no_content)); |
+ EXPECT_THAT(handle.GetJavaScriptBuffer(), Not(HasSubstr(valid_content))); |
+ handle.ClearJavaScriptBuffer(); |
+ } |
+ |
+ // Test empty string page update |
+ { |
+ std::vector<scoped_refptr<ArticleDistillationUpdate::RefCountedPageProto>> |
+ pages; |
+ scoped_refptr<base::RefCountedData<DistilledPageProto>> page_proto = |
+ new base::RefCountedData<DistilledPageProto>(); |
+ page_proto->data.set_html(""); |
+ pages.push_back(page_proto); |
+ |
+ scoped_ptr<ArticleDistillationUpdate> article_update( |
+ new ArticleDistillationUpdate(pages, false, false)); |
+ |
+ handle.OnArticleUpdated(*article_update.get()); |
+ |
+ EXPECT_THAT(handle.GetJavaScriptBuffer(), HasSubstr(no_content)); |
+ EXPECT_THAT(handle.GetJavaScriptBuffer(), Not(HasSubstr(valid_content))); |
+ handle.ClearJavaScriptBuffer(); |
+ } |
+} |
+ |
+TEST_F(DomDistillerRequestViewTest, TestLoadingIndicator) { |
+ const std::string no_content = |
+ l10n_util::GetStringUTF8(IDS_DOM_DISTILLER_VIEWER_NO_DATA_CONTENT); |
+ // Showing the indicator does mean passing 'false' as the parameter. |
+ const std::string show_loader = "showLoadingIndicator(false);"; |
+ |
+ TestRequestViewHandle handle(distilled_page_prefs_.get()); |
+ handle.TakeViewerHandle(NULL); |
+ |
+ // The loading indicator should show before any content is displayed. |
+ EXPECT_THAT(handle.GetJavaScriptBuffer(), HasSubstr(show_loader)); |
+ handle.ClearJavaScriptBuffer(); |
+ |
+ std::vector<scoped_refptr<ArticleDistillationUpdate::RefCountedPageProto>> |
+ pages; |
+ scoped_refptr<base::RefCountedData<DistilledPageProto>> page_proto = |
+ new base::RefCountedData<DistilledPageProto>(); |
+ pages.push_back(page_proto); |
+ |
+ scoped_ptr<ArticleDistillationUpdate> article_update( |
+ new ArticleDistillationUpdate(pages, true, false)); |
+ |
+ handle.OnArticleUpdated(*article_update.get()); |
+ |
+ EXPECT_THAT(handle.GetJavaScriptBuffer(), HasSubstr(show_loader)); |
+} |
+ |
+} // namespace dom_distiller |