15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/language_usage_metrics/language_usage_metrics.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace language_usage_metrics { 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(LanguageUsageMetricsTest, ParseAcceptLanguages) { 1290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) std::set<int> language_set; 1390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) std::set<int>::const_iterator it; 1490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const int ENGLISH = 25966; 1690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const int SPANISH = 25971; 1790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const int JAPANESE = 27233; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Basic single language case. 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LanguageUsageMetrics::ParseAcceptLanguages("ja", &language_set); 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, language_set.size()); 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(JAPANESE, *language_set.begin()); 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Empty language. 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LanguageUsageMetrics::ParseAcceptLanguages(std::string(), &language_set); 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0U, language_set.size()); 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Country code is ignored. 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LanguageUsageMetrics::ParseAcceptLanguages("ja-JP", &language_set); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, language_set.size()); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(JAPANESE, *language_set.begin()); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Case is ignored. 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LanguageUsageMetrics::ParseAcceptLanguages("Ja-jP", &language_set); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, language_set.size()); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(JAPANESE, *language_set.begin()); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Underscore as the separator. 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LanguageUsageMetrics::ParseAcceptLanguages("ja_JP", &language_set); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, language_set.size()); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(JAPANESE, *language_set.begin()); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The result contains a same language code only once. 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LanguageUsageMetrics::ParseAcceptLanguages("ja-JP,ja", &language_set); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, language_set.size()); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(JAPANESE, *language_set.begin()); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Basic two languages case. 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LanguageUsageMetrics::ParseAcceptLanguages("en,ja", &language_set); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2U, language_set.size()); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it = language_set.begin(); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ENGLISH, *it); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(JAPANESE, *++it); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Multiple languages. 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LanguageUsageMetrics::ParseAcceptLanguages("ja-JP,en,es,ja,en-US", 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &language_set); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(3U, language_set.size()); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it = language_set.begin(); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ENGLISH, *it); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(SPANISH, *++it); 6290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(JAPANESE, *++it); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Two empty languages. 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LanguageUsageMetrics::ParseAcceptLanguages(",", &language_set); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0U, language_set.size()); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Trailing comma. 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LanguageUsageMetrics::ParseAcceptLanguages("ja,", &language_set); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, language_set.size()); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(JAPANESE, *language_set.begin()); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Leading comma. 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LanguageUsageMetrics::ParseAcceptLanguages(",es", &language_set); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, language_set.size()); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(SPANISH, *language_set.begin()); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Combination of invalid and valid. 7990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) LanguageUsageMetrics::ParseAcceptLanguages("1234,en", &language_set); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, language_set.size()); 8190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) it = language_set.begin(); 8290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(ENGLISH, *it); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)TEST(LanguageUsageMetricsTest, ToLanguageCode) { 8690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const int SPANISH = 25971; 8790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const int JAPANESE = 27233; 8890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Basic case. 9090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(JAPANESE, LanguageUsageMetrics::ToLanguageCode("ja")); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Case is ignored. 9390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(SPANISH, LanguageUsageMetrics::ToLanguageCode("Es")); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Coutry code is ignored. 9690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(JAPANESE, LanguageUsageMetrics::ToLanguageCode("ja-JP")); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Invalid locales are considered as unknown language. 9990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(0, LanguageUsageMetrics::ToLanguageCode(std::string())); 10090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(0, LanguageUsageMetrics::ToLanguageCode("1234")); 10190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 10290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // "xx" is not acceptable because it doesn't exist in ISO 639-1 table. 10390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // However, LanguageUsageMetrics doesn't tell what code is valid. 10490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(30840, LanguageUsageMetrics::ToLanguageCode("xx")); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} // namespace language_usage_metrics 108