- add sources.
[platform/framework/web/crosswalk.git] / src / components / translate / common / translate_metrics_unittest.cc
1 // Copyright 2013 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 "components/translate/common/translate_metrics.h"
6
7 #include "base/basictypes.h"
8 #include "base/memory/scoped_ptr.h"
9 #include "base/metrics/histogram.h"
10 #include "base/metrics/histogram_samples.h"
11 #include "base/metrics/statistics_recorder.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13 #include "testing/platform_test.h"
14
15 using base::HistogramBase;
16 using base::HistogramSamples;
17 using base::SampleCountIterator;
18 using base::StatisticsRecorder;
19 using base::TimeTicks;
20
21 namespace {
22
23 const int kTrue = 1;
24 const int kFalse = 0;
25
26 class MetricsRecorder {
27  public:
28   explicit MetricsRecorder(const char* key) : key_(key) {
29     StatisticsRecorder::Initialize();
30
31     HistogramBase* histogram = StatisticsRecorder::FindHistogram(key_);
32     if (histogram)
33       base_samples_ = histogram->SnapshotSamples();
34   }
35
36   void CheckLanguage(translate::MetricsNameIndex index,
37                      int expected_not_provided,
38                      int expected_valid,
39                      int expected_invalid) {
40     ASSERT_EQ(translate::GetMetricsName(index), key_);
41
42     Snapshot();
43
44     EXPECT_EQ(expected_not_provided,
45               GetCountWithoutSnapshot(translate::LANGUAGE_NOT_PROVIDED));
46     EXPECT_EQ(expected_valid,
47               GetCountWithoutSnapshot(translate::LANGUAGE_VALID));
48     EXPECT_EQ(expected_invalid,
49               GetCountWithoutSnapshot(translate::LANGUAGE_INVALID));
50   }
51
52   void CheckLanguageVerification(int expected_cld_disabled,
53                                  int expected_cld_only,
54                                  int expected_unknown,
55                                  int expected_cld_agree,
56                                  int expected_cld_disagree,
57                                  int expected_trust_cld,
58                                  int expected_cld_complement_sub_code) {
59     ASSERT_EQ(translate::GetMetricsName(translate::UMA_LANGUAGE_VERIFICATION),
60               key_);
61
62     Snapshot();
63
64     EXPECT_EQ(
65         expected_cld_disabled,
66         GetCountWithoutSnapshot(translate::LANGUAGE_VERIFICATION_CLD_DISABLED));
67     EXPECT_EQ(
68         expected_cld_only,
69         GetCountWithoutSnapshot(translate::LANGUAGE_VERIFICATION_CLD_ONLY));
70     EXPECT_EQ(
71         expected_unknown,
72         GetCountWithoutSnapshot(translate::LANGUAGE_VERIFICATION_UNKNOWN));
73     EXPECT_EQ(
74         expected_cld_agree,
75         GetCountWithoutSnapshot(translate::LANGUAGE_VERIFICATION_CLD_AGREE));
76     EXPECT_EQ(
77         expected_cld_disagree,
78         GetCountWithoutSnapshot(translate::LANGUAGE_VERIFICATION_CLD_DISAGREE));
79     EXPECT_EQ(
80         expected_trust_cld,
81         GetCountWithoutSnapshot(translate::LANGUAGE_VERIFICATION_TRUST_CLD));
82     EXPECT_EQ(expected_cld_complement_sub_code,
83               GetCountWithoutSnapshot(
84                   translate::LANGUAGE_VERIFICATION_CLD_COMPLEMENT_SUB_CODE));
85   }
86
87   void CheckScheme(int expected_http, int expected_https, int expected_others) {
88     ASSERT_EQ(translate::GetMetricsName(translate::UMA_PAGE_SCHEME), key_);
89
90     Snapshot();
91
92     EXPECT_EQ(expected_http, GetCountWithoutSnapshot(translate::SCHEME_HTTP));
93     EXPECT_EQ(expected_https, GetCountWithoutSnapshot(translate::SCHEME_HTTPS));
94     EXPECT_EQ(expected_others,
95               GetCountWithoutSnapshot(translate::SCHEME_OTHERS));
96   }
97
98   void CheckTotalCount(int count) {
99     Snapshot();
100     EXPECT_EQ(count, GetTotalCount());
101   }
102
103   void CheckValueInLogs(double value) {
104     Snapshot();
105     ASSERT_TRUE(samples_.get());
106     for (scoped_ptr<SampleCountIterator> i = samples_->Iterator(); !i->Done();
107          i->Next()) {
108       HistogramBase::Sample min;
109       HistogramBase::Sample max;
110       HistogramBase::Count count;
111       i->Get(&min, &max, &count);
112       if (min <= value && value <= max && count >= 1)
113         return;
114     }
115     EXPECT_FALSE(true);
116   }
117
118   HistogramBase::Count GetCount(HistogramBase::Sample value) {
119     Snapshot();
120     return GetCountWithoutSnapshot(value);
121   }
122
123  private:
124   void Snapshot() {
125     HistogramBase* histogram = StatisticsRecorder::FindHistogram(key_);
126     if (!histogram)
127       return;
128     samples_ = histogram->SnapshotSamples();
129   }
130
131   HistogramBase::Count GetCountWithoutSnapshot(HistogramBase::Sample value) {
132     if (!samples_.get())
133       return 0;
134     HistogramBase::Count count = samples_->GetCount(value);
135     if (!base_samples_.get())
136       return count;
137     return count - base_samples_->GetCount(value);
138   }
139
140   HistogramBase::Count GetTotalCount() {
141     if (!samples_.get())
142       return 0;
143     HistogramBase::Count count = samples_->TotalCount();
144     if (!base_samples_.get())
145       return count;
146     return count - base_samples_->TotalCount();
147   }
148
149   std::string key_;
150   scoped_ptr<HistogramSamples> base_samples_;
151   scoped_ptr<HistogramSamples> samples_;
152
153   DISALLOW_COPY_AND_ASSIGN(MetricsRecorder);
154 };
155
156 }  // namespace
157
158 TEST(TranslateMetricsTest, ReportContentLanguage) {
159   MetricsRecorder recorder(
160       translate::GetMetricsName(translate::UMA_CONTENT_LANGUAGE));
161
162   recorder.CheckLanguage(translate::UMA_CONTENT_LANGUAGE, 0, 0, 0);
163   translate::ReportContentLanguage(std::string(), std::string());
164   recorder.CheckLanguage(translate::UMA_CONTENT_LANGUAGE, 1, 0, 0);
165   translate::ReportContentLanguage("ja_JP", "ja-JP");
166   recorder.CheckLanguage(translate::UMA_CONTENT_LANGUAGE, 1, 0, 1);
167   translate::ReportContentLanguage("en", "en");
168   recorder.CheckLanguage(translate::UMA_CONTENT_LANGUAGE, 1, 1, 1);
169 }
170
171 TEST(TranslateMetricsTest, ReportHtmlLang) {
172   MetricsRecorder recorder(translate::GetMetricsName(translate::UMA_HTML_LANG));
173
174   recorder.CheckLanguage(translate::UMA_HTML_LANG, 0, 0, 0);
175   translate::ReportHtmlLang(std::string(), std::string());
176   recorder.CheckLanguage(translate::UMA_HTML_LANG, 1, 0, 0);
177   translate::ReportHtmlLang("ja_JP", "ja-JP");
178   recorder.CheckLanguage(translate::UMA_HTML_LANG, 1, 0, 1);
179   translate::ReportHtmlLang("en", "en");
180   recorder.CheckLanguage(translate::UMA_HTML_LANG, 1, 1, 1);
181 }
182
183 TEST(TranslateMetricsTest, ReportLanguageVerification) {
184   MetricsRecorder recorder(
185       translate::GetMetricsName(translate::UMA_LANGUAGE_VERIFICATION));
186
187   recorder.CheckLanguageVerification(0, 0, 0, 0, 0, 0, 0);
188   translate::ReportLanguageVerification(
189       translate::LANGUAGE_VERIFICATION_CLD_DISABLED);
190   recorder.CheckLanguageVerification(1, 0, 0, 0, 0, 0, 0);
191   translate::ReportLanguageVerification(
192       translate::LANGUAGE_VERIFICATION_CLD_ONLY);
193   recorder.CheckLanguageVerification(1, 1, 0, 0, 0, 0, 0);
194   translate::ReportLanguageVerification(
195       translate::LANGUAGE_VERIFICATION_UNKNOWN);
196   recorder.CheckLanguageVerification(1, 1, 1, 0, 0, 0, 0);
197   translate::ReportLanguageVerification(
198       translate::LANGUAGE_VERIFICATION_CLD_AGREE);
199   recorder.CheckLanguageVerification(1, 1, 1, 1, 0, 0, 0);
200   translate::ReportLanguageVerification(
201       translate::LANGUAGE_VERIFICATION_CLD_DISAGREE);
202   recorder.CheckLanguageVerification(1, 1, 1, 1, 1, 0, 0);
203   translate::ReportLanguageVerification(
204       translate::LANGUAGE_VERIFICATION_TRUST_CLD);
205   recorder.CheckLanguageVerification(1, 1, 1, 1, 1, 1, 0);
206   translate::ReportLanguageVerification(
207       translate::LANGUAGE_VERIFICATION_CLD_COMPLEMENT_SUB_CODE);
208   recorder.CheckLanguageVerification(1, 1, 1, 1, 1, 1, 1);
209 }
210
211 TEST(TranslateMetricsTest, ReportTimeToBeReady) {
212   MetricsRecorder recorder(
213       translate::GetMetricsName(translate::UMA_TIME_TO_BE_READY));
214   recorder.CheckTotalCount(0);
215   translate::ReportTimeToBeReady(3.14);
216   recorder.CheckValueInLogs(3.14);
217   recorder.CheckTotalCount(1);
218 }
219
220 TEST(TranslateMetricsTest, ReportTimeToLoad) {
221   MetricsRecorder recorder(
222       translate::GetMetricsName(translate::UMA_TIME_TO_LOAD));
223   recorder.CheckTotalCount(0);
224   translate::ReportTimeToLoad(573.0);
225   recorder.CheckValueInLogs(573.0);
226   recorder.CheckTotalCount(1);
227 }
228
229 TEST(TranslateMetricsTest, ReportTimeToTranslate) {
230   MetricsRecorder recorder(
231       translate::GetMetricsName(translate::UMA_TIME_TO_TRANSLATE));
232   recorder.CheckTotalCount(0);
233   translate::ReportTimeToTranslate(4649.0);
234   recorder.CheckValueInLogs(4649.0);
235   recorder.CheckTotalCount(1);
236 }
237
238 TEST(TranslateMetricsTest, ReportUserActionDuration) {
239   MetricsRecorder recorder(
240       translate::GetMetricsName(translate::UMA_USER_ACTION_DURATION));
241   recorder.CheckTotalCount(0);
242   TimeTicks begin = TimeTicks::Now();
243   TimeTicks end = begin + base::TimeDelta::FromSeconds(3776);
244   translate::ReportUserActionDuration(begin, end);
245   recorder.CheckValueInLogs(3776000.0);
246   recorder.CheckTotalCount(1);
247 }
248
249 TEST(TranslateMetricsTest, ReportPageScheme) {
250   MetricsRecorder recorder(
251       translate::GetMetricsName(translate::UMA_PAGE_SCHEME));
252   recorder.CheckScheme(0, 0, 0);
253   translate::ReportPageScheme("http");
254   recorder.CheckScheme(1, 0, 0);
255   translate::ReportPageScheme("https");
256   recorder.CheckScheme(1, 1, 0);
257   translate::ReportPageScheme("ftp");
258   recorder.CheckScheme(1, 1, 1);
259 }
260
261 TEST(TranslateMetricsTest, ReportSimilarLanguageMatch) {
262   MetricsRecorder recorder(
263       translate::GetMetricsName(translate::UMA_SIMILAR_LANGUAGE_MATCH));
264   recorder.CheckTotalCount(0);
265   EXPECT_EQ(0, recorder.GetCount(kTrue));
266   EXPECT_EQ(0, recorder.GetCount(kFalse));
267   translate::ReportSimilarLanguageMatch(true);
268   EXPECT_EQ(1, recorder.GetCount(kTrue));
269   EXPECT_EQ(0, recorder.GetCount(kFalse));
270   translate::ReportSimilarLanguageMatch(false);
271   EXPECT_EQ(1, recorder.GetCount(kTrue));
272   EXPECT_EQ(1, recorder.GetCount(kFalse));
273 }
274
275 TEST(TranslateMetricsTest, ReportLanguageDetectionTime) {
276   MetricsRecorder recorder(
277       translate::GetMetricsName(translate::UMA_LANGUAGE_DETECTION));
278   recorder.CheckTotalCount(0);
279   TimeTicks begin = TimeTicks::Now();
280   TimeTicks end = begin + base::TimeDelta::FromMicroseconds(9009);
281   translate::ReportLanguageDetectionTime(begin, end);
282   recorder.CheckValueInLogs(9.009);
283   recorder.CheckTotalCount(1);
284 }