diff options
author | yuzo@chromium.org <yuzo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-21 08:42:08 +0000 |
---|---|---|
committer | yuzo@chromium.org <yuzo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-21 08:42:08 +0000 |
commit | 0426103d3c8a307b691bdf7752ce8bdf75c3e638 (patch) | |
tree | 643cfa100ad3d705575fd08c2178386df91a80ce /chrome/browser/language_usage_metrics_unittest.cc | |
parent | 8b7ddc7fa369ba9bb74d784cc13f3eda98361246 (diff) | |
download | chromium_src-0426103d3c8a307b691bdf7752ce8bdf75c3e638.zip chromium_src-0426103d3c8a307b691bdf7752ce8bdf75c3e638.tar.gz chromium_src-0426103d3c8a307b691bdf7752ce8bdf75c3e638.tar.bz2 |
Record language usage as UMA histograms.
Record accept languages and application language as UMA histograms on
browser start-up.
See also http://crosbug.com/17419
BUG=none
TEST=run the unit tests
Review URL: http://codereview.chromium.org/7348004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@93360 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/language_usage_metrics_unittest.cc')
-rw-r--r-- | chrome/browser/language_usage_metrics_unittest.cc | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/chrome/browser/language_usage_metrics_unittest.cc b/chrome/browser/language_usage_metrics_unittest.cc new file mode 100644 index 0000000..db6e987 --- /dev/null +++ b/chrome/browser/language_usage_metrics_unittest.cc @@ -0,0 +1,91 @@ +// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/language_usage_metrics.h" + +#include "testing/gtest/include/gtest/gtest.h" + +TEST(LanguageUsageMetricsTest, ParseAcceptLanguages) { + std::set<Language> language_set; + std::set<Language>::const_iterator it; + + // Basic single language case. + LanguageUsageMetrics::ParseAcceptLanguages("ja", &language_set); + EXPECT_EQ(1U, language_set.size()); + EXPECT_EQ(JAPANESE, *language_set.begin()); + + // Empty language. + LanguageUsageMetrics::ParseAcceptLanguages("", &language_set); + EXPECT_EQ(0U, language_set.size()); + + // Country code is ignored. + LanguageUsageMetrics::ParseAcceptLanguages("ja-JP", &language_set); + EXPECT_EQ(1U, language_set.size()); + EXPECT_EQ(JAPANESE, *language_set.begin()); + + // Case is ignored. + LanguageUsageMetrics::ParseAcceptLanguages("Ja-jP", &language_set); + EXPECT_EQ(1U, language_set.size()); + EXPECT_EQ(JAPANESE, *language_set.begin()); + + // Underscore as the separator. + LanguageUsageMetrics::ParseAcceptLanguages("ja_JP", &language_set); + EXPECT_EQ(1U, language_set.size()); + EXPECT_EQ(JAPANESE, *language_set.begin()); + + // The result contains a same language code only once. + LanguageUsageMetrics::ParseAcceptLanguages("ja-JP,ja", &language_set); + EXPECT_EQ(1U, language_set.size()); + EXPECT_EQ(JAPANESE, *language_set.begin()); + + // Basic two languages case. + LanguageUsageMetrics::ParseAcceptLanguages("en,ja", &language_set); + EXPECT_EQ(2U, language_set.size()); + it = language_set.begin(); + EXPECT_EQ(ENGLISH, *it); + EXPECT_EQ(JAPANESE, *++it); + + // Multiple languages. + LanguageUsageMetrics::ParseAcceptLanguages("ja-JP,en,es,ja,en-US", + &language_set); + EXPECT_EQ(3U, language_set.size()); + it = language_set.begin(); + EXPECT_EQ(ENGLISH, *it); + EXPECT_EQ(JAPANESE, *++it); + EXPECT_EQ(SPANISH, *++it); + + // Two empty languages. + LanguageUsageMetrics::ParseAcceptLanguages(",", &language_set); + EXPECT_EQ(0U, language_set.size()); + + // Trailing comma. + LanguageUsageMetrics::ParseAcceptLanguages("ja,", &language_set); + EXPECT_EQ(1U, language_set.size()); + EXPECT_EQ(JAPANESE, *language_set.begin()); + + // Leading comma. + LanguageUsageMetrics::ParseAcceptLanguages(",es", &language_set); + EXPECT_EQ(1U, language_set.size()); + EXPECT_EQ(SPANISH, *language_set.begin()); + + // Combination of invalid and valid. + LanguageUsageMetrics::ParseAcceptLanguages("zz,en", &language_set); + EXPECT_EQ(1U, language_set.size()); + EXPECT_EQ(ENGLISH, *language_set.begin()); +} + +TEST(LanguageUsageMetricsTest, ToLanguage) { + // Basic case. + EXPECT_EQ(JAPANESE, LanguageUsageMetrics::ToLanguage("ja")); + + // Case is ignored. + EXPECT_EQ(SPANISH, LanguageUsageMetrics::ToLanguage("Es")); + + // Coutry code is ignored. + EXPECT_EQ(JAPANESE, LanguageUsageMetrics::ToLanguage("ja-JP")); + + // Invalid locales are considered as unknown language. + EXPECT_EQ(UNKNOWN_LANGUAGE, LanguageUsageMetrics::ToLanguage("")); + EXPECT_EQ(UNKNOWN_LANGUAGE, LanguageUsageMetrics::ToLanguage("xx")); +} |