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 <vector>
6
7#include "base/strings/utf_string_conversions.h"
8#include "chrome/common/spellcheck_marker.h"
9#include "chrome/common/spellcheck_messages.h"
10#include "chrome/common/spellcheck_result.h"
11#include "chrome/renderer/spellchecker/spellcheck_provider_test.h"
12#include "testing/gtest/include/gtest/gtest.h"
13#include "third_party/WebKit/public/platform/WebString.h"
14
15namespace {
16
17class SpellCheckProviderMacTest : public SpellCheckProviderTest {};
18
19void FakeMessageArrival(
20    SpellCheckProvider* provider,
21    const SpellCheckHostMsg_RequestTextCheck::Param& parameters) {
22  std::vector<SpellCheckResult> fake_result;
23  bool handled = provider->OnMessageReceived(
24      SpellCheckMsg_RespondTextCheck(
25          0,
26          parameters.b,
27          fake_result));
28  EXPECT_TRUE(handled);
29}
30
31TEST_F(SpellCheckProviderMacTest, SingleRoundtripSuccess) {
32  FakeTextCheckingCompletion completion;
33
34  provider_.RequestTextChecking(blink::WebString("hello "),
35                                &completion,
36                                std::vector<SpellCheckMarker>());
37  EXPECT_EQ(completion.completion_count_, 0U);
38  EXPECT_EQ(provider_.messages_.size(), 1U);
39  EXPECT_EQ(provider_.pending_text_request_size(), 1U);
40
41  SpellCheckHostMsg_RequestTextCheck::Param read_parameters1;
42  bool ok = SpellCheckHostMsg_RequestTextCheck::Read(
43      provider_.messages_[0], &read_parameters1);
44  EXPECT_TRUE(ok);
45  EXPECT_EQ(read_parameters1.c, base::UTF8ToUTF16("hello "));
46
47  FakeMessageArrival(&provider_, read_parameters1);
48  EXPECT_EQ(completion.completion_count_, 1U);
49  EXPECT_EQ(provider_.pending_text_request_size(), 0U);
50}
51
52TEST_F(SpellCheckProviderMacTest, TwoRoundtripSuccess) {
53  FakeTextCheckingCompletion completion1;
54  provider_.RequestTextChecking(blink::WebString("hello "),
55                                &completion1,
56                                std::vector<SpellCheckMarker>());
57  FakeTextCheckingCompletion completion2;
58  provider_.RequestTextChecking(blink::WebString("bye "),
59                                &completion2,
60                                std::vector<SpellCheckMarker>());
61
62  EXPECT_EQ(completion1.completion_count_, 0U);
63  EXPECT_EQ(completion2.completion_count_, 0U);
64  EXPECT_EQ(provider_.messages_.size(), 2U);
65  EXPECT_EQ(provider_.pending_text_request_size(), 2U);
66
67  SpellCheckHostMsg_RequestTextCheck::Param read_parameters1;
68  bool ok = SpellCheckHostMsg_RequestTextCheck::Read(
69      provider_.messages_[0], &read_parameters1);
70  EXPECT_TRUE(ok);
71  EXPECT_EQ(read_parameters1.c, base::UTF8ToUTF16("hello "));
72
73  SpellCheckHostMsg_RequestTextCheck::Param read_parameters2;
74  ok = SpellCheckHostMsg_RequestTextCheck::Read(
75      provider_.messages_[1], &read_parameters2);
76  EXPECT_TRUE(ok);
77  EXPECT_EQ(read_parameters2.c, base::UTF8ToUTF16("bye "));
78
79  FakeMessageArrival(&provider_, read_parameters1);
80  EXPECT_EQ(completion1.completion_count_, 1U);
81  EXPECT_EQ(completion2.completion_count_, 0U);
82  EXPECT_EQ(provider_.pending_text_request_size(), 1U);
83
84  FakeMessageArrival(&provider_, read_parameters2);
85  EXPECT_EQ(completion1.completion_count_, 1U);
86  EXPECT_EQ(completion2.completion_count_, 1U);
87  EXPECT_EQ(provider_.pending_text_request_size(), 0U);
88}
89
90}  // namespace
91