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

Side by Side Diff: chrome/browser/spellchecker/spellcheck_custom_dictionary_unittest.cc

Issue 15940004: Add HasWord(string) method to SpellcheckCustomDictionary (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Attempt to fix android compile again Created 7 years, 7 months 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 <vector> 5 #include <vector>
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/metrics/histogram.h" 9 #include "base/metrics/histogram.h"
10 #include "base/metrics/histogram_samples.h" 10 #include "base/metrics/histogram_samples.h"
(...skipping 13 matching lines...) Expand all
24 #include "sync/api/sync_error_factory_mock.h" 24 #include "sync/api/sync_error_factory_mock.h"
25 #include "sync/protocol/sync.pb.h" 25 #include "sync/protocol/sync.pb.h"
26 #include "testing/gmock/include/gmock/gmock.h" 26 #include "testing/gmock/include/gmock/gmock.h"
27 #include "testing/gtest/include/gtest/gtest.h" 27 #include "testing/gtest/include/gtest/gtest.h"
28 28
29 using base::HistogramBase; 29 using base::HistogramBase;
30 using base::HistogramSamples; 30 using base::HistogramSamples;
31 using base::StatisticsRecorder; 31 using base::StatisticsRecorder;
32 using content::BrowserThread; 32 using content::BrowserThread;
33 using chrome::spellcheck_common::WordList; 33 using chrome::spellcheck_common::WordList;
34 using chrome::spellcheck_common::WordSet;
34 35
35 namespace { 36 namespace {
36 37
37 // Get all sync data for the custom dictionary without limiting to maximum 38 // Get all sync data for the custom dictionary without limiting to maximum
38 // number of syncable words. 39 // number of syncable words.
39 syncer::SyncDataList GetAllSyncDataNoLimit( 40 syncer::SyncDataList GetAllSyncDataNoLimit(
40 const SpellcheckCustomDictionary* dictionary) { 41 const SpellcheckCustomDictionary* dictionary) {
41 syncer::SyncDataList data; 42 syncer::SyncDataList data;
42 std::string word; 43 std::string word;
43 for (WordList::const_iterator it = dictionary->GetWords().begin(); 44 const WordSet& words = dictionary->GetWords();
44 it != dictionary->GetWords().end(); 45 for (WordSet::const_iterator it = words.begin(); it != words.end(); ++it) {
45 ++it) {
46 word = *it; 46 word = *it;
47 sync_pb::EntitySpecifics specifics; 47 sync_pb::EntitySpecifics specifics;
48 specifics.mutable_dictionary()->set_word(word); 48 specifics.mutable_dictionary()->set_word(word);
49 data.push_back(syncer::SyncData::CreateLocalData(word, word, specifics)); 49 data.push_back(syncer::SyncData::CreateLocalData(word, word, specifics));
50 } 50 }
51 return data; 51 return data;
52 } 52 }
53 53
54 } // namespace 54 } // namespace
55 55
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 SpellcheckCustomDictionary* custom_dictionary = 218 SpellcheckCustomDictionary* custom_dictionary =
219 spellcheck_service->GetCustomDictionary(); 219 spellcheck_service->GetCustomDictionary();
220 TestingProfile profile2; 220 TestingProfile profile2;
221 SpellcheckService* spellcheck_service2 = 221 SpellcheckService* spellcheck_service2 =
222 static_cast<SpellcheckService*>( 222 static_cast<SpellcheckService*>(
223 SpellcheckServiceFactory::GetInstance()->SetTestingFactoryAndUse( 223 SpellcheckServiceFactory::GetInstance()->SetTestingFactoryAndUse(
224 &profile2, &BuildSpellcheckService)); 224 &profile2, &BuildSpellcheckService));
225 SpellcheckCustomDictionary* custom_dictionary2 = 225 SpellcheckCustomDictionary* custom_dictionary2 =
226 spellcheck_service2->GetCustomDictionary(); 226 spellcheck_service2->GetCustomDictionary();
227 227
228 WordList expected1; 228 WordSet expected1;
229 WordList expected2; 229 WordSet expected2;
230 230
231 custom_dictionary->AddWord("foo"); 231 custom_dictionary->AddWord("foo");
232 custom_dictionary->AddWord("bar"); 232 custom_dictionary->AddWord("bar");
233 expected1.push_back("foo"); 233 expected1.insert("foo");
234 expected1.push_back("bar"); 234 expected1.insert("bar");
235 235
236 custom_dictionary2->AddWord("hoge"); 236 custom_dictionary2->AddWord("hoge");
237 custom_dictionary2->AddWord("fuga"); 237 custom_dictionary2->AddWord("fuga");
238 expected2.push_back("hoge"); 238 expected2.insert("hoge");
239 expected2.push_back("fuga"); 239 expected2.insert("fuga");
240 240
241 WordList actual1 = custom_dictionary->GetWords(); 241 WordSet actual1 = custom_dictionary->GetWords();
242 std::sort(actual1.begin(), actual1.end());
243 std::sort(expected1.begin(), expected1.end());
244 EXPECT_EQ(actual1, expected1); 242 EXPECT_EQ(actual1, expected1);
245 243
246 WordList actual2 = custom_dictionary2->GetWords(); 244 WordSet actual2 = custom_dictionary2->GetWords();
247 std::sort(actual2.begin(), actual2.end());
248 std::sort(expected2.begin(), expected2.end());
249 EXPECT_EQ(actual2, expected2); 245 EXPECT_EQ(actual2, expected2);
250 } 246 }
251 247
252 // Legacy empty dictionary should be converted to new format empty dictionary. 248 // Legacy empty dictionary should be converted to new format empty dictionary.
253 TEST_F(SpellcheckCustomDictionaryTest, LegacyEmptyDictionaryShouldBeConverted) { 249 TEST_F(SpellcheckCustomDictionaryTest, LegacyEmptyDictionaryShouldBeConverted) {
254 base::FilePath path = 250 base::FilePath path =
255 profile_->GetPath().Append(chrome::kCustomDictionaryFileName); 251 profile_->GetPath().Append(chrome::kCustomDictionaryFileName);
256 252
257 std::string content; 253 std::string content;
258 file_util::WriteFile(path, content.c_str(), content.length()); 254 file_util::WriteFile(path, content.c_str(), content.length());
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
323 319
324 TEST_F(SpellcheckCustomDictionaryTest, 320 TEST_F(SpellcheckCustomDictionaryTest,
325 GetAllSyncDataAccuratelyReflectsDictionaryState) { 321 GetAllSyncDataAccuratelyReflectsDictionaryState) {
326 SpellcheckCustomDictionary* dictionary = 322 SpellcheckCustomDictionary* dictionary =
327 SpellcheckServiceFactory::GetForProfile( 323 SpellcheckServiceFactory::GetForProfile(
328 profile_.get())->GetCustomDictionary(); 324 profile_.get())->GetCustomDictionary();
329 325
330 syncer::SyncDataList data = dictionary->GetAllSyncData(syncer::DICTIONARY); 326 syncer::SyncDataList data = dictionary->GetAllSyncData(syncer::DICTIONARY);
331 EXPECT_TRUE(data.empty()); 327 EXPECT_TRUE(data.empty());
332 328
329 EXPECT_TRUE(dictionary->AddWord("bar"));
333 EXPECT_TRUE(dictionary->AddWord("foo")); 330 EXPECT_TRUE(dictionary->AddWord("foo"));
334 EXPECT_TRUE(dictionary->AddWord("bar"));
335 331
336 data = dictionary->GetAllSyncData(syncer::DICTIONARY); 332 data = dictionary->GetAllSyncData(syncer::DICTIONARY);
337 EXPECT_EQ(2UL, data.size()); 333 EXPECT_EQ(2UL, data.size());
338 std::vector<std::string> words; 334 std::vector<std::string> words;
335 words.push_back("bar");
339 words.push_back("foo"); 336 words.push_back("foo");
340 words.push_back("bar");
341 for (size_t i = 0; i < data.size(); i++) { 337 for (size_t i = 0; i < data.size(); i++) {
342 EXPECT_TRUE(data[i].GetSpecifics().has_dictionary()); 338 EXPECT_TRUE(data[i].GetSpecifics().has_dictionary());
343 EXPECT_EQ(syncer::DICTIONARY, data[i].GetDataType()); 339 EXPECT_EQ(syncer::DICTIONARY, data[i].GetDataType());
344 EXPECT_EQ(words[i], data[i].GetTag()); 340 EXPECT_EQ(words[i], data[i].GetTag());
345 EXPECT_EQ(words[i], data[i].GetSpecifics().dictionary().word()); 341 EXPECT_EQ(words[i], data[i].GetSpecifics().dictionary().word());
346 } 342 }
347 343
344 EXPECT_TRUE(dictionary->RemoveWord("bar"));
348 EXPECT_TRUE(dictionary->RemoveWord("foo")); 345 EXPECT_TRUE(dictionary->RemoveWord("foo"));
349 EXPECT_TRUE(dictionary->RemoveWord("bar"));
350 346
351 data = dictionary->GetAllSyncData(syncer::DICTIONARY); 347 data = dictionary->GetAllSyncData(syncer::DICTIONARY);
352 EXPECT_TRUE(data.empty()); 348 EXPECT_TRUE(data.empty());
353 } 349 }
354 350
355 TEST_F(SpellcheckCustomDictionaryTest, GetAllSyncDataHasLimit) { 351 TEST_F(SpellcheckCustomDictionaryTest, GetAllSyncDataHasLimit) {
356 SpellcheckCustomDictionary* dictionary = 352 SpellcheckCustomDictionary* dictionary =
357 SpellcheckServiceFactory::GetForProfile( 353 SpellcheckServiceFactory::GetForProfile(
358 profile_.get())->GetCustomDictionary(); 354 profile_.get())->GetCustomDictionary();
359 355
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
445 sync_pb::EntitySpecifics specifics; 441 sync_pb::EntitySpecifics specifics;
446 specifics.mutable_dictionary()->set_word(word); 442 specifics.mutable_dictionary()->set_word(word);
447 changes.push_back(syncer::SyncChange( 443 changes.push_back(syncer::SyncChange(
448 FROM_HERE, 444 FROM_HERE,
449 syncer::SyncChange::ACTION_DELETE, 445 syncer::SyncChange::ACTION_DELETE,
450 syncer::SyncData::CreateLocalData(word, word, specifics))); 446 syncer::SyncData::CreateLocalData(word, word, specifics)));
451 } 447 }
452 448
453 EXPECT_FALSE(dictionary->ProcessSyncChanges(FROM_HERE, changes).IsSet()); 449 EXPECT_FALSE(dictionary->ProcessSyncChanges(FROM_HERE, changes).IsSet());
454 450
455 const chrome::spellcheck_common::WordList& words = dictionary->GetWords(); 451 const WordSet& words = dictionary->GetWords();
456 EXPECT_EQ(2UL, words.size()); 452 EXPECT_EQ(2UL, words.size());
457 EXPECT_EQ(words.end(), std::find(words.begin(), words.end(), "bar")); 453 EXPECT_EQ(0UL, words.count("bar"));
458 EXPECT_NE(words.end(), std::find(words.begin(), words.end(), "foo")); 454 EXPECT_EQ(1UL, words.count("foo"));
459 EXPECT_NE(words.end(), std::find(words.begin(), words.end(), "baz")); 455 EXPECT_EQ(1UL, words.count("baz"));
460 } 456 }
461 457
462 TEST_F(SpellcheckCustomDictionaryTest, MergeDataAndStartSyncing) { 458 TEST_F(SpellcheckCustomDictionaryTest, MergeDataAndStartSyncing) {
463 SpellcheckService* spellcheck_service = 459 SpellcheckService* spellcheck_service =
464 SpellcheckServiceFactory::GetForProfile(profile_.get()); 460 SpellcheckServiceFactory::GetForProfile(profile_.get());
465 SpellcheckCustomDictionary* custom_dictionary = 461 SpellcheckCustomDictionary* custom_dictionary =
466 spellcheck_service->GetCustomDictionary(); 462 spellcheck_service->GetCustomDictionary();
467 TestingProfile profile2; 463 TestingProfile profile2;
468 SpellcheckService* spellcheck_service2 = 464 SpellcheckService* spellcheck_service2 =
469 static_cast<SpellcheckService*>( 465 static_cast<SpellcheckService*>(
(...skipping 22 matching lines...) Expand all
492 EXPECT_FALSE(custom_dictionary->MergeDataAndStartSyncing( 488 EXPECT_FALSE(custom_dictionary->MergeDataAndStartSyncing(
493 syncer::DICTIONARY, 489 syncer::DICTIONARY,
494 custom_dictionary2->GetAllSyncData(syncer::DICTIONARY), 490 custom_dictionary2->GetAllSyncData(syncer::DICTIONARY),
495 scoped_ptr<syncer::SyncChangeProcessor>( 491 scoped_ptr<syncer::SyncChangeProcessor>(
496 new SyncChangeProcessorDelegate(custom_dictionary2)), 492 new SyncChangeProcessorDelegate(custom_dictionary2)),
497 scoped_ptr<syncer::SyncErrorFactory>( 493 scoped_ptr<syncer::SyncErrorFactory>(
498 new SyncErrorFactoryStub(&error_counter))).error().IsSet()); 494 new SyncErrorFactoryStub(&error_counter))).error().IsSet());
499 EXPECT_EQ(0, error_counter); 495 EXPECT_EQ(0, error_counter);
500 EXPECT_TRUE(custom_dictionary->IsSyncing()); 496 EXPECT_TRUE(custom_dictionary->IsSyncing());
501 497
502 WordList words = custom_dictionary->GetWords(); 498 WordSet words = custom_dictionary->GetWords();
503 WordList words2 = custom_dictionary2->GetWords(); 499 WordSet words2 = custom_dictionary2->GetWords();
504 EXPECT_EQ(words.size(), words2.size()); 500 EXPECT_EQ(words.size(), words2.size());
505
506 std::sort(words.begin(), words.end());
507 std::sort(words2.begin(), words2.end());
508 EXPECT_EQ(words, words2); 501 EXPECT_EQ(words, words2);
509 } 502 }
510 503
511 TEST_F(SpellcheckCustomDictionaryTest, DictionaryTooBigBeforeSyncing) { 504 TEST_F(SpellcheckCustomDictionaryTest, DictionaryTooBigBeforeSyncing) {
512 SpellcheckService* spellcheck_service = 505 SpellcheckService* spellcheck_service =
513 SpellcheckServiceFactory::GetForProfile(profile_.get()); 506 SpellcheckServiceFactory::GetForProfile(profile_.get());
514 SpellcheckCustomDictionary* custom_dictionary = 507 SpellcheckCustomDictionary* custom_dictionary =
515 spellcheck_service->GetCustomDictionary(); 508 spellcheck_service->GetCustomDictionary();
516 TestingProfile profile2; 509 TestingProfile profile2;
517 SpellcheckService* spellcheck_service2 = 510 SpellcheckService* spellcheck_service2 =
(...skipping 601 matching lines...) Expand 10 before | Expand all | Expand 10 after
1119 EXPECT_EQ(2u, loaded_custom_words.size()); 1112 EXPECT_EQ(2u, loaded_custom_words.size());
1120 1113
1121 histogram = 1114 histogram =
1122 StatisticsRecorder::FindHistogram("SpellCheck.CustomWords"); 1115 StatisticsRecorder::FindHistogram("SpellCheck.CustomWords");
1123 ASSERT_TRUE(histogram != NULL); 1116 ASSERT_TRUE(histogram != NULL);
1124 scoped_ptr<HistogramSamples> samples2 = histogram->SnapshotSamples(); 1117 scoped_ptr<HistogramSamples> samples2 = histogram->SnapshotSamples();
1125 1118
1126 samples2->Subtract(*baseline); 1119 samples2->Subtract(*baseline);
1127 EXPECT_EQ(2,samples2->sum()); 1120 EXPECT_EQ(2,samples2->sum());
1128 } 1121 }
1122
1123 TEST_F(SpellcheckCustomDictionaryTest, HasWord) {
1124 SpellcheckService* spellcheck_service =
1125 SpellcheckServiceFactory::GetForProfile(profile_.get());
1126 SpellcheckCustomDictionary* custom_dictionary =
1127 spellcheck_service->GetCustomDictionary();
1128 OnLoaded(*custom_dictionary, WordList());
1129 EXPECT_FALSE(custom_dictionary->HasWord("foo"));
1130 EXPECT_FALSE(custom_dictionary->HasWord("bar"));
1131 custom_dictionary->AddWord("foo");
1132 EXPECT_TRUE(custom_dictionary->HasWord("foo"));
1133 EXPECT_FALSE(custom_dictionary->HasWord("bar"));
1134 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698