summaryrefslogtreecommitdiffstats
path: root/chrome/browser/spellchecker_platform_engine_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/spellchecker_platform_engine_unittest.cc')
-rw-r--r--chrome/browser/spellchecker_platform_engine_unittest.cc333
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;
+ }
+}