factory_SelectKeyboard: allow overriding list from test_list
Each partner may have their own perference for keyboard layout / locale (even
timezone) selection. We should allow setting supported combination from some
where they can edit (i.e., the test list).
The default list is reduced to contain only 4 layouts.
BUG=chromium-os:15190
TEST=run factory_SelectKeyboard; # seeing default keyboard layout list
edit test_list to assigng kb_map; # seeing modified keyboard layout list
Change-Id: Id416254f67702bbe25e0242380006f7affad96cb
Reviewed-on: http://gerrit.chromium.org/gerrit/667
Reviewed-by: Yusuke Sato <yusukes@chromium.org>
Reviewed-by: Nikita Kostylev <nkostylev@chromium.org>
Reviewed-by: Nick Sanders <nsanders@chromium.org>
Tested-by: Hung-Te Lin <hungte@chromium.org>
diff --git a/client/site_tests/factory_SelectKeyboard/factory_SelectKeyboard.py b/client/site_tests/factory_SelectKeyboard/factory_SelectKeyboard.py
index 92048e4..e95b4af 100644
--- a/client/site_tests/factory_SelectKeyboard/factory_SelectKeyboard.py
+++ b/client/site_tests/factory_SelectKeyboard/factory_SelectKeyboard.py
@@ -1,11 +1,12 @@
-# Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
+# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# DESCRIPTION :
#
-# Select the keyboard type, and write to VPD.
+# Select the keyboard type (and all other locale/timezone information), and
+# write to VPD.
import gtk
@@ -20,32 +21,42 @@
from autotest_lib.client.bin import test
from autotest_lib.client.common_lib import error
-# Mapping between menu choice and KB.
-# Ref: http://git.chromium.org/gitweb/?\
-# p=chromiumos/platform/assets.git;a=blob;f=input_methods/whitelist.txt;hb=HEAD
-# Ref: http://google.com/codesearch/p?hl=en#\
-# OAMlx_jo-ck/src/ui/base/l10n/l10n_util.cc\
-# &q=kAcceptLanguageList&exact_package=chromium&sa=N&cd=1&ct=rc
-kb_map = (
+# TODO(hungte) add timezone
+
+# References
+# - Keyboard: http://git.chromium.org/gitweb/?p=chromiumos/platform/assets.git;a=blob;f=input_methods/whitelist.txt;hb=HEAD
+# - Locale: http://google.com/codesearch/p?#OAMlx_jo-ck/src/ui/base/l10n/l10n_util.cc&q=kAcceptLanguageList
+# - Time Zone: http://google.com/codesearch/p?#OAMlx_jo-ck/src/chrome/browser/ui/webui/options/chromeos/system_settings_provider.cc&q=kTimeZones
+
+# Mapping between menu choice and database.
+DEFAULT_KBD_LAYOUT_MAP = (
('', '', 'None (ignore)'),
('xkb:us::eng', 'en-US', 'US - English'),
('xkb:gb:extd:eng', 'en-GB', 'United Kingdom - English'),
('xkb:fr::fra', 'fr-FR', 'France - French'),
('xkb:de::ger', 'de-DE', 'Germany - German'),
- ('xkb:it::ita', 'it-IT', 'Italy - Italian'),
- ('xkb:pt::por', 'pt-PT', 'Portugal - Portuguese'),
- ('xkb:es::spa', 'es', 'Spain - Spanish'),
- ('xkb:nl::nld', 'nl', 'Netherlands - Dutch'),
- ('xkb:jp::jpn', 'ja', 'Japan - Japanese'),
# Uncomment layouts you need from following list.
+ # Netherlands is known to use xkb:us:intl:eng more than xkb:nl:nld.
+ #('xkb:us:intl:eng', 'nl', 'Netherlands - Dutch (US layout)'),
+ #('xkb:nl::nld', 'nl', 'Netherlands - Dutch'),
+
+ # TODO(hungte) Belgium should be nl-BE, de-BE, fr-BE; however these locales
+ # are not supported yet. Add extra locales after Chrome supports them.
+ #('xkb:be::nld', 'nl', 'Belgium - Dutch'),
+ #('xkb:be::ger', 'de', 'Belgium - German'),
#('xkb:be::fra', 'fr', 'Belgium - French'),
+
+ # TODO(hungte) es419 has same issue as Belgium. Add extra locales after Chrome
+ # supports them.
+ #('xkb:latam::spa', 'es-419', 'Latin America - Spanish'),
+
#('xkb:ca::fra', 'fr-CA', 'Canada - French'),
#('xkb:ch:fr:fra', 'fr-CH', 'Switzerland - French'),
#('xkb:de:neo:ger', 'de', 'Germany - Neo 2'),
- #('xkb:be::ger', 'de', 'Belgium - German'),
#('xkb:ch::ger', 'de-CH', 'Switzerland - German'),
+ #('xkb:jp::jpn', 'ja', 'Japan - Japanese'),
#('xkb:ru::rus', 'ru', 'Russia - Russian'),
#('xkb:ru:phonetic:rus', 'ru', 'Russia - Phonetic - Russian'),
#('xkb:us:altgr-intl:eng', 'en-US', 'US - Extended (AltGr) - English'),
@@ -58,20 +69,27 @@
#('xkb:ca:eng:eng', 'ca', 'Canada - English'),
#('xkb:cz::cze', 'cs', 'Czech Republic - Czech'),
#('xkb:ee::est', 'et', 'Estonia - Estonian'),
+ #('xkb:es::spa', 'es', 'Spain - Spanish'),
#('xkb:es:cat:cat', 'ca', 'Spain - Catalan'),
#('xkb:dk::dan', 'da', 'Denmark - Danish'),
#('xkb:gr::gre', 'el', 'Greece - Greek'),
#('xkb:il::heb', 'iw', 'Israel - Hebrew'),
#('xkb:kr:kr104:kor', 'ko', 'Korea - Korean (101/104 key Compatible)'),
- #('xkb:latam::spa', 'es-419', 'Latin America - Spanish'),
#('xkb:lt::lit', 'lt', 'Lithuania - Lithuanian'),
#('xkb:lv:apostrophe:lav', 'lv', 'Latvia - Latvian (Apostrophe variant)'),
#('xkb:hr::scr', 'hr', 'Croatia - Croatian'),
#('xkb:gb:dvorak:eng', 'en-GB', 'United Kingdom - Dvorak - English'),
#('xkb:fi::fin', 'fi', 'Finland - Finnish'),
#('xkb:hu::hun', 'hu', 'Hungary - Hungarian'),
+
+ # TODO(hungte) There is no valid keyboard layout for it-CH yet, so we use the
+ # layout from it-IT. May update that in future.
+ #('xkb:it::ita', 'it-IT', 'Italy - Italian'),
+ #('xkb:it::ita', 'it-CH', 'Switzerland - Italian'),
+
#('xkb:no::nob', 'no', 'Norway - Norwegian Bokmal'),
#('xkb:pl::pol', 'pl', 'Poland - Polish'),
+ #('xkb:pt::por', 'pt-PT', 'Portugal - Portuguese'),
#('xkb:ro::rum', 'ro', 'Romania - Romanian'),
#('xkb:se::swe', 'sv', 'Sweden - Swedish'),
#('xkb:sk::slo', 'sk', 'Slovakia - Slovak'),
@@ -81,14 +99,15 @@
#('xkb:ua::ukr', 'uk', 'Ukraine - Ukrainian'),
)
-assert len(kb_map) <= 10, "Currently layouts must be less than 10."
-
class factory_SelectKeyboard(test.test):
version = 2
def write_kb(self, kb):
- cmd = ('vpd -i RO_VPD -s "initial_locale"="%s" '
- '-s "keyboard_layout"="%s"' % (kb[1], kb[0]))
+ cmd = ('vpd -i RO_VPD '
+ '-s "keyboard_layout"="%s" '
+ '-s "initial_locale"="%s" '
+ #'-s "initial_timezone"="$s" '
+ % kb[0:2])
utils.system_output(cmd)
def key_release_callback(self, widget, event):
@@ -103,11 +122,11 @@
factory.log('Need a number.')
return True
- if select < 0 or select >= len(kb_map):
+ if select < 0 or select >= len(self.kb_map):
factory.log('Invalid selection: %d' % select)
return True
- data = kb_map[select]
+ data = self.kb_map[select]
factory.log('Selected: %s' % ', '.join(data))
if data[0]:
self.label.set_text('Writing keyboard layout:\n<%s: %s - %s>\n'
@@ -123,9 +142,13 @@
window.connect('key-release-event', self.key_release_callback)
window.add_events(gdk.KEY_RELEASE_MASK)
- def run_once(self):
+ def run_once(self, kb_map=None):
factory.log('%s run_once' % self.__class__)
+ if kb_map is None:
+ kb_map = DEFAULT_KBD_LAYOUT_MAP
+ assert len(kb_map) <= 10, "Currently layouts must be less than 10."
+ self.kb_map = kb_map
# Message to display.
msg = ('Choose a keyboard:\n' + "\n".join(