diff options
Diffstat (limited to 'chrome/browser/spellchecker_platform_engine_unittest.cc')
-rw-r--r-- | chrome/browser/spellchecker_platform_engine_unittest.cc | 333 |
1 files changed, 333 insertions, 0 deletions
diff --git a/chrome/browser/spellchecker_platform_engine_unittest.cc b/chrome/browser/spellchecker_platform_engine_unittest.cc new file mode 100644 index 0000000..a63bf67 --- /dev/null +++ b/chrome/browser/spellchecker_platform_engine_unittest.cc @@ -0,0 +1,333 @@ +// 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/string_util.h" +#include "chrome/browser/spellchecker_platform_engine.h" +#include "testing/gtest/include/gtest/gtest.h" + +// Tests that words are properly ignored. Currently only enabled on OS X as it +// is the only platform to support ignoring words. Note that in this test, we +// supply a non-zero doc_tag, in order to test that ignored words are matched to +// the correct document. +TEST(PlatformSpellCheckTest, IgnoreWords_EN_US) { + const char* kTestCases[] = { + "teh", + "morblier", + "watre", + "noooen", + }; + + for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); ++i) { + const string16 word(ASCIIToUTF16(kTestCases[i])); + const int doc_tag = SpellCheckerPlatform::GetDocumentTag(); + + // The word should show up as misspelled. + EXPECT_FALSE(SpellCheckerPlatform::CheckSpelling(word, doc_tag)) << word; + + // Ignore the word. + SpellCheckerPlatform::IgnoreWord(word); + + // The word should now show up as correctly spelled. + EXPECT_TRUE(SpellCheckerPlatform::CheckSpelling(word, doc_tag)) << word; + + // Close the docuemnt. Any words that we had previously ignored should no + // longer be ignored and thus should show up as misspelled. + SpellCheckerPlatform::CloseDocumentWithTag(doc_tag); + + // The word should now show be spelled wrong again + EXPECT_FALSE(SpellCheckerPlatform::CheckSpelling(word, doc_tag)) << word; + } +} // Test IgnoreWords_EN_US + +TEST(PlatformSpellCheckTest, SpellCheckSuggestions_EN_US) { + static const struct { + const char* input; // A string to be tested. + const char* suggested_word; // A suggested word that should occur. + } kTestCases[] = { + // We need to have separate test cases here, since hunspell and the OS X + // spellchecking service occasionally differ on what they consider a valid + // suggestion for a given word, although these lists could likely be + // integrated somewhat. The test cases for non-Mac are in + // chrome/renderer/spellcheck_unittest.cc + // These words come from the wikipedia page of the most commonly + // misspelled words in english. + // (http://en.wikipedia.org/wiki/Commonly_misspelled_words). + // However, 10.6 loads multiple dictionaries and enables many non-English + // dictionaries by default. As a result, we have removed from the list any + // word that is marked as correct because it is correct in another + // language. + {"absense", "absence"}, + {"acceptible", "acceptable"}, + {"accidentaly", "accidentally"}, + {"acheive", "achieve"}, + {"acknowlege", "acknowledge"}, + {"acquaintence", "acquaintance"}, + {"aquire", "acquire"}, + {"aquit", "acquit"}, + {"acrage", "acreage"}, + {"adultary", "adultery"}, + {"advertize", "advertise"}, + {"adviseable", "advisable"}, + {"alchohol", "alcohol"}, + {"alege", "allege"}, + {"allegaince", "allegiance"}, + {"allmost", "almost"}, + // Ideally, this test should pass. It works in firefox, but not in hunspell + // or OS X. + // {"alot", "a lot"}, + {"amatuer", "amateur"}, + {"ammend", "amend"}, + {"amung", "among"}, + {"anually", "annually"}, + {"apparant", "apparent"}, + {"artic", "arctic"}, + {"arguement", "argument"}, + {"athiest", "atheist"}, + {"athelete", "athlete"}, + {"avrage", "average"}, + {"awfull", "awful"}, + {"ballance", "balance"}, + {"basicly", "basically"}, + {"becuase", "because"}, + {"becomeing", "becoming"}, + {"befor", "before"}, + {"begining", "beginning"}, + {"beleive", "believe"}, + {"bellweather", "bellwether"}, + {"benifit", "benefit"}, + {"bouy", "buoy"}, + {"briliant", "brilliant"}, + {"burgler", "burglar"}, + {"camoflage", "camouflage"}, + {"carefull", "careful"}, + {"Carribean", "Caribbean"}, + {"catagory", "category"}, + {"cauhgt", "caught"}, + {"cieling", "ceiling"}, + {"cemetary", "cemetery"}, + {"certin", "certain"}, + {"changable", "changeable"}, + {"cheif", "chief"}, + {"citezen", "citizen"}, + {"collaegue", "colleague"}, + {"colum", "column"}, + {"comming", "coming"}, + {"commited", "committed"}, + {"compitition", "competition"}, + {"conceed", "concede"}, + {"congradulate", "congratulate"}, + {"consciencious", "conscientious"}, + {"concious", "conscious"}, + {"concensus", "consensus"}, + {"contraversy", "controversy"}, + {"conveniance", "convenience"}, + {"critecize", "criticize"}, + {"dacquiri", "daiquiri"}, + {"decieve", "deceive"}, + {"dicide", "decide"}, + {"definate", "definite"}, + {"definitly", "definitely"}, + {"desparate", "desperate"}, + {"develope", "develop"}, + {"diffrence", "difference"}, + {"disapear", "disappear"}, + {"disapoint", "disappoint"}, + {"disasterous", "disastrous"}, + {"disipline", "discipline"}, + {"drunkeness", "drunkenness"}, + {"dumbell", "dumbbell"}, + {"easely", "easily"}, + {"eigth", "eight"}, + {"embarass", "embarrass"}, + {"enviroment", "environment"}, + {"equiped", "equipped"}, + {"equiptment", "equipment"}, + {"exagerate", "exaggerate"}, + {"exellent", "excellent"}, + {"exsept", "except"}, + {"exercize", "exercise"}, + {"exilerate", "exhilarate"}, + {"existance", "existence"}, + {"experiance", "experience"}, + {"experament", "experiment"}, + {"explaination", "explanation"}, + {"facinating", "fascinating"}, + {"firey", "fiery"}, + {"finaly", "finally"}, + {"flourescent", "fluorescent"}, + {"foriegn", "foreign"}, + {"fourty", "forty"}, + {"foreward", "forward"}, + {"freind", "friend"}, + {"fundemental", "fundamental"}, + {"guage", "gauge"}, + {"generaly", "generally"}, + {"goverment", "government"}, + {"gratefull", "grateful"}, + {"garantee", "guarantee"}, + {"guidence", "guidance"}, + {"happyness", "happiness"}, + {"harrass", "harass"}, + {"heighth", "height"}, + {"heirarchy", "hierarchy"}, + {"humerous", "humorous"}, + {"hygene", "hygiene"}, + {"hipocrit", "hypocrite"}, + {"idenity", "identity"}, + {"ignorence", "ignorance"}, + {"imaginery", "imaginary"}, + {"immitate", "imitate"}, + {"immitation", "imitation"}, + {"imediately", "immediately"}, + {"incidently", "incidentally"}, + {"independant", "independent"}, + {"indispensible", "indispensable"}, + {"innoculate", "inoculate"}, + {"inteligence", "intelligence"}, + {"intresting", "interesting"}, + {"interuption", "interruption"}, + {"irrelevent", "irrelevant"}, + {"irritible", "irritable"}, + {"jellous", "jealous"}, + {"knowlege", "knowledge"}, + {"labratory", "laboratory"}, + {"lenght", "length"}, + {"liason", "liaison"}, + {"libary", "library"}, + {"lisence", "license"}, + {"lonelyness", "loneliness"}, + {"lieing", "lying"}, + {"maintenence", "maintenance"}, + {"manuever", "maneuver"}, + {"marrige", "marriage"}, + {"mathmatics", "mathematics"}, + {"medcine", "medicine"}, + {"miniture", "miniature"}, + {"minite", "minute"}, + {"mischevous", "mischievous"}, + {"mispell", "misspell"}, + // Maybe this one should pass, as it works in hunspell, but not in firefox. + // {"misterius", "mysterious"}, + {"naturaly", "naturally"}, + {"neccessary", "necessary"}, + {"neice", "niece"}, + {"nieghbor", "neighbor"}, + {"nieghbour", "neighbor"}, + {"niether", "neither"}, + {"noticable", "noticeable"}, + {"occassion", "occasion"}, + {"occasionaly", "occasionally"}, + {"occurrance", "occurrence"}, + {"occured", "occurred"}, + {"ommision", "omission"}, + {"oppurtunity", "opportunity"}, + {"outragous", "outrageous"}, + {"parrallel", "parallel"}, + {"parliment", "parliament"}, + {"particurly", "particularly"}, + {"passtime", "pastime"}, + {"peculier", "peculiar"}, + {"percieve", "perceive"}, + {"pernament", "permanent"}, + {"perseverence", "perseverance"}, + {"personaly", "personally"}, + {"persaude", "persuade"}, + {"pichure", "picture"}, + {"peice", "piece"}, + {"plagerize", "plagiarize"}, + {"playright", "playwright"}, + {"plesant", "pleasant"}, + {"pollitical", "political"}, + {"posession", "possession"}, + {"potatos", "potatoes"}, + {"practicle", "practical"}, + {"preceed", "precede"}, + {"predjudice", "prejudice"}, + {"presance", "presence"}, + {"privelege", "privilege"}, + // This one should probably work. It does in FF and Hunspell. + // {"probly", "probably"}, + {"proffesional", "professional"}, + {"promiss", "promise"}, + {"pronounciation", "pronunciation"}, + {"prufe", "proof"}, + {"psycology", "psychology"}, + {"publically", "publicly"}, + {"quanity", "quantity"}, + {"quarentine", "quarantine"}, + {"questionaire", "questionnaire"}, + {"readible", "readable"}, + {"realy", "really"}, + {"recieve", "receive"}, + {"reciept", "receipt"}, + {"reconize", "recognize"}, + {"recomend", "recommend"}, + {"refered", "referred"}, + {"referance", "reference"}, + {"relevent", "relevant"}, + {"religous", "religious"}, + {"repitition", "repetition"}, + {"restarant", "restaurant"}, + {"rythm", "rhythm"}, + {"rediculous", "ridiculous"}, + {"sacrefice", "sacrifice"}, + {"saftey", "safety"}, + {"sissors", "scissors"}, + {"secratary", "secretary"}, + {"seperate", "separate"}, + {"sargent", "sergeant"}, + {"shineing", "shining"}, + {"similer", "similar"}, + {"sinceerly", "sincerely"}, + {"speach", "speech"}, + {"strenght", "strength"}, + {"succesful", "successful"}, + {"supercede", "supersede"}, + {"surelly", "surely"}, + {"suprise", "surprise"}, + {"temperture", "temperature"}, + {"temprary", "temporary"}, + {"tommorrow", "tomorrow"}, + {"tounge", "tongue"}, + {"truely", "truly"}, + {"twelth", "twelfth"}, + {"tyrany", "tyranny"}, + {"underate", "underrate"}, + {"untill", "until"}, + {"unuseual", "unusual"}, + {"upholstry", "upholstery"}, + {"usible", "usable"}, + {"useing", "using"}, + {"usualy", "usually"}, + {"vaccuum", "vacuum"}, + {"vegatarian", "vegetarian"}, + {"vehical", "vehicle"}, + {"visious", "vicious"}, + {"villege", "village"}, + {"wierd", "weird"}, + {"wellcome", "welcome"}, + {"wellfare", "welfare"}, + {"wilfull", "willful"}, + {"withold", "withhold"}, + {"writting", "writing"}, + }; + + for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); ++i) { + const string16 word(ASCIIToUTF16(kTestCases[i].input)); + EXPECT_FALSE(SpellCheckerPlatform::CheckSpelling(word, 0)) << word; + + // Check if the suggested words occur. + std::vector<string16> suggestions; + SpellCheckerPlatform::FillSuggestionList(word, &suggestions); + bool suggested_word_is_present = false; + const string16 suggested_word(ASCIIToUTF16(kTestCases[i].suggested_word)); + for (size_t j = 0; j < suggestions.size(); j++) { + if (suggestions[j].compare(suggested_word) == 0) { + suggested_word_is_present = true; + break; + } + } + EXPECT_TRUE(suggested_word_is_present) << suggested_word; + } +} |