Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4704)

Unified Diff: chrome/browser/spellchecker_platform_engine_unittest.cc

Issue 395007: Move Mac to using renderer spellchecker. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: ui test fix Created 11 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/spellchecker_platform_engine.h ('k') | chrome/browser/spellchecker_win.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « chrome/browser/spellchecker_platform_engine.h ('k') | chrome/browser/spellchecker_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698