Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(377)

Unified Diff: chrome/browser/chromeos/customization_document_browsertest.cc

Issue 598023006: Add browser test for initial languages. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix test. Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « PRESUBMIT.py ('k') | chrome/chrome_tests.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/chromeos/customization_document_browsertest.cc
diff --git a/chrome/browser/chromeos/customization_document_browsertest.cc b/chrome/browser/chromeos/customization_document_browsertest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..a3d56819f1238e1864cc2b92890aa2fa5633ec57
--- /dev/null
+++ b/chrome/browser/chromeos/customization_document_browsertest.cc
@@ -0,0 +1,255 @@
+// Copyright 2014 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 "base/bind.h"
+#include "base/command_line.h"
+#include "base/strings/string_split.h"
+#include "base/strings/string_util.h"
+#include "base/threading/thread_restrictions.h"
+#include "chrome/browser/chromeos/base/locale_util.h"
+#include "chrome/browser/chromeos/customization_document.h"
+#include "chrome/browser/ui/webui/chromeos/login/l10n_util.h"
+#include "chrome/test/base/in_process_browser_test.h"
+#include "chromeos/system/fake_statistics_provider.h"
+#include "chromeos/system/statistics_provider.h"
+#include "content/public/test/test_utils.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/base/l10n/l10n_util.h"
+
+using chromeos::locale_util::SwitchLanguageCallback;
+using chromeos::locale_util::LanguageSwitchResult;
+
+namespace chromeos {
+
+namespace {
+
+class LanguageSwitchedWaiter {
+ public:
+ explicit LanguageSwitchedWaiter(SwitchLanguageCallback callback)
+ : callback_(callback),
+ finished_(false),
+ runner_(new content::MessageLoopRunner) {}
+
+ void ExitMessageLoop(const LanguageSwitchResult& result) {
+ finished_ = true;
+ runner_->Quit();
+ callback_.Run(result);
+ }
+
+ void Wait() {
+ if (finished_)
+ return;
+ runner_->Run();
+ }
+
+ SwitchLanguageCallback Callback() {
+ return SwitchLanguageCallback(base::Bind(
+ &LanguageSwitchedWaiter::ExitMessageLoop, base::Unretained(this)));
+ }
+
+ private:
+ SwitchLanguageCallback callback_;
+ bool finished_;
+ scoped_refptr<content::MessageLoopRunner> runner_;
+ DISALLOW_COPY_AND_ASSIGN(LanguageSwitchedWaiter);
+};
+
+const struct {
+ const char* locale_alias;
+ const char* locale_name;
+} locale_aliases[] = {{"en-AU", "en-GB"},
+ {"en-CA", "en-GB"},
+ {"en-NZ", "en-GB"},
+ {"en-ZA", "en-GB"},
+ {"fr-CA", "fr"},
+ {"no", "nb"},
+ {"iw", "he"}};
+
+// Several language IDs are actually aliases to another IDs, so real language
+// ID is reported as "loaded" when alias is requested.
+std::string GetExpectedLanguage(const std::string& required) {
+ std::string expected = required;
+
+ for (size_t i = 0; i < arraysize(locale_aliases); ++i) {
+ if (required != locale_aliases[i].locale_alias)
+ continue;
+
+ expected = locale_aliases[i].locale_name;
+ break;
+ }
+
+ return expected;
+}
+
+void VerifyLanguageSwitched(const LanguageSwitchResult& result) {
+ EXPECT_TRUE(result.success) << "SwitchLanguage failed: required='"
+ << result.requested_locale << "', actual='"
+ << result.loaded_locale
+ << "', success=" << result.success;
+ EXPECT_EQ(GetExpectedLanguage(result.requested_locale), result.loaded_locale)
+ << "SwitchLanguage failed: required='" << result.requested_locale
+ << "', actual='" << result.loaded_locale
+ << "', success=" << result.success;
+}
+
+std::string Print(const std::vector<std::string>& locales) {
+ std::string result("{");
+ for (size_t i = 0; i < locales.size(); ++i) {
+ if (i != 0) {
+ result += ", ";
+ }
+ result += "'";
+ result += locales[i];
+ result += "'";
+ }
+ result += "}";
+ return result;
+}
+
+const char* kVPDInitialLocales[] = {
+ "ar",
+ "ar,bg",
+ "ar,bg,bn",
+ "ar,bg,bn,ca",
+ "ar,bg,bn,ca,cs,da,de,el,en-AU,en-CA,en-GB,en-NZ,en-US,en-ZA,es,es-419,et,"
+ "fa,fi,fil,fr,fr-CA,gu,he,hi,hr,hu,id,it,ja,kn,ko,lt,lv,ml,mr,ms,nl,nb,pl,"
+ "pt-BR,pt-PT,ro,ru,sk,sl,sr,sv,ta,te,th,tr,vi,zh-CN,zh-TW",
+};
+
+const std::vector<std::string> languages_available = {
+ "ar",
+ "bg",
+ "bn",
+ "ca",
+ "cs",
+ "da",
+ "de",
+ "el",
+ "en-AU",
+ "en-CA",
+ "en-GB",
+ "en-NZ",
+ "en-US",
+ "en-ZA",
+ "es",
+ "es-419",
+ "et",
+ "fa",
+ "fi",
+ "fil",
+ "fr",
+ "fr-CA",
+ "gu",
+ "he",
+ "hi",
+ "hr",
+ "hu",
+ "id",
+ "it",
+ "ja",
+ "kn",
+ "ko",
+ "lt",
+ "lv",
+ "ml",
+ "mr",
+ "ms",
+ "nl",
+ "nb",
+ "pl",
+ "pt-BR",
+ "pt-PT",
+ "ro",
+ "ru",
+ "sk",
+ "sl",
+ "sr",
+ "sv",
+ "ta",
+ "te",
+ "th",
+ "tr",
+ "vi",
+ "zh-CN",
+ "zh-TW"
+};
+
+} // anonymous namespace
+
+typedef InProcessBrowserTest CustomizationLocaleTest;
+
+IN_PROC_BROWSER_TEST_F(CustomizationLocaleTest, CheckAvailableLocales) {
+ for (size_t i = 0; i < languages_available.size(); ++i) {
+ LanguageSwitchedWaiter waiter(base::Bind(&VerifyLanguageSwitched));
+ locale_util::SwitchLanguage(languages_available[i], true, true,
+ waiter.Callback());
+ waiter.Wait();
+ {
+ std::string resolved_locale;
+ base::ThreadRestrictions::ScopedAllowIO allow_io;
+ l10n_util::CheckAndResolveLocale(languages_available[i],
+ &resolved_locale);
+ EXPECT_EQ(GetExpectedLanguage(languages_available[i]), resolved_locale)
+ << "CheckAndResolveLocale() failed for language='"
+ << languages_available[i] << "'";
+ }
+ }
+}
+
+class CustomizationVPDTest : public InProcessBrowserTest,
+ public testing::WithParamInterface<const char*> {
+ public:
+ CustomizationVPDTest()
+ : statistics_provider_(new system::FakeStatisticsProvider()) {
+ // Set the instance returned by GetInstance() for testing.
+ system::StatisticsProvider::SetTestProvider(statistics_provider_.get());
+ statistics_provider_->SetMachineStatistic("initial_locale", GetParam());
+ statistics_provider_->SetMachineStatistic("keyboard_layout", "");
+ }
+
+ private:
+ scoped_ptr<system::FakeStatisticsProvider> statistics_provider_;
+};
+
+IN_PROC_BROWSER_TEST_P(CustomizationVPDTest, GetUILanguageList) {
+ std::vector<std::string> locales;
+ base::SplitString(GetParam(), ',', &locales);
+
+ for (std::string& l : locales) {
+ base::TrimString(l, " ", &l);
+ }
+ EXPECT_EQ(locales,
+ StartupCustomizationDocument::GetInstance()->configured_locales())
+ << "Test failed for initial_locale='" << GetParam()
+ << "', locales=" << Print(locales);
+
+ scoped_ptr<base::ListValue> ui_language_list = GetUILanguageList(NULL, "");
+ EXPECT_GE(ui_language_list->GetSize(), locales.size())
+ << "Test failed for initial_locale='" << GetParam() << "'";
+
+ for (size_t i = 0; i < ui_language_list->GetSize(); ++i) {
+ base::DictionaryValue* language_info = NULL;
+ ASSERT_TRUE(ui_language_list->GetDictionary(i, &language_info))
+ << "Test failed for initial_locale='" << GetParam() << "', i=" << i;
+
+ std::string value;
+ ASSERT_TRUE(language_info->GetString("value", &value))
+ << "Test failed for initial_locale='" << GetParam() << "', i=" << i;
+
+ if (i < locales.size()) {
+ EXPECT_EQ(locales[i], value) << "Test failed for initial_locale='"
+ << GetParam() << "', i=" << i;
+ } else {
+ EXPECT_EQ(kMostRelevantLanguagesDivider, value)
+ << "Test failed for initial_locale='" << GetParam() << "', i=" << i;
+ break;
+ }
+ }
+}
+
+INSTANTIATE_TEST_CASE_P(StringSequence,
+ CustomizationVPDTest,
+ testing::ValuesIn(kVPDInitialLocales));
+
+} // namespace chromeos
« no previous file with comments | « PRESUBMIT.py ('k') | chrome/chrome_tests.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698