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 "chrome/renderer/spellchecker/spellcheck_provider_test.h"
6
7#include "base/stl_util.h"
8#include "chrome/common/spellcheck_marker.h"
9#include "chrome/common/spellcheck_messages.h"
10#include "chrome/renderer/spellchecker/spellcheck.h"
11#include "ipc/ipc_message_macros.h"
12
13class MockSpellcheck: public SpellCheck {
14};
15
16FakeTextCheckingCompletion::FakeTextCheckingCompletion()
17: completion_count_(0),
18  cancellation_count_(0) {
19}
20
21FakeTextCheckingCompletion::~FakeTextCheckingCompletion() {}
22
23void FakeTextCheckingCompletion::didFinishCheckingText(
24    const blink::WebVector<blink::WebTextCheckingResult>& results) {
25  ++completion_count_;
26}
27
28void FakeTextCheckingCompletion::didCancelCheckingText() {
29  ++completion_count_;
30  ++cancellation_count_;
31}
32
33TestingSpellCheckProvider::TestingSpellCheckProvider()
34      : SpellCheckProvider(NULL, new MockSpellcheck),
35        spelling_service_call_count_(0) {
36}
37
38TestingSpellCheckProvider::~TestingSpellCheckProvider() {
39  delete spellcheck_;
40}
41
42bool TestingSpellCheckProvider::Send(IPC::Message* message)  {
43#if !defined(OS_MACOSX)
44  // Call our mock message handlers.
45  bool handled = true;
46  IPC_BEGIN_MESSAGE_MAP(TestingSpellCheckProvider, *message)
47    IPC_MESSAGE_HANDLER(SpellCheckHostMsg_CallSpellingService,
48                        OnCallSpellingService)
49    IPC_MESSAGE_UNHANDLED(handled = false)
50  IPC_END_MESSAGE_MAP()
51
52  if (handled) {
53    delete message;
54    return true;
55  }
56#endif
57
58  messages_.push_back(message);
59  return true;
60}
61
62void TestingSpellCheckProvider::OnCallSpellingService(int route_id,
63                           int identifier,
64                           const base::string16& text,
65                           const std::vector<SpellCheckMarker>& markers) {
66#if defined (OS_MACOSX)
67  NOTREACHED();
68#else
69  ++spelling_service_call_count_;
70  blink::WebTextCheckingCompletion* completion =
71      text_check_completions_.Lookup(identifier);
72  if (!completion) {
73    ResetResult();
74    return;
75  }
76  text_.assign(text);
77  text_check_completions_.Remove(identifier);
78  std::vector<blink::WebTextCheckingResult> results;
79  results.push_back(blink::WebTextCheckingResult(
80      blink::WebTextDecorationTypeSpelling,
81      0, 5, blink::WebString("hello")));
82  completion->didFinishCheckingText(results);
83  last_request_ = text;
84  last_results_ = results;
85#endif
86}
87
88void TestingSpellCheckProvider::ResetResult() {
89  text_.clear();
90}
91
92SpellCheckProviderTest::SpellCheckProviderTest() {}
93SpellCheckProviderTest::~SpellCheckProviderTest() {}
94
95
96