• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 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/language_usage_metrics/language_usage_metrics.h"
6 
7 #include "testing/gtest/include/gtest/gtest.h"
8 
9 namespace language_usage_metrics {
10 
TEST(LanguageUsageMetricsTest,ParseAcceptLanguages)11 TEST(LanguageUsageMetricsTest, ParseAcceptLanguages) {
12   std::set<int> language_set;
13   std::set<int>::const_iterator it;
14 
15   const int ENGLISH = 25966;
16   const int SPANISH = 25971;
17   const int JAPANESE = 27233;
18 
19   // Basic single language case.
20   LanguageUsageMetrics::ParseAcceptLanguages("ja", &language_set);
21   EXPECT_EQ(1U, language_set.size());
22   EXPECT_EQ(JAPANESE, *language_set.begin());
23 
24   // Empty language.
25   LanguageUsageMetrics::ParseAcceptLanguages(std::string(), &language_set);
26   EXPECT_EQ(0U, language_set.size());
27 
28   // Country code is ignored.
29   LanguageUsageMetrics::ParseAcceptLanguages("ja-JP", &language_set);
30   EXPECT_EQ(1U, language_set.size());
31   EXPECT_EQ(JAPANESE, *language_set.begin());
32 
33   // Case is ignored.
34   LanguageUsageMetrics::ParseAcceptLanguages("Ja-jP", &language_set);
35   EXPECT_EQ(1U, language_set.size());
36   EXPECT_EQ(JAPANESE, *language_set.begin());
37 
38   // Underscore as the separator.
39   LanguageUsageMetrics::ParseAcceptLanguages("ja_JP", &language_set);
40   EXPECT_EQ(1U, language_set.size());
41   EXPECT_EQ(JAPANESE, *language_set.begin());
42 
43   // The result contains a same language code only once.
44   LanguageUsageMetrics::ParseAcceptLanguages("ja-JP,ja", &language_set);
45   EXPECT_EQ(1U, language_set.size());
46   EXPECT_EQ(JAPANESE, *language_set.begin());
47 
48   // Basic two languages case.
49   LanguageUsageMetrics::ParseAcceptLanguages("en,ja", &language_set);
50   EXPECT_EQ(2U, language_set.size());
51   it = language_set.begin();
52   EXPECT_EQ(ENGLISH, *it);
53   EXPECT_EQ(JAPANESE, *++it);
54 
55   // Multiple languages.
56   LanguageUsageMetrics::ParseAcceptLanguages("ja-JP,en,es,ja,en-US",
57                                              &language_set);
58   EXPECT_EQ(3U, language_set.size());
59   it = language_set.begin();
60   EXPECT_EQ(ENGLISH, *it);
61   EXPECT_EQ(SPANISH, *++it);
62   EXPECT_EQ(JAPANESE, *++it);
63 
64   // Two empty languages.
65   LanguageUsageMetrics::ParseAcceptLanguages(",", &language_set);
66   EXPECT_EQ(0U, language_set.size());
67 
68   // Trailing comma.
69   LanguageUsageMetrics::ParseAcceptLanguages("ja,", &language_set);
70   EXPECT_EQ(1U, language_set.size());
71   EXPECT_EQ(JAPANESE, *language_set.begin());
72 
73   // Leading comma.
74   LanguageUsageMetrics::ParseAcceptLanguages(",es", &language_set);
75   EXPECT_EQ(1U, language_set.size());
76   EXPECT_EQ(SPANISH, *language_set.begin());
77 
78   // Combination of invalid and valid.
79   LanguageUsageMetrics::ParseAcceptLanguages("1234,en", &language_set);
80   EXPECT_EQ(1U, language_set.size());
81   it = language_set.begin();
82   EXPECT_EQ(ENGLISH, *it);
83 }
84 
TEST(LanguageUsageMetricsTest,ToLanguageCode)85 TEST(LanguageUsageMetricsTest, ToLanguageCode) {
86   const int SPANISH = 25971;
87   const int JAPANESE = 27233;
88 
89   // Basic case.
90   EXPECT_EQ(JAPANESE, LanguageUsageMetrics::ToLanguageCode("ja"));
91 
92   // Case is ignored.
93   EXPECT_EQ(SPANISH, LanguageUsageMetrics::ToLanguageCode("Es"));
94 
95   // Coutry code is ignored.
96   EXPECT_EQ(JAPANESE, LanguageUsageMetrics::ToLanguageCode("ja-JP"));
97 
98   // Invalid locales are considered as unknown language.
99   EXPECT_EQ(0, LanguageUsageMetrics::ToLanguageCode(std::string()));
100   EXPECT_EQ(0, LanguageUsageMetrics::ToLanguageCode("1234"));
101 
102   // "xx" is not acceptable because it doesn't exist in ISO 639-1 table.
103   // However, LanguageUsageMetrics doesn't tell what code is valid.
104   EXPECT_EQ(30840, LanguageUsageMetrics::ToLanguageCode("xx"));
105 }
106 
107 }  // namespace language_usage_metrics
108