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"
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
{
22 // Same as SpellcheckCustomDictionary::AddWord/RemoveWord, except does not
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
);
34 DISALLOW_COPY_AND_ASSIGN(DictionarySyncIntegrationTestHelper
);
38 namespace dictionary_helper
{
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())
54 base::RunLoop run_loop
;
55 DictionaryLoadObserver
observer(content::GetQuitTaskForRunLoop(&run_loop
));
56 dictionary
->AddObserver(&observer
);
58 content::RunThisRunLoop(&run_loop
);
59 dictionary
->RemoveObserver(&observer
);
60 ASSERT_TRUE(dictionary
->IsLoaded());
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())) {
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
);
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
);
130 } // namespace dictionary_helper