summaryrefslogtreecommitdiffstats
path: root/webkit/tools/test_shell/mock_spellcheck_unittest.cc
blob: 17912bb6b434a9396375111a00ba60964e334469 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
// Copyright (c) 2010 The Chromium Authors. All rights reserved.  Use of this
// source code is governed by a BSD-style license that can be found in the
// LICENSE file.

#include "base/format_macros.h"
#include "base/string_util.h"
#include "base/utf_string_conversions.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "webkit/tools/test_shell/mock_spellcheck.h"

class MockSpellCheckTest : public testing::Test {
 public:
  MockSpellCheckTest() {
  }

  ~MockSpellCheckTest() {
  }
};

TEST_F(MockSpellCheckTest, SpellCheckStrings) {
  // Test cases.
  // Even though the following test cases are copied from our unit test,
  // SpellCheckTest.SpellCheckStrings_EN_US, we omit some test cases which
  // needs to handle non-ASCII characters correctly since our MockSpellCheck
  // class cannot handle non-ASCII characters. (It just ignores non-ASCII
  // characters.)
  static const struct {
    const wchar_t* input;
    bool expected_result;
    int misspelling_start;
    int misspelling_length;
  } kTestCases[] = {
    {L"", true, 0, 0},
    {L" ", true, 0, 0},
    {L"\xA0", true, 0, 0},
    {L"\x3000", true, 0, 0},

    {L"hello", true, 0, 0},
    {L"\x4F60\x597D", true, 0, 0},
    {L"\xC548\xB155\xD558\xC138\xC694", true, 0, 0},
    {L"\x3053\x3093\x306B\x3061\x306F", true, 0, 0},
    {L"\x0930\x093E\x091C\x0927\x093E\x0928", true, 0, 0},
    {L"\xFF28\xFF45\xFF4C\xFF4C\xFF4F", true, 0, 0},
    {L"\x03B3\x03B5\x03B9\x03AC" L" " L"\x03C3\x03BF\x03C5", true, 0, 0},
    {L"\x0437\x0434\x0440\x0430\x0432\x0441"
     L"\x0442\x0432\x0443\x0439\x0442\x0435", true, 0, 0},

    {L" " L"hello", true, 0, 0},
    {L"hello" L" ", true, 0, 0},
    {L"hello" L" " L"hello", true, 0, 0},
    {L"hello:hello", true, 0, 0},

    {L"ifmmp", false, 0, 5},
    {L"_ifmmp_", false, 1, 5},

    {L" " L"ifmmp", false, 1, 5},
    {L"ifmmp" L" ", false, 0, 5},
    {L"ifmmp" L" " L"ifmmp", false, 0, 5},

    {L"qwertyuiopasd", false, 0, 13},
    {L"qwertyuiopasdf", false, 0, 14},
  };

  MockSpellCheck spellchecker;
  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); ++i) {
    SCOPED_TRACE(StringPrintf("kTestCases[%" PRIuS "]", i));

    std::wstring input(kTestCases[i].input);
    int misspelling_start;
    int misspelling_length;
    bool result = spellchecker.SpellCheckWord(WideToUTF16(input),
                                              &misspelling_start,
                                              &misspelling_length);

    EXPECT_EQ(kTestCases[i].expected_result, result);
    EXPECT_EQ(kTestCases[i].misspelling_start, misspelling_start);
    EXPECT_EQ(kTestCases[i].misspelling_length, misspelling_length);
  }
}