spellcheck_message_filter_browsertest.cc revision dc0f95d653279beabeb9817299e2902918ba123e
1// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "base/command_line.h" 6#include "base/message_loop.h" 7#include "base/utf_string_conversions.h" 8#include "chrome/browser/spellcheck_message_filter.h" 9#include "chrome/common/render_messages.h" 10#include "chrome/test/in_process_browser_test.h" 11#include "chrome/test/ui_test_utils.h" 12#include "testing/gtest/include/gtest/gtest.h" 13#include "third_party/WebKit/Source/WebKit/chromium/public/WebTextCheckingResult.h" 14 15namespace { 16 17typedef InProcessBrowserTest SpellCheckMessageFilterBrowserTest; 18 19// Fake filter for testing, which stores sent messages and 20// allows verification by the test case. 21class TestingSpellCheckMessageFilter : public SpellCheckMessageFilter { 22 public: 23 explicit TestingSpellCheckMessageFilter(MessageLoopForUI* loop) 24 : loop_(loop) { } 25 26 ~TestingSpellCheckMessageFilter() { 27 for (std::vector<IPC::Message*>::iterator i = sent_messages_.begin(); 28 i != sent_messages_.end(); 29 ++i) { 30 delete *i; 31 } 32 } 33 34 virtual bool Send(IPC::Message* message) { 35 sent_messages_.push_back(message); 36 loop_->PostTask(FROM_HERE, new MessageLoop::QuitTask()); 37 return true; 38 } 39 40 std::vector<IPC::Message*> sent_messages_; 41 MessageLoopForUI* loop_; 42}; 43 44// Uses browsertest to setup chrome threads. 45IN_PROC_BROWSER_TEST_F(SpellCheckMessageFilterBrowserTest, 46 SpellCheckReturnMessage) { 47 scoped_refptr<TestingSpellCheckMessageFilter> target 48 (new TestingSpellCheckMessageFilter(MessageLoopForUI::current())); 49 50 ViewHostMsg_SpellChecker_PlatformRequestTextCheck to_be_received 51 (123, 456, 789, UTF8ToUTF16("zz.")); 52 bool handled = false; 53 target->OnMessageReceived(to_be_received, &handled); 54 EXPECT_TRUE(handled); 55 56 MessageLoopForUI::current()->Run(); 57 EXPECT_EQ(1U, target->sent_messages_.size()); 58 59 int sent_identifier; 60 int sent_tag; 61 std::vector<WebKit::WebTextCheckingResult> sent_results; 62 bool ok = ViewMsg_SpellChecker_RespondTextCheck::Read( 63 target->sent_messages_[0], &sent_identifier, &sent_tag, &sent_results); 64 EXPECT_TRUE(ok); 65 EXPECT_EQ(1U, sent_results.size()); 66 EXPECT_EQ(sent_results[0].position(), 0); 67 EXPECT_EQ(sent_results[0].length(), 2); 68 EXPECT_EQ(sent_results[0].error(), 69 WebKit::WebTextCheckingResult::ErrorSpelling); 70} 71 72} // namespace 73