Chromium Code Reviews| OLD | NEW |
|---|---|
| 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" | |
| 10 #include "base/metrics/histogram_samples.h" | |
| 11 #include "base/metrics/statistics_recorder.h" | |
| 9 #include "base/strings/string_number_conversions.h" | 12 #include "base/strings/string_number_conversions.h" |
| 10 #include "chrome/browser/spellchecker/spellcheck_custom_dictionary.h" | 13 #include "chrome/browser/spellchecker/spellcheck_custom_dictionary.h" |
| 11 #include "chrome/browser/spellchecker/spellcheck_factory.h" | 14 #include "chrome/browser/spellchecker/spellcheck_factory.h" |
| 15 #include "chrome/browser/spellchecker/spellcheck_host_metrics.h" | |
| 12 #include "chrome/browser/spellchecker/spellcheck_service.h" | 16 #include "chrome/browser/spellchecker/spellcheck_service.h" |
| 13 #include "chrome/common/chrome_constants.h" | 17 #include "chrome/common/chrome_constants.h" |
| 14 #include "chrome/common/spellcheck_common.h" | 18 #include "chrome/common/spellcheck_common.h" |
| 15 #include "chrome/test/base/testing_profile.h" | 19 #include "chrome/test/base/testing_profile.h" |
| 16 #include "content/public/test/test_browser_thread.h" | 20 #include "content/public/test/test_browser_thread.h" |
| 17 #include "sync/api/sync_change.h" | 21 #include "sync/api/sync_change.h" |
| 18 #include "sync/api/sync_data.h" | 22 #include "sync/api/sync_data.h" |
| 19 #include "sync/api/sync_error_factory.h" | 23 #include "sync/api/sync_error_factory.h" |
| 20 #include "sync/api/sync_error_factory_mock.h" | 24 #include "sync/api/sync_error_factory_mock.h" |
| 21 #include "sync/protocol/sync.pb.h" | 25 #include "sync/protocol/sync.pb.h" |
| 22 #include "testing/gmock/include/gmock/gmock.h" | 26 #include "testing/gmock/include/gmock/gmock.h" |
| 23 #include "testing/gtest/include/gtest/gtest.h" | 27 #include "testing/gtest/include/gtest/gtest.h" |
| 24 | 28 |
| 29 using base::HistogramBase; | |
| 30 using base::HistogramSamples; | |
| 31 using base::StatisticsRecorder; | |
| 25 using content::BrowserThread; | 32 using content::BrowserThread; |
| 26 using chrome::spellcheck_common::WordList; | 33 using chrome::spellcheck_common::WordList; |
| 27 | 34 |
| 28 namespace { | 35 namespace { |
| 29 | 36 |
| 30 // Get all sync data for the custom dictionary without limiting to maximum | 37 // Get all sync data for the custom dictionary without limiting to maximum |
| 31 // number of syncable words. | 38 // number of syncable words. |
| 32 syncer::SyncDataList GetAllSyncDataNoLimit( | 39 syncer::SyncDataList GetAllSyncDataNoLimit( |
| 33 const SpellcheckCustomDictionary* dictionary) { | 40 const SpellcheckCustomDictionary* dictionary) { |
| 34 syncer::SyncDataList data; | 41 syncer::SyncDataList data; |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 55 SpellcheckCustomDictionaryTest() | 62 SpellcheckCustomDictionaryTest() |
| 56 : ui_thread_(BrowserThread::UI, &message_loop_), | 63 : ui_thread_(BrowserThread::UI, &message_loop_), |
| 57 file_thread_(BrowserThread::FILE, &message_loop_), | 64 file_thread_(BrowserThread::FILE, &message_loop_), |
| 58 profile_(new TestingProfile) { | 65 profile_(new TestingProfile) { |
| 59 } | 66 } |
| 60 | 67 |
| 61 virtual void SetUp() OVERRIDE { | 68 virtual void SetUp() OVERRIDE { |
| 62 // Use SetTestingFactoryAndUse to force creation and initialization. | 69 // Use SetTestingFactoryAndUse to force creation and initialization. |
| 63 SpellcheckServiceFactory::GetInstance()->SetTestingFactoryAndUse( | 70 SpellcheckServiceFactory::GetInstance()->SetTestingFactoryAndUse( |
| 64 profile_.get(), &BuildSpellcheckService); | 71 profile_.get(), &BuildSpellcheckService); |
| 72 | |
| 73 base::StatisticsRecorder::Initialize(); | |
|
please use gerrit instead
2013/04/04 00:31:55
Nit: No need for "base::" here since you're "using
rpetterson
2013/04/04 20:24:37
Done.
| |
| 74 metrics_.reset(new SpellCheckHostMetrics); | |
|
please use gerrit instead
2013/04/04 00:31:55
No need for an instance of SpellcheckHostMetrics o
rpetterson
2013/04/04 20:24:37
Done.
| |
| 65 } | 75 } |
| 66 | 76 |
| 67 virtual void TearDown() OVERRIDE { | 77 virtual void TearDown() OVERRIDE { |
| 68 MessageLoop::current()->RunUntilIdle(); | 78 MessageLoop::current()->RunUntilIdle(); |
| 69 } | 79 } |
| 70 | 80 |
| 71 // A wrapper around SpellcheckCustomDictionary::LoadDictionaryFile private | 81 // A wrapper around SpellcheckCustomDictionary::LoadDictionaryFile private |
| 72 // function to avoid a large number of FRIEND_TEST declarations in | 82 // function to avoid a large number of FRIEND_TEST declarations in |
| 73 // SpellcheckCustomDictionary. | 83 // SpellcheckCustomDictionary. |
| 74 chrome::spellcheck_common::WordList LoadDictionaryFile( | 84 chrome::spellcheck_common::WordList LoadDictionaryFile( |
| (...skipping 25 matching lines...) Expand all Loading... | |
| 100 SpellcheckCustomDictionary& dictionary, | 110 SpellcheckCustomDictionary& dictionary, |
| 101 const SpellcheckCustomDictionary::Change& change) { | 111 const SpellcheckCustomDictionary::Change& change) { |
| 102 return dictionary.Apply(change); | 112 return dictionary.Apply(change); |
| 103 } | 113 } |
| 104 | 114 |
| 105 MessageLoop message_loop_; | 115 MessageLoop message_loop_; |
| 106 content::TestBrowserThread ui_thread_; | 116 content::TestBrowserThread ui_thread_; |
| 107 content::TestBrowserThread file_thread_; | 117 content::TestBrowserThread file_thread_; |
| 108 | 118 |
| 109 scoped_ptr<TestingProfile> profile_; | 119 scoped_ptr<TestingProfile> profile_; |
| 120 scoped_ptr<SpellCheckHostMetrics> metrics_; | |
|
please use gerrit instead
2013/04/04 00:31:55
Ditto.
rpetterson
2013/04/04 20:24:37
Done.
| |
| 110 }; | 121 }; |
| 111 | 122 |
| 112 // A wrapper around SpellcheckCustomDictionary that does not own the wrapped | 123 // A wrapper around SpellcheckCustomDictionary that does not own the wrapped |
| 113 // object. An instance of this class can be inside of a scoped pointer safely | 124 // object. An instance of this class can be inside of a scoped pointer safely |
| 114 // while the dictionary is managed by another scoped pointer. | 125 // while the dictionary is managed by another scoped pointer. |
| 115 class SyncChangeProcessorDelegate : public syncer::SyncChangeProcessor { | 126 class SyncChangeProcessorDelegate : public syncer::SyncChangeProcessor { |
| 116 public: | 127 public: |
| 117 explicit SyncChangeProcessorDelegate(SpellcheckCustomDictionary* dictionary) | 128 explicit SyncChangeProcessorDelegate(SpellcheckCustomDictionary* dictionary) |
| 118 : dictionary_(dictionary) {} | 129 : dictionary_(dictionary) {} |
| 119 virtual ~SyncChangeProcessorDelegate() {} | 130 virtual ~SyncChangeProcessorDelegate() {} |
| (...skipping 947 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1067 EXPECT_FALSE(client_custom_dictionary->IsSyncing()); | 1078 EXPECT_FALSE(client_custom_dictionary->IsSyncing()); |
| 1068 EXPECT_EQ(chrome::spellcheck_common::MAX_SYNCABLE_DICTIONARY_WORDS * 2, | 1079 EXPECT_EQ(chrome::spellcheck_common::MAX_SYNCABLE_DICTIONARY_WORDS * 2, |
| 1069 client_custom_dictionary->GetWords().size()); | 1080 client_custom_dictionary->GetWords().size()); |
| 1070 } | 1081 } |
| 1071 | 1082 |
| 1072 // The sync server should not receive more words, because it has the maximum | 1083 // The sync server should not receive more words, because it has the maximum |
| 1073 // number of words already. | 1084 // number of words already. |
| 1074 EXPECT_EQ(chrome::spellcheck_common::MAX_SYNCABLE_DICTIONARY_WORDS, | 1085 EXPECT_EQ(chrome::spellcheck_common::MAX_SYNCABLE_DICTIONARY_WORDS, |
| 1075 server_custom_dictionary->GetWords().size()); | 1086 server_custom_dictionary->GetWords().size()); |
| 1076 } | 1087 } |
| 1088 | |
| 1089 TEST_F(SpellcheckCustomDictionaryTest, RecordSizeStatsCorrectly) { | |
| 1090 // Record a baseline. | |
| 1091 metrics_->RecordCustomWordCountStats(123); | |
|
please use gerrit instead
2013/04/04 00:31:55
Ditto.
rpetterson
2013/04/04 20:24:37
Done.
| |
| 1092 | |
| 1093 HistogramBase* histogram = | |
| 1094 StatisticsRecorder::FindHistogram("SpellCheck.CustomWords"); | |
| 1095 ASSERT_TRUE(histogram != NULL); | |
| 1096 scoped_ptr<HistogramSamples> baseline = histogram->SnapshotSamples(); | |
| 1097 | |
| 1098 // Load the dictionary which should be empty. | |
| 1099 base::FilePath path = | |
| 1100 profile_->GetPath().Append(chrome::kCustomDictionaryFileName); | |
| 1101 WordList loaded_custom_words = LoadDictionaryFile(path); | |
| 1102 EXPECT_EQ(0u, loaded_custom_words.size()); | |
| 1103 | |
| 1104 // We expect there to be an entry with 0. | |
| 1105 histogram = | |
| 1106 StatisticsRecorder::FindHistogram("SpellCheck.CustomWords"); | |
| 1107 ASSERT_TRUE(histogram != NULL); | |
| 1108 scoped_ptr<HistogramSamples> samples = histogram->SnapshotSamples(); | |
| 1109 | |
| 1110 samples->Subtract(*baseline); | |
| 1111 EXPECT_EQ(0,samples->sum()); | |
| 1112 | |
| 1113 SpellcheckCustomDictionary::Change change; | |
| 1114 change.AddWord("bar"); | |
| 1115 change.AddWord("foo"); | |
| 1116 UpdateDictionaryFile(change, path); | |
| 1117 | |
| 1118 // Load the dictionary again and it should have 2 entries. | |
| 1119 loaded_custom_words = LoadDictionaryFile(path); | |
| 1120 EXPECT_EQ(2u, loaded_custom_words.size()); | |
| 1121 | |
| 1122 histogram = | |
| 1123 StatisticsRecorder::FindHistogram("SpellCheck.CustomWords"); | |
| 1124 ASSERT_TRUE(histogram != NULL); | |
| 1125 scoped_ptr<HistogramSamples> samples2 = histogram->SnapshotSamples(); | |
| 1126 | |
| 1127 samples2->Subtract(*baseline); | |
| 1128 EXPECT_EQ(2,samples2->sum()); | |
| 1129 } | |
| OLD | NEW |