9418339a906e51c9f2558339b0e9f69cf689e242
[platform/framework/web/crosswalk.git] / src / chrome / browser / sync / test / integration / dictionary_helper.cc
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.
4
5 #include "chrome/browser/sync/test/integration/dictionary_helper.h"
6
7 #include <algorithm>
8
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"
19
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;
32   }
33
34   DISALLOW_COPY_AND_ASSIGN(DictionarySyncIntegrationTestHelper);
35 };
36
37
38 namespace dictionary_helper {
39 namespace {
40
41 SpellcheckCustomDictionary* GetDictionary(int index) {
42   return SpellcheckServiceFactory::GetForContext(
43       sync_datatype_helper::test()->GetProfile(index))->GetCustomDictionary();
44 }
45
46 SpellcheckCustomDictionary* GetVerifierDictionary() {
47   return SpellcheckServiceFactory::GetForContext(
48       sync_datatype_helper::test()->verifier())->GetCustomDictionary();
49 }
50
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());
61 }
62
63 }  // namespace
64
65
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());
71 }
72
73 size_t GetDictionarySize(int index) {
74   return GetDictionary(index)->GetWords().size();
75 }
76
77 size_t GetVerifierDictionarySize() {
78   return GetVerifierDictionary()->GetWords().size();
79 }
80
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;
92     }
93   }
94   return true;
95 }
96
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());
104 }
105
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);
114   }
115   return result;
116 }
117
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);
126   }
127   return result;
128 }
129
130 }  // namespace dictionary_helper