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