diff options
author | thakis@chromium.org <thakis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-23 22:43:00 +0000 |
---|---|---|
committer | thakis@chromium.org <thakis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-23 22:43:00 +0000 |
commit | 6a4f5af29737b966d1cb9e0ab149d7cd0055e5fd (patch) | |
tree | f97c014a06b7ce43c372d9dc1946bfad9878f026 /chrome/browser/cocoa/find_pasteboard_unittest.mm | |
parent | 80d5f425f45ccd05330a0d326229e7b5d684a06f (diff) | |
download | chromium_src-6a4f5af29737b966d1cb9e0ab149d7cd0055e5fd.zip chromium_src-6a4f5af29737b966d1cb9e0ab149d7cd0055e5fd.tar.gz chromium_src-6a4f5af29737b966d1cb9e0ab149d7cd0055e5fd.tar.bz2 |
Let cmd-f/cmd-g use the findboard.
In a nutshell, this means that the find bars honor the global find pasteboard, which is like a clipboard, but for searches. See the TEST section below for consequences, and also see the bug for more information.
BUG=14562
TEST=
* Select some text, hit cmd-e, cmd-g. This should search for the marked text and open the find bar if it's not open.
* Open TextEdit, hit cmd-f. Enter some text, hit enter. Switch back to Chrome with an open find bar. The find bar should now contain the text you entered in TextEdit
* Enter different text into chrome's find bar, switch back to TextEdit. Its find window should now contain the new text.
* Search for something in one tab, switch to another tab. It should contain the same text in the findbar as the first one.
* Open the findbar, select some text, hit cmd-e. The find bar should be updated with the selected text and this text should be highlighted in the web page. Find bars in other tabs should be updated with that text as well.
Review URL: http://codereview.chromium.org/206035
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@27015 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/cocoa/find_pasteboard_unittest.mm')
-rw-r--r-- | chrome/browser/cocoa/find_pasteboard_unittest.mm | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/chrome/browser/cocoa/find_pasteboard_unittest.mm b/chrome/browser/cocoa/find_pasteboard_unittest.mm new file mode 100644 index 0000000..643d95c --- /dev/null +++ b/chrome/browser/cocoa/find_pasteboard_unittest.mm @@ -0,0 +1,111 @@ +// Copyright (c) 2009 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. + +#import <Cocoa/Cocoa.h> + +#include "base/scoped_nsobject.h" +#import "chrome/browser/cocoa/find_pasteboard.h" +#import "chrome/browser/cocoa/cocoa_test_helper.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "testing/platform_test.h" + +// A subclass of FindPasteboard that doesn't write to the real find pasteboard. +@interface FindPasteboardTesting : FindPasteboard { + @public + int notificationCount_; + @private + scoped_nsobject<NSPasteboard> pboard_; +} +- (NSPasteboard*)findPboard; + +- (void)callback:(id)sender; + +// These are for checking that pasteboard content is copied to/from the +// FindPasteboard correctly. +- (NSString*)findPboardText; +- (void)setFindPboardText:(NSString*)text; +@end + +@implementation FindPasteboardTesting + +- (id)init { + if ((self = [super init])) { + pboard_.reset([[NSPasteboard pasteboardWithUniqueName] retain]); + } + return self; +} + +- (NSPasteboard*)findPboard { + return pboard_.get(); +} + +- (void)callback:(id)sender { + ++notificationCount_; +} + +- (void)setFindPboardText:(NSString*)text { + [pboard_.get() declareTypes:[NSArray arrayWithObject:NSStringPboardType] + owner:nil]; + [pboard_.get() setString:text forType:NSStringPboardType]; +} + +- (NSString*)findPboardText { + return [pboard_.get() stringForType:NSStringPboardType]; +} +@end + +namespace { + +class FindPasteboardTest : public PlatformTest { + public: + FindPasteboardTest() { + pboard_.reset([[FindPasteboardTesting alloc] init]); + } + protected: + scoped_nsobject<FindPasteboardTesting> pboard_; + CocoaTestHelper helper_; +}; + +TEST_F(FindPasteboardTest, SettingTextUpdatesPboard) { + [pboard_.get() setFindText:@"text"]; + EXPECT_EQ( + NSOrderedSame, + [[pboard_.get() findPboardText] compare:@"text"]); +} + +TEST_F(FindPasteboardTest, ReadingFromPboardUpdatesFindText) { + [pboard_.get() setFindPboardText:@"text"]; + [pboard_.get() loadTextFromPasteboard:nil]; + EXPECT_EQ( + NSOrderedSame, + [[pboard_.get() findText] compare:@"text"]); +} + +TEST_F(FindPasteboardTest, SendsNotificationWhenTextChanges) { + [[NSNotificationCenter defaultCenter] + addObserver:pboard_.get() + selector:@selector(callback:) + name:kFindPasteboardChangedNotification + object:pboard_.get()]; + EXPECT_EQ(0, pboard_.get()->notificationCount_); + [pboard_.get() setFindText:@"text"]; + EXPECT_EQ(1, pboard_.get()->notificationCount_); + [pboard_.get() setFindText:@"text"]; + EXPECT_EQ(1, pboard_.get()->notificationCount_); + [pboard_.get() setFindText:@"other text"]; + EXPECT_EQ(2, pboard_.get()->notificationCount_); + + [pboard_.get() setFindPboardText:@"other text"]; + [pboard_.get() loadTextFromPasteboard:nil]; + EXPECT_EQ(2, pboard_.get()->notificationCount_); + + [pboard_.get() setFindPboardText:@"otherer text"]; + [pboard_.get() loadTextFromPasteboard:nil]; + EXPECT_EQ(3, pboard_.get()->notificationCount_); + + [[NSNotificationCenter defaultCenter] removeObserver:pboard_.get()]; +} + + +} // namespace |