OLD | NEW |
| (Empty) |
1 // Copyright (c) 2010 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/string_util.h" | |
6 #include "base/utf_string_conversions.h" | |
7 #include "chrome/browser/spellchecker/spellchecker_platform_engine.h" | |
8 #include "testing/gtest/include/gtest/gtest.h" | |
9 | |
10 // Tests that words are properly ignored. Currently only enabled on OS X as it | |
11 // is the only platform to support ignoring words. Note that in this test, we | |
12 // supply a non-zero doc_tag, in order to test that ignored words are matched to | |
13 // the correct document. | |
14 TEST(PlatformSpellCheckTest, IgnoreWords_EN_US) { | |
15 const char* kTestCases[] = { | |
16 "teh", | |
17 "morblier", | |
18 "watre", | |
19 "noooen", | |
20 }; | |
21 | |
22 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); ++i) { | |
23 const string16 word(ASCIIToUTF16(kTestCases[i])); | |
24 const int doc_tag = SpellCheckerPlatform::GetDocumentTag(); | |
25 | |
26 // The word should show up as misspelled. | |
27 EXPECT_FALSE(SpellCheckerPlatform::CheckSpelling(word, doc_tag)) << word; | |
28 | |
29 // Ignore the word. | |
30 SpellCheckerPlatform::IgnoreWord(word); | |
31 | |
32 // The word should now show up as correctly spelled. | |
33 EXPECT_TRUE(SpellCheckerPlatform::CheckSpelling(word, doc_tag)) << word; | |
34 | |
35 // Close the docuemnt. Any words that we had previously ignored should no | |
36 // longer be ignored and thus should show up as misspelled. | |
37 SpellCheckerPlatform::CloseDocumentWithTag(doc_tag); | |
38 | |
39 // The word should now show be spelled wrong again | |
40 EXPECT_FALSE(SpellCheckerPlatform::CheckSpelling(word, doc_tag)) << word; | |
41 } | |
42 } // Test IgnoreWords_EN_US | |
43 | |
44 TEST(PlatformSpellCheckTest, SpellCheckSuggestions_EN_US) { | |
45 static const struct { | |
46 const char* input; // A string to be tested. | |
47 const char* suggested_word; // A suggested word that should occur. | |
48 } kTestCases[] = { | |
49 // We need to have separate test cases here, since hunspell and the OS X | |
50 // spellchecking service occasionally differ on what they consider a valid | |
51 // suggestion for a given word, although these lists could likely be | |
52 // integrated somewhat. The test cases for non-Mac are in | |
53 // chrome/renderer/spellcheck_unittest.cc | |
54 // These words come from the wikipedia page of the most commonly | |
55 // misspelled words in english. | |
56 // (http://en.wikipedia.org/wiki/Commonly_misspelled_words). | |
57 // However, 10.6 loads multiple dictionaries and enables many non-English | |
58 // dictionaries by default. As a result, we have removed from the list any | |
59 // word that is marked as correct because it is correct in another | |
60 // language. | |
61 {"absense", "absence"}, | |
62 {"acceptible", "acceptable"}, | |
63 {"accidentaly", "accidentally"}, | |
64 {"acheive", "achieve"}, | |
65 {"acknowlege", "acknowledge"}, | |
66 {"acquaintence", "acquaintance"}, | |
67 {"aquire", "acquire"}, | |
68 {"aquit", "acquit"}, | |
69 {"acrage", "acreage"}, | |
70 {"adultary", "adultery"}, | |
71 {"advertize", "advertise"}, | |
72 {"adviseable", "advisable"}, | |
73 {"alchohol", "alcohol"}, | |
74 {"alege", "allege"}, | |
75 {"allegaince", "allegiance"}, | |
76 {"allmost", "almost"}, | |
77 // Ideally, this test should pass. It works in firefox, but not in hunspell | |
78 // or OS X. | |
79 // {"alot", "a lot"}, | |
80 {"amatuer", "amateur"}, | |
81 {"ammend", "amend"}, | |
82 {"amung", "among"}, | |
83 {"anually", "annually"}, | |
84 {"apparant", "apparent"}, | |
85 {"artic", "arctic"}, | |
86 {"arguement", "argument"}, | |
87 {"athiest", "atheist"}, | |
88 {"athelete", "athlete"}, | |
89 {"avrage", "average"}, | |
90 {"awfull", "awful"}, | |
91 {"ballance", "balance"}, | |
92 {"basicly", "basically"}, | |
93 {"becuase", "because"}, | |
94 {"becomeing", "becoming"}, | |
95 {"befor", "before"}, | |
96 {"begining", "beginning"}, | |
97 {"beleive", "believe"}, | |
98 {"bellweather", "bellwether"}, | |
99 {"benifit", "benefit"}, | |
100 {"bouy", "buoy"}, | |
101 {"briliant", "brilliant"}, | |
102 {"burgler", "burglar"}, | |
103 {"camoflage", "camouflage"}, | |
104 {"carefull", "careful"}, | |
105 {"Carribean", "Caribbean"}, | |
106 {"catagory", "category"}, | |
107 {"cauhgt", "caught"}, | |
108 {"cieling", "ceiling"}, | |
109 {"cemetary", "cemetery"}, | |
110 {"certin", "certain"}, | |
111 {"changable", "changeable"}, | |
112 {"cheif", "chief"}, | |
113 {"citezen", "citizen"}, | |
114 {"collaegue", "colleague"}, | |
115 {"colum", "column"}, | |
116 {"comming", "coming"}, | |
117 {"commited", "committed"}, | |
118 {"compitition", "competition"}, | |
119 {"conceed", "concede"}, | |
120 {"congradulate", "congratulate"}, | |
121 {"consciencious", "conscientious"}, | |
122 {"concious", "conscious"}, | |
123 {"concensus", "consensus"}, | |
124 {"contraversy", "controversy"}, | |
125 {"conveniance", "convenience"}, | |
126 {"critecize", "criticize"}, | |
127 {"dacquiri", "daiquiri"}, | |
128 {"decieve", "deceive"}, | |
129 {"dicide", "decide"}, | |
130 {"definate", "definite"}, | |
131 {"definitly", "definitely"}, | |
132 {"desparate", "desperate"}, | |
133 {"develope", "develop"}, | |
134 {"diffrence", "difference"}, | |
135 {"disapear", "disappear"}, | |
136 {"disapoint", "disappoint"}, | |
137 {"disasterous", "disastrous"}, | |
138 {"disipline", "discipline"}, | |
139 {"drunkeness", "drunkenness"}, | |
140 {"dumbell", "dumbbell"}, | |
141 {"easely", "easily"}, | |
142 {"eigth", "eight"}, | |
143 {"embarass", "embarrass"}, | |
144 {"enviroment", "environment"}, | |
145 {"equiped", "equipped"}, | |
146 {"equiptment", "equipment"}, | |
147 {"exagerate", "exaggerate"}, | |
148 {"exellent", "excellent"}, | |
149 {"exsept", "except"}, | |
150 {"exercize", "exercise"}, | |
151 {"exilerate", "exhilarate"}, | |
152 {"existance", "existence"}, | |
153 {"experiance", "experience"}, | |
154 {"experament", "experiment"}, | |
155 {"explaination", "explanation"}, | |
156 {"facinating", "fascinating"}, | |
157 {"firey", "fiery"}, | |
158 {"finaly", "finally"}, | |
159 {"flourescent", "fluorescent"}, | |
160 {"foriegn", "foreign"}, | |
161 {"fourty", "forty"}, | |
162 {"foreward", "forward"}, | |
163 {"freind", "friend"}, | |
164 {"fundemental", "fundamental"}, | |
165 {"guage", "gauge"}, | |
166 {"generaly", "generally"}, | |
167 {"goverment", "government"}, | |
168 {"gratefull", "grateful"}, | |
169 {"garantee", "guarantee"}, | |
170 {"guidence", "guidance"}, | |
171 {"happyness", "happiness"}, | |
172 {"harrass", "harass"}, | |
173 {"heighth", "height"}, | |
174 {"heirarchy", "hierarchy"}, | |
175 {"humerous", "humorous"}, | |
176 {"hygene", "hygiene"}, | |
177 {"hipocrit", "hypocrite"}, | |
178 {"idenity", "identity"}, | |
179 {"ignorence", "ignorance"}, | |
180 {"imaginery", "imaginary"}, | |
181 {"immitate", "imitate"}, | |
182 {"immitation", "imitation"}, | |
183 {"imediately", "immediately"}, | |
184 {"incidently", "incidentally"}, | |
185 {"independant", "independent"}, | |
186 {"indispensible", "indispensable"}, | |
187 {"innoculate", "inoculate"}, | |
188 {"inteligence", "intelligence"}, | |
189 {"intresting", "interesting"}, | |
190 {"interuption", "interruption"}, | |
191 {"irrelevent", "irrelevant"}, | |
192 {"irritible", "irritable"}, | |
193 {"jellous", "jealous"}, | |
194 {"knowlege", "knowledge"}, | |
195 {"labratory", "laboratory"}, | |
196 {"lenght", "length"}, | |
197 {"liason", "liaison"}, | |
198 {"libary", "library"}, | |
199 {"lisence", "license"}, | |
200 {"lonelyness", "loneliness"}, | |
201 {"lieing", "lying"}, | |
202 {"maintenence", "maintenance"}, | |
203 {"manuever", "maneuver"}, | |
204 {"marrige", "marriage"}, | |
205 {"mathmatics", "mathematics"}, | |
206 {"medcine", "medicine"}, | |
207 {"miniture", "miniature"}, | |
208 {"minite", "minute"}, | |
209 {"mischevous", "mischievous"}, | |
210 {"mispell", "misspell"}, | |
211 // Maybe this one should pass, as it works in hunspell, but not in firefox. | |
212 // {"misterius", "mysterious"}, | |
213 {"naturaly", "naturally"}, | |
214 {"neccessary", "necessary"}, | |
215 {"neice", "niece"}, | |
216 {"nieghbor", "neighbor"}, | |
217 {"nieghbour", "neighbor"}, | |
218 {"niether", "neither"}, | |
219 {"noticable", "noticeable"}, | |
220 {"occassion", "occasion"}, | |
221 {"occasionaly", "occasionally"}, | |
222 {"occurrance", "occurrence"}, | |
223 {"occured", "occurred"}, | |
224 {"ommision", "omission"}, | |
225 {"oppurtunity", "opportunity"}, | |
226 {"outragous", "outrageous"}, | |
227 {"parrallel", "parallel"}, | |
228 {"parliment", "parliament"}, | |
229 {"particurly", "particularly"}, | |
230 {"passtime", "pastime"}, | |
231 {"peculier", "peculiar"}, | |
232 {"percieve", "perceive"}, | |
233 {"pernament", "permanent"}, | |
234 {"perseverence", "perseverance"}, | |
235 {"personaly", "personally"}, | |
236 {"persaude", "persuade"}, | |
237 {"pichure", "picture"}, | |
238 {"peice", "piece"}, | |
239 {"plagerize", "plagiarize"}, | |
240 {"playright", "playwright"}, | |
241 {"plesant", "pleasant"}, | |
242 {"pollitical", "political"}, | |
243 {"posession", "possession"}, | |
244 {"potatos", "potatoes"}, | |
245 {"practicle", "practical"}, | |
246 {"preceed", "precede"}, | |
247 {"predjudice", "prejudice"}, | |
248 {"presance", "presence"}, | |
249 {"privelege", "privilege"}, | |
250 // This one should probably work. It does in FF and Hunspell. | |
251 // {"probly", "probably"}, | |
252 {"proffesional", "professional"}, | |
253 {"promiss", "promise"}, | |
254 {"pronounciation", "pronunciation"}, | |
255 {"prufe", "proof"}, | |
256 {"psycology", "psychology"}, | |
257 {"publically", "publicly"}, | |
258 {"quanity", "quantity"}, | |
259 {"quarentine", "quarantine"}, | |
260 {"questionaire", "questionnaire"}, | |
261 {"readible", "readable"}, | |
262 {"realy", "really"}, | |
263 {"recieve", "receive"}, | |
264 {"reciept", "receipt"}, | |
265 {"reconize", "recognize"}, | |
266 {"recomend", "recommend"}, | |
267 {"refered", "referred"}, | |
268 {"referance", "reference"}, | |
269 {"relevent", "relevant"}, | |
270 {"religous", "religious"}, | |
271 {"repitition", "repetition"}, | |
272 {"restarant", "restaurant"}, | |
273 {"rythm", "rhythm"}, | |
274 {"rediculous", "ridiculous"}, | |
275 {"sacrefice", "sacrifice"}, | |
276 {"saftey", "safety"}, | |
277 {"sissors", "scissors"}, | |
278 {"secratary", "secretary"}, | |
279 {"seperate", "separate"}, | |
280 {"sargent", "sergeant"}, | |
281 {"shineing", "shining"}, | |
282 {"similer", "similar"}, | |
283 {"sinceerly", "sincerely"}, | |
284 {"speach", "speech"}, | |
285 {"strenght", "strength"}, | |
286 {"succesful", "successful"}, | |
287 {"supercede", "supersede"}, | |
288 {"surelly", "surely"}, | |
289 {"suprise", "surprise"}, | |
290 {"temperture", "temperature"}, | |
291 {"temprary", "temporary"}, | |
292 {"tommorrow", "tomorrow"}, | |
293 {"tounge", "tongue"}, | |
294 {"truely", "truly"}, | |
295 {"twelth", "twelfth"}, | |
296 {"tyrany", "tyranny"}, | |
297 {"underate", "underrate"}, | |
298 {"untill", "until"}, | |
299 {"unuseual", "unusual"}, | |
300 {"upholstry", "upholstery"}, | |
301 {"usible", "usable"}, | |
302 {"useing", "using"}, | |
303 {"usualy", "usually"}, | |
304 {"vaccuum", "vacuum"}, | |
305 {"vegatarian", "vegetarian"}, | |
306 {"vehical", "vehicle"}, | |
307 {"visious", "vicious"}, | |
308 {"villege", "village"}, | |
309 {"wierd", "weird"}, | |
310 {"wellcome", "welcome"}, | |
311 {"wellfare", "welfare"}, | |
312 {"wilfull", "willful"}, | |
313 {"withold", "withhold"}, | |
314 {"writting", "writing"}, | |
315 }; | |
316 | |
317 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); ++i) { | |
318 const string16 word(ASCIIToUTF16(kTestCases[i].input)); | |
319 EXPECT_FALSE(SpellCheckerPlatform::CheckSpelling(word, 0)) << word; | |
320 | |
321 // Check if the suggested words occur. | |
322 std::vector<string16> suggestions; | |
323 SpellCheckerPlatform::FillSuggestionList(word, &suggestions); | |
324 bool suggested_word_is_present = false; | |
325 const string16 suggested_word(ASCIIToUTF16(kTestCases[i].suggested_word)); | |
326 for (size_t j = 0; j < suggestions.size(); j++) { | |
327 if (suggestions[j].compare(suggested_word) == 0) { | |
328 suggested_word_is_present = true; | |
329 break; | |
330 } | |
331 } | |
332 EXPECT_TRUE(suggested_word_is_present) << suggested_word; | |
333 } | |
334 } | |
OLD | NEW |