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

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: Created 6 years, 3 months 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
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..170bcbc53c4aa5ff58dac174feb61f83e0e5c616
--- /dev/null
+++ b/chrome/browser/chromeos/customization_document_browsertest.cc
@@ -0,0 +1,214 @@
+// 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 <sstream>
+
+#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 "content/public/test/test_utils.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/base/l10n/l10n_util.h"
+
+namespace chromeos {
+
+namespace {
+
+class LanguageSwitchedWaiter {
+ public:
+ explicit LanguageSwitchedWaiter(locale_util::SwitchLanguageCallback callback)
+ : callback_(callback),
+ finished_(false),
+ runner_(new content::MessageLoopRunner){};
+ ~LanguageSwitchedWaiter(){};
+
+ void ExitMessageLoop(const std::string& required,
+ const std::string& actual,
+ const bool success) {
+ finished_ = true;
+ runner_->Quit();
+ callback_.Run(required, actual, success);
+ }
+
+ void Wait() {
+ if (finished_)
+ return;
+ runner_->Run();
+ }
+
+ scoped_ptr<locale_util::SwitchLanguageCallback> Callback() {
+ using namespace locale_util;
Dmitry Polukhin 2014/09/30 09:29:54 Please write 'using locale_util::SwitchLanguageCal
Alexander Alekseev 2014/10/02 14:05:54 Done.
+ return scoped_ptr<SwitchLanguageCallback>(
+ new SwitchLanguageCallback(
+ base::Bind(&LanguageSwitchedWaiter::ExitMessageLoop,
+ base::Unretained(this)))).Pass();
+ }
+
+ private:
+ locale_util::SwitchLanguageCallback callback_;
+ bool finished_;
+ scoped_refptr<content::MessageLoopRunner> runner_;
+ DISALLOW_COPY_AND_ASSIGN(LanguageSwitchedWaiter);
+};
+
+std::string GetExpectedLanguage(const std::string& required) {
Dmitry Polukhin 2014/09/30 09:29:54 Please add comment why this mismatch happens.
Alexander Alekseev 2014/10/02 14:05:54 Done.
+ std::string expected = required;
+ if (required == "en-AU") {
+ expected = "en-GB";
+ } else if (required == "en-CA") {
+ expected = "en-GB";
+ } else if (required == "en-NZ") {
+ expected = "en-GB";
+ } else if (required == "en-ZA") {
+ expected = "en-GB";
+ } else if (required == "fr-CA") {
+ expected = "fr";
+ } else if (required == "no") {
+ expected = "nb";
+ } else if (required == "iw") {
+ expected = "he";
+ }
+ return expected;
+}
+
+void VerifyLanguageSwitched(const std::string& required,
+ const std::string& actual,
+ const bool success) {
+ EXPECT_TRUE(success) << "SwitchLanguage failed: required='" << required
+ << "', actual='" << actual << "', success=" << success;
+ EXPECT_EQ(GetExpectedLanguage(required), actual)
+ << "SwitchLanguage failed: required='" << required << "', actual='"
+ << actual << "', success=" << success;
+}
+
+std::string Print(const std::vector<std::string>& locales) {
+ std::ostringstream os;
Dmitry Polukhin 2014/09/30 09:29:55 It is just simple string concatenation, you don't
Alexander Alekseev 2014/10/02 14:05:54 Done.
+ os << "{";
+ for (size_t i = 0; i < locales.size(); ++i) {
+ if (i != 0) {
+ os << ", ";
+ }
+ os << "'" << locales[i] << "'";
+ }
+ os << "}";
+ return os.str();
+}
+
+const char* kVPDInitialLocales[] = {
+ "en-AU",
+ "en-GB",
+ "en-US",
+};
+
+const std::vector<std::string> languages_available = {
+ "en-AU",
+ "en-GB",
+ "en-US",
+ "fr",
+ "fr-CA",
+ "he",
+ "iw",
+ "nb",
+ "no",
+};
+
+} // anonymous namespace
+
+class CustomizationLocaleTest : public InProcessBrowserTest {
+ public:
+ CustomizationLocaleTest() {}
+ virtual ~CustomizationLocaleTest() {}
+
+ virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE {
Dmitry Polukhin 2014/09/30 09:29:54 It looks like there is no need to override functio
Alexander Alekseev 2014/10/03 12:59:17 Done.
+ InProcessBrowserTest::SetUpCommandLine(command_line);
+ }
+
+ virtual void SetUpOnMainThread() OVERRIDE {
Dmitry Polukhin 2014/09/30 09:29:54 Ditto.
Alexander Alekseev 2014/10/02 14:05:54 Done.
+ InProcessBrowserTest::SetUpOnMainThread();
+ }
+};
+
+IN_PROC_BROWSER_TEST_F(CustomizationLocaleTest, CheckAvailableLocales) {
+ for (size_t i = 0; i < languages_available.size(); ++i) {
+ LanguageSwitchedWaiter waiter(base::Bind(&VerifyLanguageSwitched));
+ chromeos::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*> {
Dmitry Polukhin 2014/09/30 09:29:54 Indent.
Alexander Alekseev 2014/10/02 14:05:54 Done.
+ public:
+ CustomizationVPDTest() {}
+ virtual ~CustomizationVPDTest() {}
+
+ virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE {
Dmitry Polukhin 2014/09/30 09:29:54 Ditto.
Alexander Alekseev 2014/10/02 14:05:54 Done.
+ InProcessBrowserTest::SetUpCommandLine(command_line);
+ }
+
+ virtual void SetUpOnMainThread() OVERRIDE {
Dmitry Polukhin 2014/09/30 09:29:54 Ditto.
Alexander Alekseev 2014/10/02 14:05:54 Done.
+ InProcessBrowserTest::SetUpOnMainThread();
+ }
+};
+
+IN_PROC_BROWSER_TEST_P(CustomizationVPDTest, GetUILanguageList) {
+ chromeos::SetEnforceInitialLocaleForTesting(GetParam());
+
+ std::vector<std::string> locales;
+ base::SplitString(GetParam(), ',', &locales);
+
+ for (std::string& l : locales) {
+ base::TrimString(l, " ", &l);
+ }
+ EXPECT_EQ(locales,
+ chromeos::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(chromeos::kMostRelevantLanguagesDivider, value)
+ << "Test failed for initial_locale='" << GetParam() << "', i=" << i;
+ break;
+ }
+ }
+}
+
+INSTANTIATE_TEST_CASE_P(StringSequence,
+ CustomizationVPDTest,
+ testing::ValuesIn(kVPDInitialLocales));
+
+} // namespace chromeos

Powered by Google App Engine
This is Rietveld 408576698