spellcheck_provider_mac_unittest.cc revision cedac228d2dd51db4b79ea1e72c7f249408ee061
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector>
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/common/spellcheck_marker.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/spellcheck_messages.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/spellcheck_result.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/renderer/spellchecker/spellcheck_provider_test.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebString.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SpellCheckProviderMacTest : public SpellCheckProviderTest {};
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void FakeMessageArrival(
20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    SpellCheckProvider* provider,
21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    const SpellCheckHostMsg_RequestTextCheck::Param& parameters) {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<SpellCheckResult> fake_result;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool handled = provider->OnMessageReceived(
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      SpellCheckMsg_RespondTextCheck(
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          0,
26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          parameters.b,
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          fake_result));
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(handled);
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SpellCheckProviderMacTest, SingleRoundtripSuccess) {
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FakeTextCheckingCompletion completion;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  provider_.RequestTextChecking(blink::WebString("hello "),
3590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                                &completion,
3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                                std::vector<SpellCheckMarker>());
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(completion.completion_count_, 0U);
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(provider_.messages_.size(), 1U);
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(provider_.pending_text_request_size(), 1U);
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SpellCheckHostMsg_RequestTextCheck::Param read_parameters1;
42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  bool ok = SpellCheckHostMsg_RequestTextCheck::Read(
43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      provider_.messages_[0], &read_parameters1);
44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_TRUE(ok);
45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(read_parameters1.c, base::UTF8ToUTF16("hello "));
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  FakeMessageArrival(&provider_, read_parameters1);
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(completion.completion_count_, 1U);
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(provider_.pending_text_request_size(), 0U);
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SpellCheckProviderMacTest, TwoRoundtripSuccess) {
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FakeTextCheckingCompletion completion1;
54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  provider_.RequestTextChecking(blink::WebString("hello "),
5590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                                &completion1,
5690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                                std::vector<SpellCheckMarker>());
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FakeTextCheckingCompletion completion2;
58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  provider_.RequestTextChecking(blink::WebString("bye "),
5990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                                &completion2,
6090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                                std::vector<SpellCheckMarker>());
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(completion1.completion_count_, 0U);
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(completion2.completion_count_, 0U);
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(provider_.messages_.size(), 2U);
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(provider_.pending_text_request_size(), 2U);
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SpellCheckHostMsg_RequestTextCheck::Param read_parameters1;
68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  bool ok = SpellCheckHostMsg_RequestTextCheck::Read(
69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      provider_.messages_[0], &read_parameters1);
70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_TRUE(ok);
71cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(read_parameters1.c, base::UTF8ToUTF16("hello "));
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
73cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SpellCheckHostMsg_RequestTextCheck::Param read_parameters2;
74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  ok = SpellCheckHostMsg_RequestTextCheck::Read(
75cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      provider_.messages_[1], &read_parameters2);
76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_TRUE(ok);
77cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(read_parameters2.c, base::UTF8ToUTF16("bye "));
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FakeMessageArrival(&provider_, read_parameters1);
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(completion1.completion_count_, 1U);
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(completion2.completion_count_, 0U);
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(provider_.pending_text_request_size(), 1U);
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FakeMessageArrival(&provider_, read_parameters2);
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(completion1.completion_count_, 1U);
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(completion2.completion_count_, 1U);
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(provider_.pending_text_request_size(), 0U);
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
91