Disable view source for Developer Tools.
[chromium-blink-merge.git] / chrome / browser / sync / test / integration / dictionary_helper.cc
blob9418339a906e51c9f2558339b0e9f69cf689e242
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/sync/test/integration/dictionary_helper.h"
7 #include <algorithm>
9 #include "chrome/browser/profiles/profile.h"
10 #include "chrome/browser/spellchecker/spellcheck_factory.h"
11 #include "chrome/browser/spellchecker/spellcheck_service.h"
12 #include "chrome/browser/sync/test/integration/dictionary_load_observer.h"
13 #include "chrome/browser/sync/test/integration/profile_sync_service_harness.h"
14 #include "chrome/browser/sync/test/integration/sync_datatype_helper.h"
15 #include "chrome/browser/sync/test/integration/sync_test.h"
16 #include "chrome/common/chrome_switches.h"
17 #include "chrome/common/spellcheck_common.h"
18 #include "content/public/test/test_utils.h"
20 class DictionarySyncIntegrationTestHelper {
21 public:
22 // Same as SpellcheckCustomDictionary::AddWord/RemoveWord, except does not
23 // write to disk.
24 static bool ApplyChange(
25 SpellcheckCustomDictionary* dictionary,
26 SpellcheckCustomDictionary::Change& change) {
27 int result = change.Sanitize(dictionary->GetWords());
28 dictionary->Apply(change);
29 dictionary->Notify(change);
30 dictionary->Sync(change);
31 return !result;
34 DISALLOW_COPY_AND_ASSIGN(DictionarySyncIntegrationTestHelper);
38 namespace dictionary_helper {
39 namespace {
41 SpellcheckCustomDictionary* GetDictionary(int index) {
42 return SpellcheckServiceFactory::GetForContext(
43 sync_datatype_helper::test()->GetProfile(index))->GetCustomDictionary();
46 SpellcheckCustomDictionary* GetVerifierDictionary() {
47 return SpellcheckServiceFactory::GetForContext(
48 sync_datatype_helper::test()->verifier())->GetCustomDictionary();
51 void LoadDictionary(SpellcheckCustomDictionary* dictionary) {
52 if (dictionary->IsLoaded())
53 return;
54 base::RunLoop run_loop;
55 DictionaryLoadObserver observer(content::GetQuitTaskForRunLoop(&run_loop));
56 dictionary->AddObserver(&observer);
57 dictionary->Load();
58 content::RunThisRunLoop(&run_loop);
59 dictionary->RemoveObserver(&observer);
60 ASSERT_TRUE(dictionary->IsLoaded());
63 } // namespace
66 void LoadDictionaries() {
67 for (int i = 0; i < sync_datatype_helper::test()->num_clients(); ++i)
68 LoadDictionary(GetDictionary(i));
69 if (sync_datatype_helper::test()->use_verifier())
70 LoadDictionary(GetVerifierDictionary());
73 size_t GetDictionarySize(int index) {
74 return GetDictionary(index)->GetWords().size();
77 size_t GetVerifierDictionarySize() {
78 return GetVerifierDictionary()->GetWords().size();
81 bool DictionariesMatch() {
82 const chrome::spellcheck_common::WordSet& reference =
83 sync_datatype_helper::test()->use_verifier()
84 ? GetVerifierDictionary()->GetWords()
85 : GetDictionary(0)->GetWords();
86 for (int i = 0; i < sync_datatype_helper::test()->num_clients(); ++i) {
87 const chrome::spellcheck_common::WordSet& dictionary =
88 GetDictionary(i)->GetWords();
89 if (reference.size() != dictionary.size() ||
90 !std::equal(reference.begin(), reference.end(), dictionary.begin())) {
91 return false;
94 return true;
97 bool DictionaryMatchesVerifier(int index) {
98 const chrome::spellcheck_common::WordSet& expected =
99 GetVerifierDictionary()->GetWords();
100 const chrome::spellcheck_common::WordSet& actual =
101 GetDictionary(index)->GetWords();
102 return expected.size() == actual.size() &&
103 std::equal(expected.begin(), expected.end(), actual.begin());
106 bool AddWord(int index, const std::string& word) {
107 SpellcheckCustomDictionary::Change dictionary_change;
108 dictionary_change.AddWord(word);
109 bool result = DictionarySyncIntegrationTestHelper::ApplyChange(
110 GetDictionary(index), dictionary_change);
111 if (sync_datatype_helper::test()->use_verifier()) {
112 result &= DictionarySyncIntegrationTestHelper::ApplyChange(
113 GetVerifierDictionary(), dictionary_change);
115 return result;
118 bool RemoveWord(int index, const std::string& word) {
119 SpellcheckCustomDictionary::Change dictionary_change;
120 dictionary_change.RemoveWord(word);
121 bool result = DictionarySyncIntegrationTestHelper::ApplyChange(
122 GetDictionary(index), dictionary_change);
123 if (sync_datatype_helper::test()->use_verifier()) {
124 result &= DictionarySyncIntegrationTestHelper::ApplyChange(
125 GetVerifierDictionary(), dictionary_change);
127 return result;
130 } // namespace dictionary_helper