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 StatisticsRecorder::Initialize(); |
65 } | 74 } |
66 | 75 |
67 virtual void TearDown() OVERRIDE { | 76 virtual void TearDown() OVERRIDE { |
68 MessageLoop::current()->RunUntilIdle(); | 77 MessageLoop::current()->RunUntilIdle(); |
69 } | 78 } |
70 | 79 |
71 // A wrapper around SpellcheckCustomDictionary::LoadDictionaryFile private | 80 // A wrapper around SpellcheckCustomDictionary::LoadDictionaryFile private |
72 // function to avoid a large number of FRIEND_TEST declarations in | 81 // function to avoid a large number of FRIEND_TEST declarations in |
73 // SpellcheckCustomDictionary. | 82 // SpellcheckCustomDictionary. |
74 chrome::spellcheck_common::WordList LoadDictionaryFile( | 83 chrome::spellcheck_common::WordList LoadDictionaryFile( |
(...skipping 992 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1067 EXPECT_FALSE(client_custom_dictionary->IsSyncing()); | 1076 EXPECT_FALSE(client_custom_dictionary->IsSyncing()); |
1068 EXPECT_EQ(chrome::spellcheck_common::MAX_SYNCABLE_DICTIONARY_WORDS * 2, | 1077 EXPECT_EQ(chrome::spellcheck_common::MAX_SYNCABLE_DICTIONARY_WORDS * 2, |
1069 client_custom_dictionary->GetWords().size()); | 1078 client_custom_dictionary->GetWords().size()); |
1070 } | 1079 } |
1071 | 1080 |
1072 // The sync server should not receive more words, because it has the maximum | 1081 // The sync server should not receive more words, because it has the maximum |
1073 // number of words already. | 1082 // number of words already. |
1074 EXPECT_EQ(chrome::spellcheck_common::MAX_SYNCABLE_DICTIONARY_WORDS, | 1083 EXPECT_EQ(chrome::spellcheck_common::MAX_SYNCABLE_DICTIONARY_WORDS, |
1075 server_custom_dictionary->GetWords().size()); | 1084 server_custom_dictionary->GetWords().size()); |
1076 } | 1085 } |
| 1086 |
| 1087 TEST_F(SpellcheckCustomDictionaryTest, RecordSizeStatsCorrectly) { |
| 1088 // Record a baseline. |
| 1089 SpellCheckHostMetrics::RecordCustomWordCountStats(123); |
| 1090 |
| 1091 HistogramBase* histogram = |
| 1092 StatisticsRecorder::FindHistogram("SpellCheck.CustomWords"); |
| 1093 ASSERT_TRUE(histogram != NULL); |
| 1094 scoped_ptr<HistogramSamples> baseline = histogram->SnapshotSamples(); |
| 1095 |
| 1096 // Load the dictionary which should be empty. |
| 1097 base::FilePath path = |
| 1098 profile_->GetPath().Append(chrome::kCustomDictionaryFileName); |
| 1099 WordList loaded_custom_words = LoadDictionaryFile(path); |
| 1100 EXPECT_EQ(0u, loaded_custom_words.size()); |
| 1101 |
| 1102 // We expect there to be an entry with 0. |
| 1103 histogram = |
| 1104 StatisticsRecorder::FindHistogram("SpellCheck.CustomWords"); |
| 1105 ASSERT_TRUE(histogram != NULL); |
| 1106 scoped_ptr<HistogramSamples> samples = histogram->SnapshotSamples(); |
| 1107 |
| 1108 samples->Subtract(*baseline); |
| 1109 EXPECT_EQ(0,samples->sum()); |
| 1110 |
| 1111 SpellcheckCustomDictionary::Change change; |
| 1112 change.AddWord("bar"); |
| 1113 change.AddWord("foo"); |
| 1114 UpdateDictionaryFile(change, path); |
| 1115 |
| 1116 // Load the dictionary again and it should have 2 entries. |
| 1117 loaded_custom_words = LoadDictionaryFile(path); |
| 1118 EXPECT_EQ(2u, loaded_custom_words.size()); |
| 1119 |
| 1120 histogram = |
| 1121 StatisticsRecorder::FindHistogram("SpellCheck.CustomWords"); |
| 1122 ASSERT_TRUE(histogram != NULL); |
| 1123 scoped_ptr<HistogramSamples> samples2 = histogram->SnapshotSamples(); |
| 1124 |
| 1125 samples2->Subtract(*baseline); |
| 1126 EXPECT_EQ(2,samples2->sum()); |
| 1127 } |
OLD | NEW |