Home | History | Annotate | Download | only in language_usage_metrics
      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 
     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 
     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