Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / spellchecker / spellcheck_message_filter_mac_browsertest.cc
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.
4
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"
15
16 // Fake filter for testing, which stores sent messages and
17 // allows verification by the test case.
18 class TestingSpellCheckMessageFilter : public SpellCheckMessageFilterMac {
19  public:
20   explicit TestingSpellCheckMessageFilter(base::MessageLoopForUI* loop)
21       : SpellCheckMessageFilterMac(0),
22         loop_(loop) { }
23
24   bool Send(IPC::Message* message) override {
25     sent_messages_.push_back(message);
26     loop_->PostTask(FROM_HERE, base::MessageLoop::QuitClosure());
27     return true;
28   }
29
30   ScopedVector<IPC::Message> sent_messages_;
31   base::MessageLoopForUI* loop_;
32
33  private:
34   ~TestingSpellCheckMessageFilter() override {}
35 };
36
37 typedef InProcessBrowserTest SpellCheckMessageFilterMacBrowserTest;
38
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()));
44
45   SpellCheckHostMsg_RequestTextCheck to_be_received(
46       123, 456, base::UTF8ToUTF16("zz."), std::vector<SpellCheckMarker>());
47   target->OnMessageReceived(to_be_received);
48
49   base::MessageLoopForUI::current()->Run();
50   EXPECT_EQ(1U, target->sent_messages_.size());
51
52   SpellCheckMsg_RespondTextCheck::Param params;
53   bool ok = SpellCheckMsg_RespondTextCheck::Read(
54       target->sent_messages_[0], &params);
55   std::vector<SpellCheckResult> sent_results = params.b;
56  
57   EXPECT_TRUE(ok);
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);
63 }