diff options
author | jif <jif@chromium.org> | 2015-03-04 01:33:08 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-03-04 09:33:59 +0000 |
commit | d8262e984058e91ecb6d6d8337345a942ef07401 (patch) | |
tree | 5660b9b3a40e123fe2226f4bc74290d9cd712c01 /components/open_from_clipboard | |
parent | 95a1ab38f32e1643b31fe3231f78e5d353529cd4 (diff) | |
download | chromium_src-d8262e984058e91ecb6d6d8337345a942ef07401.zip chromium_src-d8262e984058e91ecb6d6d8337345a942ef07401.tar.gz chromium_src-d8262e984058e91ecb6d6d8337345a942ef07401.tar.bz2 |
Add unittest to Open from Clipboard component.
BUG=None.
Review URL: https://codereview.chromium.org/961673004
Cr-Commit-Position: refs/heads/master@{#319042}
Diffstat (limited to 'components/open_from_clipboard')
3 files changed, 107 insertions, 13 deletions
diff --git a/components/open_from_clipboard/clipboard_recent_content_ios.h b/components/open_from_clipboard/clipboard_recent_content_ios.h index 062d0f1..174166d 100644 --- a/components/open_from_clipboard/clipboard_recent_content_ios.h +++ b/components/open_from_clipboard/clipboard_recent_content_ios.h @@ -12,6 +12,10 @@ @class NSDate; @class PasteboardNotificationListenerBridge; +namespace test { +class ClipboardRecentContentIOSTestHelper; +} + template <typename T> struct DefaultSingletonTraits; @@ -25,11 +29,15 @@ class ClipboardRecentContentIOS : public ClipboardRecentContent { // ClipboardRecentContent implementation. bool GetRecentURLFromClipboard(GURL* url) const override; + protected: + // Protected for testing. + ClipboardRecentContentIOS(); + ~ClipboardRecentContentIOS() override; + private: friend struct DefaultSingletonTraits<ClipboardRecentContentIOS>; + friend class test::ClipboardRecentContentIOSTestHelper; - ClipboardRecentContentIOS(); - ~ClipboardRecentContentIOS() override; // Loads information from the user defaults about the latest pasteboard entry. void LoadFromUserDefaults(); // Saves information to the user defaults about the latest pasteboard entry. diff --git a/components/open_from_clipboard/clipboard_recent_content_ios.mm b/components/open_from_clipboard/clipboard_recent_content_ios.mm index 4cc2ed5..7b14bff 100644 --- a/components/open_from_clipboard/clipboard_recent_content_ios.mm +++ b/components/open_from_clipboard/clipboard_recent_content_ios.mm @@ -100,17 +100,14 @@ bool ClipboardRecentContentIOS::GetRecentURLFromClipboard(GURL* url) const { } void ClipboardRecentContentIOS::PasteboardChanged() { - if ([UIPasteboard generalPasteboard].changeCount != - lastPasteboardChangeCount_) { - urlFromPasteboardCache_ = URLFromPasteboard(); - if (!urlFromPasteboardCache_.is_empty()) { - base::RecordAction( - base::UserMetricsAction("MobileOmniboxClipboardChanged")); - } - lastPasteboardChangeDate_.reset([[NSDate date] retain]); - lastPasteboardChangeCount_ = [UIPasteboard generalPasteboard].changeCount; - SaveToUserDefaults(); + urlFromPasteboardCache_ = URLFromPasteboard(); + if (!urlFromPasteboardCache_.is_empty()) { + base::RecordAction( + base::UserMetricsAction("MobileOmniboxClipboardChanged")); } + lastPasteboardChangeDate_.reset([[NSDate date] retain]); + lastPasteboardChangeCount_ = [UIPasteboard generalPasteboard].changeCount; + SaveToUserDefaults(); } ClipboardRecentContentIOS::ClipboardRecentContentIOS() @@ -124,7 +121,7 @@ ClipboardRecentContentIOS::ClipboardRecentContentIOS() NSInteger changeCount = [UIPasteboard generalPasteboard].changeCount; if (changeCount != lastPasteboardChangeCount_ || DeviceRestartedSincePasteboardChanged()) { - PasteboardChanged(); + PasteboardChanged(); } notificationBridge_.reset( [[PasteboardNotificationListenerBridge alloc] initWithDelegate:this]); diff --git a/components/open_from_clipboard/clipboard_recent_content_ios_unittest.mm b/components/open_from_clipboard/clipboard_recent_content_ios_unittest.mm new file mode 100644 index 0000000..d08f16e --- /dev/null +++ b/components/open_from_clipboard/clipboard_recent_content_ios_unittest.mm @@ -0,0 +1,89 @@ +// 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 "components/open_from_clipboard/clipboard_recent_content_ios.h" + +#import <UIKit/UIKit.h> + +#include "base/memory/scoped_ptr.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace test { +class ClipboardRecentContentIOSTestHelper : public ClipboardRecentContentIOS { + public: + ClipboardRecentContentIOSTestHelper() {} + ~ClipboardRecentContentIOSTestHelper() override {} + void SetStoredPasteboardChangeDate(NSDate* changeDate) { + lastPasteboardChangeDate_.reset([changeDate copy]); + SaveToUserDefaults(); + } +}; +} // namespace test + +namespace { +void SetPasteboardContent(const char* data) { + [[UIPasteboard generalPasteboard] + setValue:[NSString stringWithUTF8String:data] + forPasteboardType:@"public.plain-text"]; +} +const char* kUnrecognizedURL = "ftp://foo/"; +const char* kRecognizedURL = "http://bar/"; +const char* kAppSpecificURL = "test://qux/"; +const char* kAppSpecificScheme = "test"; +NSTimeInterval kSevenHours = 60 * 60 * 7; +} // namespace + +class ClipboardRecentContentIOSTest : public ::testing::Test { + protected: + void SetUp() override { + clipboard_content_.reset(new test::ClipboardRecentContentIOSTestHelper()); + } + void TearDown() override {} + + protected: + scoped_ptr<test::ClipboardRecentContentIOSTestHelper> clipboard_content_; +}; + +TEST_F(ClipboardRecentContentIOSTest, SchemeFiltering) { + GURL gurl; + + // Test unrecognized URL. + SetPasteboardContent(kUnrecognizedURL); + EXPECT_FALSE(clipboard_content_->GetRecentURLFromClipboard(&gurl)); + + // Test recognized URL. + SetPasteboardContent(kRecognizedURL); + EXPECT_TRUE(clipboard_content_->GetRecentURLFromClipboard(&gurl)); + EXPECT_STREQ(kRecognizedURL, gurl.spec().c_str()); + + // Test URL with app specific scheme, before and after configuration. + SetPasteboardContent(kAppSpecificURL); + EXPECT_FALSE(clipboard_content_->GetRecentURLFromClipboard(&gurl)); + clipboard_content_->set_application_scheme(kAppSpecificScheme); + SetPasteboardContent(kAppSpecificURL); + EXPECT_TRUE(clipboard_content_->GetRecentURLFromClipboard(&gurl)); + EXPECT_STREQ(kAppSpecificURL, gurl.spec().c_str()); +} + +TEST_F(ClipboardRecentContentIOSTest, PasteboardURLObsolescence) { + GURL gurl; + SetPasteboardContent(kRecognizedURL); + + // Test that recent pasteboard data is provided. + EXPECT_TRUE(clipboard_content_->GetRecentURLFromClipboard(&gurl)); + EXPECT_STREQ(kRecognizedURL, gurl.spec().c_str()); + + // Test that old pasteboard data is not provided. + clipboard_content_->SetStoredPasteboardChangeDate( + [NSDate dateWithTimeIntervalSinceNow:-kSevenHours]); + EXPECT_FALSE(clipboard_content_->GetRecentURLFromClipboard(&gurl)); + + // Test that pasteboard data is treated as new if the last recorded clipboard + // change dates from before the machine booted. + clipboard_content_->SetStoredPasteboardChangeDate( + [NSDate dateWithTimeIntervalSince1970:0]); + clipboard_content_.reset(new test::ClipboardRecentContentIOSTestHelper()); + EXPECT_TRUE(clipboard_content_->GetRecentURLFromClipboard(&gurl)); + EXPECT_STREQ(kRecognizedURL, gurl.spec().c_str()); +} |