| 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 |