Index: chrome/browser/spellchecker_platform_engine_unittest.cc |
=================================================================== |
--- chrome/browser/spellchecker_platform_engine_unittest.cc (revision 0) |
+++ chrome/browser/spellchecker_platform_engine_unittest.cc (revision 0) |
@@ -0,0 +1,393 @@ |
+// Copyright (c) 2009 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" |
+ |
+#if defined(OS_MACOSX) |
+#define MAYBE_IgnoreWords_EN_US IgnoreWords_EN_US |
+#else |
+#define MAYBE_IgnoreWords_EN_US DISABLED_IgnoreWords_EN_US |
+#endif |
+ |
+// 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, MAYBE_IgnoreWords_EN_US) { |
+ static const struct { |
+ // A misspelled word. |
+ const char* input; |
+ bool input_result; |
+ } kTestCases[] = { |
+ {"teh"}, |
+ {"moer"}, |
+ {"watre"}, |
+ {"noen"}, |
+ }; |
+ |
+ for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); ++i) { |
+ string16 word(UTF8ToUTF16(kTestCases[i].input)); |
+ std::vector<string16> suggestions; |
+ size_t input_length = 0; |
+ if (kTestCases[i].input != NULL) { |
+ input_length = word.length(); |
+ } |
+ |
+ int doc_tag = SpellCheckerPlatform::GetDocumentTag(); |
+ bool result = SpellCheckerPlatform::CheckSpelling(word, doc_tag); |
+ |
+ // The word should show up as misspelled. |
+ EXPECT_EQ(kTestCases[i].input_result, result); |
+ |
+ // Ignore the word. |
+ SpellCheckerPlatform::IgnoreWord(word); |
+ |
+ // Spellcheck again. |
+ result = SpellCheckerPlatform::CheckSpelling(word, doc_tag); |
+ |
+ // The word should now show up as correctly spelled. |
+ EXPECT_EQ(!(kTestCases[i].input_result), result); |
+ |
+ // 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); |
+ |
+ // Spellcheck one more time. |
+ result = SpellCheckerPlatform::CheckSpelling(word, doc_tag); |
+ |
+ // The word should now show be spelled wrong again |
+ EXPECT_EQ(kTestCases[i].input_result, result); |
+ } |
+} // Test IgnoreWords_EN_US |
+ |
+#if defined(OS_MACOSX) |
+TEST(PlatformSpellCheckTest, SpellCheckSuggestions_EN_US) { |
+ static const struct { |
+ // A string to be tested. |
+ const wchar_t* input; |
+ |
+ // A suggested word that should occur. |
+ const wchar_t* suggested_word; |
+ } kTestCases[] = { // A valid English word with a preceding whitespace |
+ // 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). |
+ {L"absense", L"absence"}, |
+ {L"acceptible", L"acceptable"}, |
+ {L"accidentaly", L"accidentally"}, |
+ {L"accomodate", L"accommodate"}, |
+ {L"acheive", L"achieve"}, |
+ {L"acknowlege", L"acknowledge"}, |
+ {L"acquaintence", L"acquaintance"}, |
+ {L"aquire", L"acquire"}, |
+ {L"aquit", L"acquit"}, |
+ {L"acrage", L"acreage"}, |
+ {L"adress", L"address"}, |
+ {L"adultary", L"adultery"}, |
+ {L"advertize", L"advertise"}, |
+ {L"adviseable", L"advisable"}, |
+ {L"agression", L"aggression"}, |
+ {L"alchohol", L"alcohol"}, |
+ {L"alege", L"allege"}, |
+ {L"allegaince", L"allegiance"}, |
+ {L"allmost", L"almost"}, |
+ // Ideally, this test should pass. It works in firefox, but not in hunspell |
+ // or OS X. |
+ // {L"alot", L"a lot"}, |
+ {L"amatuer", L"amateur"}, |
+ {L"ammend", L"amend"}, |
+ {L"amung", L"among"}, |
+ {L"anually", L"annually"}, |
+ {L"apparant", L"apparent"}, |
+ {L"artic", L"arctic"}, |
+ {L"arguement", L"argument"}, |
+ {L"athiest", L"atheist"}, |
+ {L"athelete", L"athlete"}, |
+ {L"avrage", L"average"}, |
+ {L"awfull", L"awful"}, |
+ {L"ballance", L"balance"}, |
+ {L"basicly", L"basically"}, |
+ {L"becuase", L"because"}, |
+ {L"becomeing", L"becoming"}, |
+ {L"befor", L"before"}, |
+ {L"begining", L"beginning"}, |
+ {L"beleive", L"believe"}, |
+ {L"bellweather", L"bellwether"}, |
+ {L"benifit", L"benefit"}, |
+ {L"bouy", L"buoy"}, |
+ {L"briliant", L"brilliant"}, |
+ {L"burgler", L"burglar"}, |
+ {L"camoflage", L"camouflage"}, |
+ {L"carrer", L"career"}, |
+ {L"carefull", L"careful"}, |
+ {L"Carribean", L"Caribbean"}, |
+ {L"catagory", L"category"}, |
+ {L"cauhgt", L"caught"}, |
+ {L"cieling", L"ceiling"}, |
+ {L"cemetary", L"cemetery"}, |
+ {L"certin", L"certain"}, |
+ {L"changable", L"changeable"}, |
+ {L"cheif", L"chief"}, |
+ {L"citezen", L"citizen"}, |
+ {L"collaegue", L"colleague"}, |
+ {L"colum", L"column"}, |
+ {L"comming", L"coming"}, |
+ {L"commited", L"committed"}, |
+ {L"compitition", L"competition"}, |
+ {L"conceed", L"concede"}, |
+ {L"congradulate", L"congratulate"}, |
+ {L"consciencious", L"conscientious"}, |
+ {L"concious", L"conscious"}, |
+ {L"concensus", L"consensus"}, |
+ {L"contraversy", L"controversy"}, |
+ {L"conveniance", L"convenience"}, |
+ {L"critecize", L"criticize"}, |
+ {L"dacquiri", L"daiquiri"}, |
+ {L"decieve", L"deceive"}, |
+ {L"dicide", L"decide"}, |
+ {L"definate", L"definite"}, |
+ {L"definitly", L"definitely"}, |
+ {L"deposite", L"deposit"}, |
+ {L"desparate", L"desperate"}, |
+ {L"develope", L"develop"}, |
+ {L"diffrence", L"difference"}, |
+ {L"dilema", L"dilemma"}, |
+ {L"disapear", L"disappear"}, |
+ {L"disapoint", L"disappoint"}, |
+ {L"disasterous", L"disastrous"}, |
+ {L"disipline", L"discipline"}, |
+ {L"drunkeness", L"drunkenness"}, |
+ {L"dumbell", L"dumbbell"}, |
+ {L"durring", L"during"}, |
+ {L"easely", L"easily"}, |
+ {L"eigth", L"eight"}, |
+ {L"embarass", L"embarrass"}, |
+ {L"enviroment", L"environment"}, |
+ {L"equiped", L"equipped"}, |
+ {L"equiptment", L"equipment"}, |
+ {L"exagerate", L"exaggerate"}, |
+ {L"excede", L"exceed"}, |
+ {L"exellent", L"excellent"}, |
+ {L"exsept", L"except"}, |
+ {L"exercize", L"exercise"}, |
+ {L"exilerate", L"exhilarate"}, |
+ {L"existance", L"existence"}, |
+ {L"experiance", L"experience"}, |
+ {L"experament", L"experiment"}, |
+ {L"explaination", L"explanation"}, |
+ {L"extreem", L"extreme"}, |
+ {L"familier", L"familiar"}, |
+ {L"facinating", L"fascinating"}, |
+ {L"firey", L"fiery"}, |
+ {L"finaly", L"finally"}, |
+ {L"flourescent", L"fluorescent"}, |
+ {L"foriegn", L"foreign"}, |
+ {L"fourty", L"forty"}, |
+ {L"foreward", L"forward"}, |
+ {L"freind", L"friend"}, |
+ {L"fullfil", L"fulfill"}, |
+ {L"fundemental", L"fundamental"}, |
+ {L"guage", L"gauge"}, |
+ {L"generaly", L"generally"}, |
+ {L"goverment", L"government"}, |
+ {L"grammer", L"grammar"}, |
+ {L"gratefull", L"grateful"}, |
+ {L"garantee", L"guarantee"}, |
+ {L"guidence", L"guidance"}, |
+ {L"happyness", L"happiness"}, |
+ {L"harrass", L"harass"}, |
+ {L"heighth", L"height"}, |
+ {L"heirarchy", L"hierarchy"}, |
+ {L"humerous", L"humorous"}, |
+ {L"hygene", L"hygiene"}, |
+ {L"hipocrit", L"hypocrite"}, |
+ {L"idenity", L"identity"}, |
+ {L"ignorence", L"ignorance"}, |
+ {L"imaginery", L"imaginary"}, |
+ {L"immitate", L"imitate"}, |
+ {L"immitation", L"imitation"}, |
+ {L"imediately", L"immediately"}, |
+ {L"incidently", L"incidentally"}, |
+ {L"independant", L"independent"}, |
+ {L"indispensible", L"indispensable"}, |
+ {L"innoculate", L"inoculate"}, |
+ {L"inteligence", L"intelligence"}, |
+ {L"intresting", L"interesting"}, |
+ {L"interuption", L"interruption"}, |
+ {L"irrelevent", L"irrelevant"}, |
+ {L"irritible", L"irritable"}, |
+ {L"iland", L"island"}, |
+ {L"jellous", L"jealous"}, |
+ {L"knowlege", L"knowledge"}, |
+ {L"labratory", L"laboratory"}, |
+ {L"liesure", L"leisure"}, |
+ {L"lenght", L"length"}, |
+ {L"liason", L"liaison"}, |
+ {L"libary", L"library"}, |
+ {L"lisence", L"license"}, |
+ {L"lonelyness", L"loneliness"}, |
+ {L"lieing", L"lying"}, |
+ {L"maintenence", L"maintenance"}, |
+ {L"manuever", L"maneuver"}, |
+ {L"marrige", L"marriage"}, |
+ {L"mathmatics", L"mathematics"}, |
+ {L"medcine", L"medicine"}, |
+ {L"medeval", L"medieval"}, |
+ {L"momento", L"memento"}, |
+ {L"millenium", L"millennium"}, |
+ {L"miniture", L"miniature"}, |
+ {L"minite", L"minute"}, |
+ {L"mischevous", L"mischievous"}, |
+ {L"mispell", L"misspell"}, |
+ // Maybe this one should pass, as it works in hunspell, but not in firefox. |
+ // {L"misterius", L"mysterious"}, |
+ {L"naturaly", L"naturally"}, |
+ {L"neccessary", L"necessary"}, |
+ {L"neice", L"niece"}, |
+ {L"nieghbor", L"neighbor"}, |
+ {L"nieghbour", L"neighbor"}, |
+ {L"niether", L"neither"}, |
+ {L"noticable", L"noticeable"}, |
+ {L"occassion", L"occasion"}, |
+ {L"occasionaly", L"occasionally"}, |
+ {L"occurrance", L"occurrence"}, |
+ {L"occured", L"occurred"}, |
+ {L"oficial", L"official"}, |
+ {L"offen", L"often"}, |
+ {L"ommision", L"omission"}, |
+ {L"oprate", L"operate"}, |
+ {L"oppurtunity", L"opportunity"}, |
+ {L"orignal", L"original"}, |
+ {L"outragous", L"outrageous"}, |
+ {L"parrallel", L"parallel"}, |
+ {L"parliment", L"parliament"}, |
+ {L"particurly", L"particularly"}, |
+ {L"passtime", L"pastime"}, |
+ {L"peculier", L"peculiar"}, |
+ {L"percieve", L"perceive"}, |
+ {L"pernament", L"permanent"}, |
+ {L"perseverence", L"perseverance"}, |
+ {L"personaly", L"personally"}, |
+ {L"personell", L"personnel"}, |
+ {L"persaude", L"persuade"}, |
+ {L"pichure", L"picture"}, |
+ {L"peice", L"piece"}, |
+ {L"plagerize", L"plagiarize"}, |
+ {L"playright", L"playwright"}, |
+ {L"plesant", L"pleasant"}, |
+ {L"pollitical", L"political"}, |
+ {L"posession", L"possession"}, |
+ {L"potatos", L"potatoes"}, |
+ {L"practicle", L"practical"}, |
+ {L"preceed", L"precede"}, |
+ {L"predjudice", L"prejudice"}, |
+ {L"presance", L"presence"}, |
+ {L"privelege", L"privilege"}, |
+ // This one should probably work. It does in FF and Hunspell. |
+ // {L"probly", L"probably"}, |
+ {L"proffesional", L"professional"}, |
+ {L"professer", L"professor"}, |
+ {L"promiss", L"promise"}, |
+ {L"pronounciation", L"pronunciation"}, |
+ {L"prufe", L"proof"}, |
+ {L"psycology", L"psychology"}, |
+ {L"publically", L"publicly"}, |
+ {L"quanity", L"quantity"}, |
+ {L"quarentine", L"quarantine"}, |
+ {L"questionaire", L"questionnaire"}, |
+ {L"readible", L"readable"}, |
+ {L"realy", L"really"}, |
+ {L"recieve", L"receive"}, |
+ {L"reciept", L"receipt"}, |
+ {L"reconize", L"recognize"}, |
+ {L"recomend", L"recommend"}, |
+ {L"refered", L"referred"}, |
+ {L"referance", L"reference"}, |
+ {L"relevent", L"relevant"}, |
+ {L"religous", L"religious"}, |
+ {L"repitition", L"repetition"}, |
+ {L"restarant", L"restaurant"}, |
+ {L"rythm", L"rhythm"}, |
+ {L"rediculous", L"ridiculous"}, |
+ {L"sacrefice", L"sacrifice"}, |
+ {L"saftey", L"safety"}, |
+ {L"sissors", L"scissors"}, |
+ {L"secratary", L"secretary"}, |
+ {L"sieze", L"seize"}, |
+ {L"seperate", L"separate"}, |
+ {L"sargent", L"sergeant"}, |
+ {L"shineing", L"shining"}, |
+ {L"similer", L"similar"}, |
+ {L"sinceerly", L"sincerely"}, |
+ {L"speach", L"speech"}, |
+ {L"stoping", L"stopping"}, |
+ {L"strenght", L"strength"}, |
+ {L"succede", L"succeed"}, |
+ {L"succesful", L"successful"}, |
+ {L"supercede", L"supersede"}, |
+ {L"surelly", L"surely"}, |
+ {L"suprise", L"surprise"}, |
+ {L"temperture", L"temperature"}, |
+ {L"temprary", L"temporary"}, |
+ {L"tomatos", L"tomatoes"}, |
+ {L"tommorrow", L"tomorrow"}, |
+ {L"tounge", L"tongue"}, |
+ {L"truely", L"truly"}, |
+ {L"twelth", L"twelfth"}, |
+ {L"tyrany", L"tyranny"}, |
+ {L"underate", L"underrate"}, |
+ {L"untill", L"until"}, |
+ {L"unuseual", L"unusual"}, |
+ {L"upholstry", L"upholstery"}, |
+ {L"usible", L"usable"}, |
+ {L"useing", L"using"}, |
+ {L"usualy", L"usually"}, |
+ {L"vaccuum", L"vacuum"}, |
+ {L"vegatarian", L"vegetarian"}, |
+ {L"vehical", L"vehicle"}, |
+ {L"visious", L"vicious"}, |
+ {L"villege", L"village"}, |
+ {L"wierd", L"weird"}, |
+ {L"wellcome", L"welcome"}, |
+ {L"wellfare", L"welfare"}, |
+ {L"wilfull", L"willful"}, |
+ {L"withold", L"withhold"}, |
+ {L"writting", L"writing"}, |
+ }; |
+ |
+ for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); ++i) { |
+ std::vector<string16> suggestions; |
+ size_t input_length = 0; |
+ if (kTestCases[i].input != NULL) { |
+ input_length = wcslen(kTestCases[i].input); |
+ } |
+ bool result = SpellCheckerPlatform::CheckSpelling( |
+ WideToUTF16(kTestCases[i].input), 0); |
+ EXPECT_FALSE(result); |
+ |
+ SpellCheckerPlatform::FillSuggestionList(WideToUTF16(kTestCases[i].input), |
+ &suggestions); |
+ |
+ // Check if the suggested words occur. |
+ bool suggested_word_is_present = false; |
+ for (int j=0; j < static_cast<int>(suggestions.size()); j++) { |
+ if (suggestions.at(j).compare(WideToUTF16(kTestCases[i].suggested_word)) |
+ == 0) { |
+ suggested_word_is_present = true; |
+ break; |
+ } |
+ } |
+ |
+ EXPECT_TRUE(suggested_word_is_present); |
+ } |
+} |
+ |
+#endif // defined(OS_MACOSX) |
Property changes on: chrome/browser/spellchecker_platform_engine_unittest.cc |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |