1 // Copyright (c) 2012 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.
5 #include "base/command_line.h"
6 #include "base/memory/scoped_vector.h"
7 #include "base/message_loop/message_loop.h"
8 #include "base/stl_util.h"
9 #include "base/strings/utf_string_conversions.h"
10 #include "chrome/browser/spellchecker/spellcheck_message_filter_mac.h"
11 #include "chrome/common/spellcheck_messages.h"
12 #include "chrome/common/spellcheck_result.h"
13 #include "chrome/test/base/in_process_browser_test.h"
14 #include "testing/gtest/include/gtest/gtest.h"
16 // Fake filter for testing, which stores sent messages and
17 // allows verification by the test case.
18 class TestingSpellCheckMessageFilter : public SpellCheckMessageFilterMac {
20 explicit TestingSpellCheckMessageFilter(base::MessageLoopForUI* loop)
21 : SpellCheckMessageFilterMac(0),
24 bool Send(IPC::Message* message) override {
25 sent_messages_.push_back(message);
26 loop_->PostTask(FROM_HERE, base::MessageLoop::QuitClosure());
30 ScopedVector<IPC::Message> sent_messages_;
31 base::MessageLoopForUI* loop_;
34 ~TestingSpellCheckMessageFilter() override {}
37 typedef InProcessBrowserTest SpellCheckMessageFilterMacBrowserTest;
39 // Uses browsertest to setup chrome threads.
40 IN_PROC_BROWSER_TEST_F(SpellCheckMessageFilterMacBrowserTest,
41 SpellCheckReturnMessage) {
42 scoped_refptr<TestingSpellCheckMessageFilter> target(
43 new TestingSpellCheckMessageFilter(base::MessageLoopForUI::current()));
45 SpellCheckHostMsg_RequestTextCheck to_be_received(
46 123, 456, base::UTF8ToUTF16("zz."), std::vector<SpellCheckMarker>());
47 target->OnMessageReceived(to_be_received);
49 base::MessageLoopForUI::current()->Run();
50 EXPECT_EQ(1U, target->sent_messages_.size());
52 SpellCheckMsg_RespondTextCheck::Param params;
53 bool ok = SpellCheckMsg_RespondTextCheck::Read(
54 target->sent_messages_[0], ¶ms);
55 std::vector<SpellCheckResult> sent_results = params.b;
58 EXPECT_EQ(1U, sent_results.size());
59 EXPECT_EQ(sent_results[0].location, 0);
60 EXPECT_EQ(sent_results[0].length, 2);
61 EXPECT_EQ(sent_results[0].decoration,
62 SpellCheckResult::SPELLING);