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

Unified Diff: chrome/browser/chromeos/login/oobe_localization_browsertest.cc

Issue 167013004: Add support for multiply values in keyboard_layouts to OobeLocalizationTest. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 10 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/chromeos/login/oobe_localization_browsertest.cc
diff --git a/chrome/browser/chromeos/login/oobe_localization_browsertest.cc b/chrome/browser/chromeos/login/oobe_localization_browsertest.cc
index 9b9e07547c3cd982054a6df72fa56c62e150445c..4a2caa66a0e57d9cb58d029c7e5843f2d7733008 100644
--- a/chrome/browser/chromeos/login/oobe_localization_browsertest.cc
+++ b/chrome/browser/chromeos/login/oobe_localization_browsertest.cc
@@ -91,6 +91,10 @@ class OobeLocalizationTest : public InProcessBrowserTest {
// Returns true if the expression was successfully executed and returned true.
bool JsExecute(const std::string& expression);
+ // Returns true if the expression was successfully executed.
+ // Stored expression result to 'result'.
+ bool JsExecute(const std::string& expression, std::string* result);
+
// Verifies that the comma-separated |values| corresponds with the first
// values in |select_id|, optionally checking for an options group label after
// the first set of options.
@@ -101,12 +105,16 @@ class OobeLocalizationTest : public InProcessBrowserTest {
// Verifies that |value| exists in |select_id|.
void VerifyOptionExists(const char* select_id, const char* value);
+ // Dumps OOBE select control (language or keyboard) to string.
+ std::string DumpOptions(const char* select_id);
+
protected:
// Runs the test for the given locale and keyboard layout.
void RunLocalizationTest(const std::string& initial_locale,
const std::string& keyboard_layout,
const std::string& expected_locale,
- const std::string& expected_keyboard_layout);
+ const std::string& expected_keyboard_layout,
+ const std::string& expected_keyboard_select_control);
private:
scoped_ptr<system::FakeStatisticsProvider> statistics_provider_;
@@ -136,6 +144,18 @@ bool OobeLocalizationTest::JsExecute(const std::string& expression) {
return false;
}
+bool OobeLocalizationTest::JsExecute(const std::string& expression,
dzhioev (left Google) 2014/02/18 01:37:49 Don't you want to use JSChecker from chrome/browse
Alexander Alekseev 2014/02/18 13:38:43 Done.
+ std::string* out) {
+ chromeos::LoginDisplayHostImpl* display_host =
+ static_cast<chromeos::LoginDisplayHostImpl*>(
+ chromeos::LoginDisplayHostImpl::default_host());
+ const std::string js("window.domAutomationController.send(" + expression +
+ ");");
+
+ return content::ExecuteScriptAndExtractString(
+ display_host->GetOobeUI()->web_ui()->GetWebContents(), js, out);
+}
+
void OobeLocalizationTest::VerifyInitialOptions(const char* select_id,
const char* values,
bool check_separator) {
@@ -173,11 +193,60 @@ void OobeLocalizationTest::VerifyOptionExists(const char* select_id,
ASSERT_TRUE(JsExecute(expression)) << expression;
}
+std::string OobeLocalizationTest::DumpOptions(const char* select_id) {
+ const std::string expression = base::StringPrintf(
+ "\n"
dzhioev (left Google) 2014/02/18 01:37:49 I think it's better to define method (named dumpOp
Alexander Alekseev 2014/02/18 13:38:43 Discussed offline and decided to leave as it is fo
+ "(function () {\n"
+ " var selector = '#%s';\n"
+ " var divider = ',';\n"
+ " var select = document.querySelector(selector);\n"
+ " if (!select)\n"
+ " throw 'document.querySelector(' + selector + ') failed.';\n"
michaelpg 2014/02/17 22:39:10 If this throws, the test will hang until killed. C
Alexander Alekseev 2014/02/18 13:38:43 Done.
+ " var dumpOptgroup = function(group) {\n"
+ " var result = '';\n"
+ " for (var i = 0; i < group.children.length; i++) {\n"
+ " if (i > 0) {\n"
+ " result += divider;\n"
+ " }\n"
+ " if (group.children[i].value) {\n"
+ " result += group.children[i].value;\n"
+ " } else {\n"
+ " result += '__NO_VALUE__';\n"
+ " }\n"
+ " }\n"
+ " return result;\n"
+ " };\n"
+ " var result = '';\n"
+ " var children = select.children;\n"
+ " for (var i = 0; i < children.length; i++) {\n"
+ " if (i > 0) {\n"
+ " result += divider;\n"
+ " }\n"
+ " if (children[i].value) {\n"
+ " result += children[i].value;\n"
+ " } else if (children[i].tagName === 'OPTGROUP') {\n"
+ " result += '[' + dumpOptgroup(children[i]) + ']';\n"
+ " } else {\n"
+ " result += '__NO_VALUE__';\n"
+ " }\n"
+ " }\n"
+ " return result;\n"
+ "})()\n",
+ select_id);
+ std::string result;
+ if (!JsExecute(expression, &result)) {
+ return std::string("Expression '") + expression + "' failed (result='" +
+ result + "').";
+ }
+ return result;
+}
+
void OobeLocalizationTest::RunLocalizationTest(
const std::string& initial_locale,
const std::string& keyboard_layout,
const std::string& expected_locale,
- const std::string& expected_keyboard_layout) {
+ const std::string& expected_keyboard_layout,
+ const std::string& expected_keyboard_select_control) {
statistics_provider_->set_locale(initial_locale);
statistics_provider_->set_keyboard_layout(keyboard_layout);
@@ -199,6 +268,10 @@ void OobeLocalizationTest::RunLocalizationTest(
// Make sure we have a fallback keyboard.
VerifyOptionExists(kKeyboardSelect, kUSLayout);
+ // Note, that sort order is locale-specific, but is unlikely to change.
+ // Especially for keyboard layouts.
+ EXPECT_EQ(expected_keyboard_select_control, DumpOptions(kKeyboardSelect));
+
// Shut down the display host.
chromeos::LoginDisplayHostImpl::default_host()->Finalize();
base::MessageLoopForUI::current()->RunUntilIdle();
@@ -212,37 +285,54 @@ IN_PROC_BROWSER_TEST_F(OobeLocalizationTest, NetworkScreenNonLatin) {
// For a non-Latin keyboard layout like Russian, we expect to see the US
// keyboard.
RunLocalizationTest("ru", "xkb:ru::rus",
- "ru", kUSLayout);
+ "ru", kUSLayout,
+ "xkb:us::eng");
+
+ RunLocalizationTest("ru", "xkb:us::eng,xkb:ru::rus",
+ "ru", kUSLayout,
+ "xkb:us::eng");
// IMEs do not load at OOBE, so we just expect to see the (Latin) Japanese
// keyboard.
RunLocalizationTest("ja", "xkb:jp::jpn",
- "ja", "xkb:jp::jpn");
+ "ja", "xkb:jp::jpn",
+ "xkb:jp::jpn,[xkb:us::eng]");
}
IN_PROC_BROWSER_TEST_F(OobeLocalizationTest, NetworkScreenKeyboardLayout) {
// We don't use the Icelandic locale but the Icelandic keyboard layout
// should still be selected when specified as the default.
RunLocalizationTest("en-US", "xkb:is::ice",
- "en-US", "xkb:is::ice");
+ "en-US", "xkb:is::ice",
+ "xkb:is::ice,["
+ "xkb:us::eng,xkb:us:intl:eng,xkb:us:altgr-intl:eng,"
+ "xkb:us:dvorak:eng,xkb:us:colemak:eng]");
}
IN_PROC_BROWSER_TEST_F(OobeLocalizationTest, NetworkScreenFullLatin) {
// French Swiss keyboard.
RunLocalizationTest("fr", "xkb:ch:fr:fra",
- "fr", "xkb:ch:fr:fra");
+ "fr", "xkb:ch:fr:fra",
+ "xkb:ch:fr:fra,["
+ "xkb:fr::fra,xkb:be::fra,xkb:ca::fra,"
+ "xkb:ca:multix:fra,xkb:us::eng]");
// German Swiss keyboard.
RunLocalizationTest("de", "xkb:ch::ger",
- "de", "xkb:ch::ger");
+ "de", "xkb:ch::ger",
+ "xkb:ch::ger,["
+ "xkb:de::ger,xkb:de:neo:ger,xkb:be::ger,xkb:us::eng"
+ "]");
}
IN_PROC_BROWSER_TEST_F(OobeLocalizationTest, NetworkScreenMultipleLocales) {
- RunLocalizationTest("es,en-US,nl", "xkb:be::nld",
- "es,en-US,nl", "xkb:be::nld");
+ RunLocalizationTest("es,en-US,nl", "xkb:be::nld",
+ "es,en-US,nl", "xkb:be::nld",
+ "xkb:be::nld,[xkb:es::spa,xkb:latam::spa,xkb:us::eng]");
- RunLocalizationTest("ru,de", "xkb:ru::rus",
- "ru,de", kUSLayout);
+ RunLocalizationTest("ru,de", "xkb:ru::rus",
+ "ru,de", kUSLayout
michaelpg 2014/02/17 22:39:10 comma
Alexander Alekseev 2014/02/18 13:38:43 Done.
+ "xkb:us::eng");
}
} // namespace chromeos
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698