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

Unified Diff: chrome/browser/sync/test/integration/dictionary_helper.cc

Issue 11445002: Sync user's custom spellcheck dictionary (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Address comments Created 7 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/sync/test/integration/dictionary_helper.cc
diff --git a/chrome/browser/sync/test/integration/dictionary_helper.cc b/chrome/browser/sync/test/integration/dictionary_helper.cc
new file mode 100644
index 0000000000000000000000000000000000000000..9c196a706de3f5dcfeb96abae5ac82ebe2cd4866
--- /dev/null
+++ b/chrome/browser/sync/test/integration/dictionary_helper.cc
@@ -0,0 +1,179 @@
+// Copyright (c) 2011 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 "chrome/browser/sync/test/integration/dictionary_helper.h"
+
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/spellchecker/spellcheck_factory.h"
+#include "chrome/browser/spellchecker/spellcheck_service.h"
+#include "chrome/browser/sync/profile_sync_service_harness.h"
+#include "chrome/browser/sync/test/integration/dictionary_load_observer.h"
+#include "chrome/browser/sync/test/integration/sync_datatype_helper.h"
+#include "chrome/browser/sync/test/integration/sync_test.h"
+#include "chrome/common/chrome_switches.h"
+#include "chrome/common/spellcheck_common.h"
+#include "content/public/test/test_utils.h"
+
+class DictionarySyncIntegrationTestHelper {
+ public:
+ // Same as SpellcheckCustomDictionary::AddWord/RemoveWord, except does not
+ // write to disk.
+ static bool ApplyChange(
+ SpellcheckCustomDictionary* dictionary,
+ SpellcheckCustomDictionary::Change& change) {
+ int result = dictionary->Apply(&change);
+ dictionary->Notify(&change);
+ dictionary->Sync(&change);
+ return !result;
+ }
+
+ DISALLOW_COPY_AND_ASSIGN(DictionarySyncIntegrationTestHelper);
+};
+
+
+namespace dictionary_helper {
+namespace {
+
+bool DictionaryHasWord(
+ const SpellcheckCustomDictionary* dictionary,
+ const std::string& word) {
+ return dictionary->GetWords().end() != std::find(
+ dictionary->GetWords().begin(),
+ dictionary->GetWords().end(),
+ word);
+}
+
+SpellcheckCustomDictionary* GetDictionary(int index) {
+ return SpellcheckServiceFactory::GetForProfile(
+ sync_datatype_helper::test()->GetProfile(index))->GetCustomDictionary();
+}
+
+SpellcheckCustomDictionary* GetVerifierDictionary() {
+ return SpellcheckServiceFactory::GetForProfile(
+ sync_datatype_helper::test()->verifier())->GetCustomDictionary();
+}
+
+bool HaveWord(int index, std::string word) {
+ return DictionaryHasWord(GetDictionary(index), word);
+}
+
+bool HaveWordInVerifier(std::string word) {
+ return DictionaryHasWord(GetVerifierDictionary(), word);
+}
+
+void LoadDictionary(SpellcheckCustomDictionary* dictionary) {
+ if (dictionary->IsLoaded())
+ return;
+ base::RunLoop run_loop;
+ DictionaryLoadObserver observer(content::GetQuitTaskForRunLoop(&run_loop));
+ dictionary->AddObserver(&observer);
+ dictionary->Load();
+ content::RunThisRunLoop(&run_loop);
+ dictionary->RemoveObserver(&observer);
+ ASSERT_TRUE(dictionary->IsLoaded());
+}
+
+bool HaveWordMatches(const std::string& word) {
+ bool reference = sync_datatype_helper::test()->use_verifier() ?
+ HaveWordInVerifier(word) : HaveWord(0, word);
+ for (int i = 0; i < sync_datatype_helper::test()->num_clients(); ++i) {
+ if (reference != HaveWord(i, word)) {
+ LOG(ERROR)
+ << "Word " << word << " is " << (reference ? "missing " : "present ")
+ << "in profile " << i << ".";
+ return false;
+ }
+ }
+ return true;
+}
+
+} // namespace
+
+
+void EnableDictionarySync(CommandLine* cl) {
+ CommandLine::ForCurrentProcess()->AppendSwitch(
+ switches::kEnableSyncDictionary);
+}
+
+void LoadDictionaries() {
+ for (int i = 0; i < sync_datatype_helper::test()->num_clients(); ++i) {
+ LOG(ERROR) << "Loading dictionary for profile " << i;
+ LoadDictionary(GetDictionary(i));
+ }
+ if (sync_datatype_helper::test()->use_verifier()) {
+ LOG(ERROR) << "Loading dictionary for verifier profile";
+ LoadDictionary(GetVerifierDictionary());
+ }
+}
+
+size_t GetDictionarySize(int index) {
+ return GetDictionary(index)->GetWords().size();
+}
+
+size_t GetVerifierDictionarySize() {
+ return GetVerifierDictionary()->GetWords().size();
+}
+
+bool DictionariesMatch() {
+ chrome::spellcheck_common::WordList reference =
+ sync_datatype_helper::test()->use_verifier() ?
+ GetVerifierDictionary()->GetWords() : GetDictionary(0)->GetWords();
+ for (int i = 0; i < sync_datatype_helper::test()->num_clients(); ++i) {
+ if (reference.size() != GetDictionary(i)->GetWords().size()) {
+ LOG(ERROR)
+ << "Dictionary in profile " << i << " has "
+ << GetDictionary(i)->GetWords().size() << " words, but should have "
+ << reference.size() << ".";
+ return false;
+ }
+ }
+ for (chrome::spellcheck_common::WordList::iterator it = reference.begin();
+ it != reference.end();
+ ++it) {
+ if (!HaveWordMatches(*it))
+ return false;
+ }
+ return true;
+}
+
+bool DictionaryMatchesVerifier(int index) {
+ chrome::spellcheck_common::WordList expected =
+ GetVerifierDictionary()->GetWords();
+ chrome::spellcheck_common::WordList actual = GetDictionary(index)->GetWords();
+ if (expected.size() != actual.size())
+ return false;
+ for (chrome::spellcheck_common::WordList::iterator it = expected.begin();
+ it != expected.end();
+ ++it) {
+ if (actual.end() == std::find(actual.begin(), actual.end(), *it))
+ return false;
+ }
+ return true;
+}
+
+bool AddWord(int index, const std::string& word) {
+ SpellcheckCustomDictionary::Change dictionary_change;
+ dictionary_change.AddWord(word);
+ bool result = DictionarySyncIntegrationTestHelper::ApplyChange(
+ GetDictionary(index), dictionary_change);
+ if (sync_datatype_helper::test()->use_verifier()) {
+ result &= DictionarySyncIntegrationTestHelper::ApplyChange(
+ GetVerifierDictionary(), dictionary_change);
+ }
+ return result;
+}
+
+bool RemoveWord(int index, const std::string& word) {
+ SpellcheckCustomDictionary::Change dictionary_change;
+ dictionary_change.RemoveWord(word);
+ bool result = DictionarySyncIntegrationTestHelper::ApplyChange(
+ GetDictionary(index), dictionary_change);
+ if (sync_datatype_helper::test()->use_verifier()) {
+ result &= DictionarySyncIntegrationTestHelper::ApplyChange(
+ GetVerifierDictionary(), dictionary_change);
+ }
+ return result;
+}
+
+} // namespace dictionary_helper

Powered by Google App Engine
This is Rietveld 408576698