Chromium Code Reviews| Index: chrome/browser/renderer_host/text_input_client_mac_unittest.mm |
| diff --git a/chrome/browser/renderer_host/text_input_client_mac_unittest.mm b/chrome/browser/renderer_host/text_input_client_mac_unittest.mm |
| index 6870064e81360133b829b80ae52a0d8db039a655..54ef3411f0449d8827b3516aef55d9c20a5ec355 100644 |
| --- a/chrome/browser/renderer_host/text_input_client_mac_unittest.mm |
| +++ b/chrome/browser/renderer_host/text_input_client_mac_unittest.mm |
| @@ -7,6 +7,7 @@ |
| #include "base/bind.h" |
| #include "base/message_loop.h" |
| #include "base/threading/thread.h" |
| +#include "chrome/browser/renderer_host/text_input_client_message_filter.h" |
| #include "chrome/common/text_input_client_messages.h" |
| #include "chrome/test/testing_profile.h" |
| #include "content/browser/renderer_host/mock_render_process_host.h" |
| @@ -18,6 +19,8 @@ |
| namespace { |
| +const int64 kTaskDelayMs = 200; |
| + |
| // This test does not test the WebKit side of the dictionary system (which |
| // performs the actual data fetching), but rather this just tests that the |
| // service's signaling system works. |
| @@ -37,9 +40,8 @@ class TextInputClientMacTest : public testing::Test { |
| // Helper method to post a task on the testing thread's MessageLoop after |
| // a short delay. |
| - void PostTask(const base::Closure& task) { |
| - const int64 kTaskDelayMs = 200; |
| - thread_.message_loop()->PostDelayedTask(FROM_HERE, task, kTaskDelayMs); |
| + void PostTask(const base::Closure& task, const int64 delay = kTaskDelayMs) { |
| + thread_.message_loop()->PostDelayedTask(FROM_HERE, task, delay); |
| } |
| RenderWidgetHost* widget() { |
| @@ -106,6 +108,41 @@ TEST_F(TextInputClientMacTest, TimeoutCharacterIndex) { |
| EXPECT_EQ(NSNotFound, index); |
| } |
| +TEST_F(TextInputClientMacTest, NotFoundCharacterIndex) { |
| + ScopedTestingThread thread(this); |
| + const NSUInteger kPreviousValue = 42; |
| + const size_t kNotFoundValue = static_cast<size_t>(-1); |
| + |
| + // Set an arbitrary value to ensure the index is not |NSNotFound|. |
| + PostTask(base::Bind(&TextInputClientMac::SetCharacterIndexAndSignal, |
| + base::Unretained(service()), kPreviousValue)); |
| + |
| + scoped_refptr<TextInputClientMessageFilter> filter( |
| + new TextInputClientMessageFilter(widget()->process()->id())); |
| + scoped_ptr<IPC::Message> message( |
| + new TextInputClientReplyMsg_GotCharacterIndexForPoint( |
| + widget()->routing_id(), kNotFoundValue)); |
| + bool message_ok = true; |
| + // Set |WTF::notFound| to the index |kTaskDelayMs| after the previous |
| + // setting. |
| + PostTask(base::Bind(&TextInputClientMessageFilter::OnMessageReceived, |
| + filter.get(), *message, &message_ok), |
| + kTaskDelayMs + kTaskDelayMs); |
|
Robert Sesek
2011/05/23 12:31:39
Use *2?
bashi
2011/05/24 00:44:17
Done.
|
| + |
| + NSUInteger index = service()->GetCharacterIndexAtPoint( |
| + widget(), gfx::Point(2, 2)); |
| + EXPECT_EQ(kPreviousValue, index); |
| + index = service()->GetCharacterIndexAtPoint(widget(), gfx::Point(2, 2)); |
| + EXPECT_EQ(NSNotFound, index); |
| + |
| + EXPECT_EQ(2U, ipc_sink().message_count()); |
| + for (unsigned i = 0; i < ipc_sink().message_count(); ++i) { |
|
Robert Sesek
2011/05/23 12:31:39
Chromium prefers size_t to unsigned.
bashi
2011/05/24 00:44:17
Done.
|
| + const IPC::Message* ipc_message = ipc_sink().GetMessageAt(i); |
| + EXPECT_EQ(ipc_message->type(), |
| + TextInputClientMsg_CharacterIndexForPoint::ID); |
| + } |
| +} |
| + |
| TEST_F(TextInputClientMacTest, GetRectForRange) { |
| ScopedTestingThread thread(this); |
| const NSRect kSuccessValue = NSMakeRect(42, 43, 44, 45); |