Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / chrome / test / data / chromeos / virtual_keyboard / end_to_end_test.js
blobcd6992e207647149e9dc2fcc26eb751819ab1f74
1 /*
2  * Copyright 2013 The Chromium Authors. All rights reserved.
3  * Use of this source code is governed by a BSD-style license that can be
4  * found in the LICENSE file.
5  */
7 /**
8  * Defers continuation of a test until a keyset is loaded.
9  * @param {string} keyset Name of the target keyset.
10  * @param {Function} continueTestCallback Callback function to invoke in order
11  *     to resume the test.
12  */
13 function onKeysetReady(keyset, continueTestCallback) {
14   var container = document.querySelector('.inputview-container');
15   var bounds = container.getBoundingClientRect();
16   if (bounds.bottom > 0 && keyset in controller.container_.keysetViewMap &&
17       keyset == controller.currentKeyset_) {
18     continueTestCallback();
19     return;
20   }
21   setTimeout(function() {
22     onKeysetReady(keyset, continueTestCallback);
23   }, 100);
27 /**
28  * Display an error message and abort the test.
29  * @param {string} message The error message.
30  */
31 function fail(message) {
32   console.error(message);
33   window.domAutomationController.send(false);
37 /**
38  * Mocks a touch event targeted on a key.
39  * @param {!Element} key .
40  * @param {string} eventType .
41  */
42 function mockTouchEvent(key, eventType) {
43   var rect = key.getBoundingClientRect();
44   var x = rect.left + rect.width/2;
45   var y = rect.top + rect.height/2;
46   var e = document.createEvent('UIEvent');
47   e.initUIEvent(eventType, true, true);
48   e.touches = [{pageX: x, pageY: y}];
49   e.target = key;
50   key.dispatchEvent(e);
54 /**
55  * Simulates tapping on a key.
56  * @param {!Element} key .
57  */
58 function mockTap(key) {
59   mockTouchEvent(key, 'touchstart');
60   mockTouchEvent(key, 'touchend');
64 /**
65  * Returns the active keyboard view.
66  * @return {!HTMLElement}
67  */
68 function getActiveView() {
69   var container = document.querySelector('.inputview-container');
70   var views = container.querySelectorAll('.inputview-view');
71   for (var i = 0; i < views.length; i++) {
72     var display = views[i].style.display;
73     if (!display || display != 'none')
74       return views[i];
75   }
76   fail('Unable to find active keyboard view');
80 /**
81  * Locates a key by label.
82  * @param {string} label The label on the key. If the key has multiple labels,
83  *    |label| can match any of them.
84  * @returns {?Element} .
85  */
86 function findKey(label) {
87   var view = getActiveView();
88   candidates = view.querySelectorAll('.inputview-special-key-name');
89   for (var i = 0; i < candidates.length; i++) {
90     if (candidates[i].textContent == label)
91       return candidates[i];
92   }
93   fail('Cannot find key labeled \'' + label + '\'');
97 // Wait for keyboard to finish loading asynchronously before tapping key.
98 onKeysetReady('us.compact.qwerty', function() {
99   mockTap(findKey('a'));