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

Side by Side Diff: chrome/browser/spellcheck_unittest.cc

Issue 342068: Third patch in getting rid of caching MessageLoop pointers and always using C... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/safe_browsing/safe_browsing_service.cc ('k') | chrome/browser/spellchecker.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "webkit/glue/webkit_glue.h" 5 #include "webkit/glue/webkit_glue.h"
6 6
7 #include "base/file_util.h" 7 #include "base/file_util.h"
8 #include "base/message_loop.h" 8 #include "base/message_loop.h"
9 #include "base/path_service.h" 9 #include "base/path_service.h"
10 #include "base/sys_string_conversions.h" 10 #include "base/sys_string_conversions.h"
11 #include "chrome/browser/chrome_thread.h"
11 #include "chrome/browser/spellchecker.h" 12 #include "chrome/browser/spellchecker.h"
12 #include "chrome/browser/spellchecker_platform_engine.h" 13 #include "chrome/browser/spellchecker_platform_engine.h"
13 #include "chrome/common/chrome_paths.h" 14 #include "chrome/common/chrome_paths.h"
14 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
15 16
16 namespace { 17 namespace {
17 const FilePath::CharType kTempCustomDictionaryFile[] = 18 const FilePath::CharType kTempCustomDictionaryFile[] =
18 FILE_PATH_LITERAL("temp_custom_dictionary.txt"); 19 FILE_PATH_LITERAL("temp_custom_dictionary.txt");
19 } // namespace 20 } // namespace
20 21
21 class SpellCheckTest : public testing::Test { 22 class SpellCheckTest : public testing::Test {
23 public:
24 SpellCheckTest()
25 : file_thread_(ChromeThread::FILE, &message_loop_),
26 io_thread_(ChromeThread::IO, &message_loop_) {}
27
28 protected:
29 MessageLoop message_loop_;
30
22 private: 31 private:
23 MessageLoop message_loop_; 32 ChromeThread file_thread_;
33 ChromeThread io_thread_; // To keep DCHECKs inside spell checker happy.
24 }; 34 };
25 35
26 // Represents a special initialization function used only for the unit tests 36 // Represents a special initialization function used only for the unit tests
27 // in this file. 37 // in this file.
28 extern void InitHunspellWithFiles(FILE* file_aff_hunspell, 38 extern void InitHunspellWithFiles(FILE* file_aff_hunspell,
29 FILE* file_dic_hunspell); 39 FILE* file_dic_hunspell);
30 40
31 FilePath GetHunspellDirectory() { 41 FilePath GetHunspellDirectory() {
32 FilePath hunspell_directory; 42 FilePath hunspell_directory;
33 if (!PathService::Get(base::DIR_SOURCE_ROOT, &hunspell_directory)) 43 if (!PathService::Get(base::DIR_SOURCE_ROOT, &hunspell_directory))
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 // spellcheck" <http://crbug.com/13432>. 274 // spellcheck" <http://crbug.com/13432>.
265 {L"qwertyuiopasd", false, 0, 13}, 275 {L"qwertyuiopasd", false, 0, 13},
266 {L"qwertyuiopasdf", false, 0, 14}, 276 {L"qwertyuiopasdf", false, 0, 14},
267 }; 277 };
268 278
269 FilePath hunspell_directory = GetHunspellDirectory(); 279 FilePath hunspell_directory = GetHunspellDirectory();
270 ASSERT_FALSE(hunspell_directory.empty()); 280 ASSERT_FALSE(hunspell_directory.empty());
271 281
272 scoped_refptr<SpellChecker> spell_checker(new SpellChecker( 282 scoped_refptr<SpellChecker> spell_checker(new SpellChecker(
273 hunspell_directory, "en-US", NULL, FilePath())); 283 hunspell_directory, "en-US", NULL, FilePath()));
284 spell_checker->Initialize();
285 message_loop_.RunAllPending();
274 286
275 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); ++i) { 287 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); ++i) {
276 size_t input_length = 0; 288 size_t input_length = 0;
277 if (kTestCases[i].input != NULL) { 289 if (kTestCases[i].input != NULL) {
278 input_length = wcslen(kTestCases[i].input); 290 input_length = wcslen(kTestCases[i].input);
279 } 291 }
280 int misspelling_start; 292 int misspelling_start;
281 int misspelling_length; 293 int misspelling_length;
282 bool result = spell_checker->SpellCheckWord( 294 bool result = spell_checker->SpellCheckWord(
283 WideToUTF16(kTestCases[i].input).c_str(), 295 WideToUTF16(kTestCases[i].input).c_str(),
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after
609 {L"jum", false, 0, 0, L"um"}, 621 {L"jum", false, 0, 0, L"um"},
610 #endif // !OS_MACOSX 622 #endif // !OS_MACOSX
611 // TODO (Sidchat): add many more examples. 623 // TODO (Sidchat): add many more examples.
612 }; 624 };
613 625
614 FilePath hunspell_directory = GetHunspellDirectory(); 626 FilePath hunspell_directory = GetHunspellDirectory();
615 ASSERT_FALSE(hunspell_directory.empty()); 627 ASSERT_FALSE(hunspell_directory.empty());
616 628
617 scoped_refptr<SpellChecker> spell_checker(new SpellChecker( 629 scoped_refptr<SpellChecker> spell_checker(new SpellChecker(
618 hunspell_directory, "en-US", NULL, FilePath())); 630 hunspell_directory, "en-US", NULL, FilePath()));
631 spell_checker->Initialize();
632 message_loop_.RunAllPending();
619 633
620 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); ++i) { 634 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); ++i) {
621 std::vector<string16> suggestions; 635 std::vector<string16> suggestions;
622 size_t input_length = 0; 636 size_t input_length = 0;
623 if (kTestCases[i].input != NULL) { 637 if (kTestCases[i].input != NULL) {
624 input_length = wcslen(kTestCases[i].input); 638 input_length = wcslen(kTestCases[i].input);
625 } 639 }
626 int misspelling_start; 640 int misspelling_start;
627 int misspelling_length; 641 int misspelling_length;
628 bool result = spell_checker->SpellCheckWord( 642 bool result = spell_checker->SpellCheckWord(
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
882 L"th\x1EC3 truy c\x1EADp va h\x1EEFu d\x1EE5ng h\x01A1n." 896 L"th\x1EC3 truy c\x1EADp va h\x1EEFu d\x1EE5ng h\x01A1n."
883 }, 897 },
884 }; 898 };
885 899
886 FilePath hunspell_directory = GetHunspellDirectory(); 900 FilePath hunspell_directory = GetHunspellDirectory();
887 ASSERT_FALSE(hunspell_directory.empty()); 901 ASSERT_FALSE(hunspell_directory.empty());
888 902
889 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); ++i) { 903 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); ++i) {
890 scoped_refptr<SpellChecker> spell_checker(new SpellChecker( 904 scoped_refptr<SpellChecker> spell_checker(new SpellChecker(
891 hunspell_directory, kTestCases[i].language, NULL, FilePath())); 905 hunspell_directory, kTestCases[i].language, NULL, FilePath()));
906 spell_checker->Initialize();
907 message_loop_.RunAllPending();
892 908
893 size_t input_length = 0; 909 size_t input_length = 0;
894 if (kTestCases[i].input != NULL) 910 if (kTestCases[i].input != NULL)
895 input_length = wcslen(kTestCases[i].input); 911 input_length = wcslen(kTestCases[i].input);
896 912
897 int misspelling_start = 0; 913 int misspelling_start = 0;
898 int misspelling_length = 0; 914 int misspelling_length = 0;
899 bool result = spell_checker->SpellCheckWord( 915 bool result = spell_checker->SpellCheckWord(
900 WideToUTF16(kTestCases[i].input).c_str(), 916 WideToUTF16(kTestCases[i].input).c_str(),
901 static_cast<int>(input_length), 917 static_cast<int>(input_length),
(...skipping 17 matching lines...) Expand all
919 {L"Googleplex"}, 935 {L"Googleplex"},
920 {L"Googler"}, 936 {L"Googler"},
921 }; 937 };
922 938
923 FilePath custom_dictionary_file(kTempCustomDictionaryFile); 939 FilePath custom_dictionary_file(kTempCustomDictionaryFile);
924 FilePath hunspell_directory = GetHunspellDirectory(); 940 FilePath hunspell_directory = GetHunspellDirectory();
925 ASSERT_FALSE(hunspell_directory.empty()); 941 ASSERT_FALSE(hunspell_directory.empty());
926 942
927 scoped_refptr<SpellChecker> spell_checker(new SpellChecker( 943 scoped_refptr<SpellChecker> spell_checker(new SpellChecker(
928 hunspell_directory, "en-US", NULL, custom_dictionary_file)); 944 hunspell_directory, "en-US", NULL, custom_dictionary_file));
945 spell_checker->Initialize();
946 message_loop_.RunAllPending();
929 947
930 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); ++i) { 948 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); ++i) {
931 // Add the word to spellchecker. 949 // Add the word to spellchecker.
932 spell_checker->AddWord(WideToUTF16(kTestCases[i].word_to_add)); 950 spell_checker->AddWord(WideToUTF16(kTestCases[i].word_to_add));
933 951
934 // Now check whether it is added to Spellchecker. 952 // Now check whether it is added to Spellchecker.
935 std::vector<string16> suggestions; 953 std::vector<string16> suggestions;
936 size_t input_length = 0; 954 size_t input_length = 0;
937 if (kTestCases[i].word_to_add != NULL) { 955 if (kTestCases[i].word_to_add != NULL) {
938 input_length = wcslen(kTestCases[i].word_to_add); 956 input_length = wcslen(kTestCases[i].word_to_add);
939 } 957 }
940 int misspelling_start; 958 int misspelling_start;
941 int misspelling_length; 959 int misspelling_length;
942 bool result = spell_checker->SpellCheckWord( 960 bool result = spell_checker->SpellCheckWord(
943 WideToUTF16(kTestCases[i].word_to_add).c_str(), 961 WideToUTF16(kTestCases[i].word_to_add).c_str(),
944 static_cast<int>(input_length), 962 static_cast<int>(input_length),
945 0, 963 0,
946 &misspelling_start, 964 &misspelling_start,
947 &misspelling_length, 965 &misspelling_length,
948 &suggestions); 966 &suggestions);
949 967
950 // Check for spelling. 968 // Check for spelling.
951 EXPECT_TRUE(result); 969 EXPECT_TRUE(result);
952 } 970 }
953 971
954 // Now initialize another spellchecker to see that AddToWord is permanent. 972 // Now initialize another spellchecker to see that AddToWord is permanent.
955 scoped_refptr<SpellChecker> spell_checker_new(new SpellChecker( 973 scoped_refptr<SpellChecker> spell_checker_new(new SpellChecker(
956 hunspell_directory, "en-US", NULL, custom_dictionary_file)); 974 hunspell_directory, "en-US", NULL, custom_dictionary_file));
975 spell_checker->Initialize();
976 message_loop_.RunAllPending();
957 977
958 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); ++i) { 978 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); ++i) {
959 // Now check whether it is added to Spellchecker. 979 // Now check whether it is added to Spellchecker.
960 std::vector<string16> suggestions; 980 std::vector<string16> suggestions;
961 size_t input_length = 0; 981 size_t input_length = 0;
962 if (kTestCases[i].word_to_add != NULL) { 982 if (kTestCases[i].word_to_add != NULL) {
963 input_length = wcslen(kTestCases[i].word_to_add); 983 input_length = wcslen(kTestCases[i].word_to_add);
964 } 984 }
965 int misspelling_start; 985 int misspelling_start;
966 int misspelling_length; 986 int misspelling_length;
(...skipping 23 matching lines...) Expand all
990 {L"Googleplex"}, 1010 {L"Googleplex"},
991 {L"Googler"}, 1011 {L"Googler"},
992 }; 1012 };
993 1013
994 FilePath custom_dictionary_file(kTempCustomDictionaryFile); 1014 FilePath custom_dictionary_file(kTempCustomDictionaryFile);
995 FilePath hunspell_directory = GetHunspellDirectory(); 1015 FilePath hunspell_directory = GetHunspellDirectory();
996 ASSERT_FALSE(hunspell_directory.empty()); 1016 ASSERT_FALSE(hunspell_directory.empty());
997 1017
998 scoped_refptr<SpellChecker> spell_checker(new SpellChecker( 1018 scoped_refptr<SpellChecker> spell_checker(new SpellChecker(
999 hunspell_directory, "en-US", NULL, custom_dictionary_file)); 1019 hunspell_directory, "en-US", NULL, custom_dictionary_file));
1020 spell_checker->Initialize();
1021 message_loop_.RunAllPending();
1000 1022
1001 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); ++i) { 1023 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); ++i) {
1002 // Add the word to spellchecker. 1024 // Add the word to spellchecker.
1003 spell_checker->AddWord(WideToUTF16(kTestCases[i].word_to_add)); 1025 spell_checker->AddWord(WideToUTF16(kTestCases[i].word_to_add));
1004 } 1026 }
1005 1027
1006 // Now check to see whether the custom words are suggested for 1028 // Now check to see whether the custom words are suggested for
1007 // misspelled but similar words. 1029 // misspelled but similar words.
1008 static const struct { 1030 static const struct {
1009 // A string to be tested. 1031 // A string to be tested.
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
1076 {"noen", ""}, 1098 {"noen", ""},
1077 {"what", ""}, 1099 {"what", ""},
1078 }; 1100 };
1079 1101
1080 FilePath hunspell_directory = GetHunspellDirectory(); 1102 FilePath hunspell_directory = GetHunspellDirectory();
1081 ASSERT_FALSE(hunspell_directory.empty()); 1103 ASSERT_FALSE(hunspell_directory.empty());
1082 1104
1083 scoped_refptr<SpellChecker> spell_checker(new SpellChecker( 1105 scoped_refptr<SpellChecker> spell_checker(new SpellChecker(
1084 hunspell_directory, "en-US", NULL, FilePath())); 1106 hunspell_directory, "en-US", NULL, FilePath()));
1085 spell_checker->EnableAutoSpellCorrect(true); 1107 spell_checker->EnableAutoSpellCorrect(true);
1108 spell_checker->Initialize();
1109 message_loop_.RunAllPending();
1086 1110
1087 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); ++i) { 1111 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); ++i) {
1088 string16 misspelled_word(UTF8ToUTF16(kTestCases[i].input)); 1112 string16 misspelled_word(UTF8ToUTF16(kTestCases[i].input));
1089 string16 expected_autocorrect_word( 1113 string16 expected_autocorrect_word(
1090 UTF8ToUTF16(kTestCases[i].expected_result)); 1114 UTF8ToUTF16(kTestCases[i].expected_result));
1091 string16 autocorrect_word = spell_checker->GetAutoCorrectionWord( 1115 string16 autocorrect_word = spell_checker->GetAutoCorrectionWord(
1092 misspelled_word, 0); 1116 misspelled_word, 0);
1093 1117
1094 // Check for spelling. 1118 // Check for spelling.
1095 EXPECT_EQ(expected_autocorrect_word, autocorrect_word); 1119 EXPECT_EQ(expected_autocorrect_word, autocorrect_word);
(...skipping 15 matching lines...) Expand all
1111 {"moer", false}, 1135 {"moer", false},
1112 {"watre", false}, 1136 {"watre", false},
1113 {"noen", false}, 1137 {"noen", false},
1114 }; 1138 };
1115 1139
1116 FilePath hunspell_directory = GetHunspellDirectory(); 1140 FilePath hunspell_directory = GetHunspellDirectory();
1117 ASSERT_FALSE(hunspell_directory.empty()); 1141 ASSERT_FALSE(hunspell_directory.empty());
1118 1142
1119 scoped_refptr<SpellChecker> spell_checker(new SpellChecker( 1143 scoped_refptr<SpellChecker> spell_checker(new SpellChecker(
1120 hunspell_directory, "en-US", NULL, FilePath())); 1144 hunspell_directory, "en-US", NULL, FilePath()));
1145 spell_checker->Initialize();
1146 message_loop_.RunAllPending();
1121 1147
1122 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); ++i) { 1148 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); ++i) {
1123 string16 word(UTF8ToUTF16(kTestCases[i].input)); 1149 string16 word(UTF8ToUTF16(kTestCases[i].input));
1124 std::vector<string16> suggestions; 1150 std::vector<string16> suggestions;
1125 size_t input_length = 0; 1151 size_t input_length = 0;
1126 if (kTestCases[i].input != NULL) { 1152 if (kTestCases[i].input != NULL) {
1127 input_length = word.length(); 1153 input_length = word.length();
1128 } 1154 }
1129 int misspelling_start; 1155 int misspelling_start;
1130 int misspelling_length; 1156 int misspelling_length;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1164 doc_tag, 1190 doc_tag,
1165 &misspelling_start, 1191 &misspelling_start,
1166 &misspelling_length, 1192 &misspelling_length,
1167 &suggestions); 1193 &suggestions);
1168 1194
1169 // The word should now show be spelled wrong again 1195 // The word should now show be spelled wrong again
1170 EXPECT_EQ(kTestCases[i].input_result, result); 1196 EXPECT_EQ(kTestCases[i].input_result, result);
1171 } 1197 }
1172 } // Test IgnoreWords_EN_US 1198 } // Test IgnoreWords_EN_US
1173 #endif // OS_MACOSX 1199 #endif // OS_MACOSX
OLDNEW
« no previous file with comments | « chrome/browser/safe_browsing/safe_browsing_service.cc ('k') | chrome/browser/spellchecker.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698