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

Unified Diff: chrome/test/data/chromeos/virtual_keyboard/control_keys_test.js

Issue 25305003: Automated tests for the shift key. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added longpress and double click tests. Created 7 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/test/data/chromeos/virtual_keyboard/control_keys_test.js
diff --git a/chrome/test/data/chromeos/virtual_keyboard/control_keys_test.js b/chrome/test/data/chromeos/virtual_keyboard/control_keys_test.js
new file mode 100644
index 0000000000000000000000000000000000000000..8cf31da40aa890c2781c56b0d81a04590a609afa
--- /dev/null
+++ b/chrome/test/data/chromeos/virtual_keyboard/control_keys_test.js
@@ -0,0 +1,262 @@
+/*
+ * Copyright 2013 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.
+ */
+
+/**
+ * Gets all shift keys on the keyboard.
kevers 2013/09/30 21:58:28 This description does not appear to be consistent
rsadam 2013/09/30 22:52:09 Done.
+ * @param {string} alignment, Which of {left, right} shift keys to return.
kevers 2013/09/30 21:58:28 Nit. No punctuation between variable name and desc
rsadam 2013/09/30 22:52:09 Done.
+ * @return {{string: string}} a map from keyset to the shift key in it.
kevers 2013/09/30 21:58:28 {Object.<string, Object>} ?
rsadam 2013/09/30 22:52:09 Done.
+ */
+function getShiftKeys(alignment) {
+ var layout = keyboard.layout;
+ var keysets = ['lower', 'upper'];
+
+ var result={};
+ for(var keysetIndex in keysets) {
+ var keysetId = keysets[keysetIndex];
+ // The keyset DOM object which contains a shift key.
+ var keyset = keyboard.querySelector('#' + layout + "-" + keysetId);
+ assertTrue(!!keyset, "Cannot find keyset: " + keyset);
+ var shiftKey = keyset.querySelector('kb-shift-key[align="' +
+ alignment + '"]');
+ assertTrue(!!shiftKey, "Keyset " + keysetId +
+ " does not have a shift key with " + alignment + " alignment");
+ result[keysetId] = shiftKey;
+ }
+ return result;
+}
+
+/**
+ * Tests chording with a single shift key.
+ * @param {Object} lowerShift, a shift key in the lower key set.
+ * @param {Object} uppserShift, the same shift key in the upper key set.
+ */
+function checkShiftChording(lowerShift, upperShift) {
+ var lower = lowerShift.lowerCaseKeysetId;
+ var upper = lowerShift.upperCaseKeysetId;
+ // Check that we're testing from correct initial state.
+ assertTrue(keyboard.keyset == lower, "Start keyset should by: " +
kevers 2013/09/30 21:58:28 should by -> should be Use assertEquals here rath
rsadam 2013/09/30 22:52:09 Done.
+ lower + ". Was: " + keyboard.keyset);
+ var mockEvent = {pointerId:1, isPrimary:true};
+ lowerShift.down(mockEvent);
+ assertTrue(keyboard.keyset == upper,
+ "Did not transition to uppercase on shift key down. Expected: " +
+ upper + ". Was: " + keyboard.keyset);
+ // Some alphanumeric character
+ mockTypeCharacter('A', 0x41, true);
+ assertTrue(keyboard.keyset == upper,
+ "Did not remain in uppercase. Expected: " +
+ upper + ". Was: " + keyboard.keyset);
+ mockTimer.tick(1000);
+ upperShift.up(mockEvent);
+ assertTrue(keyboard.keyset == lower,
+ "Did not revert to lowercase after chording. Expected: " +
+ lower + ". Was: " + keyboard.keyset);
+}
+
+/**
+ * Tests a particular shift key for highlighting on tapping. The keyboard
+ * should temporarily transition to uppercase, and after a non-control tap,
+ * revert to lower case.
+ * @param {Object} lowerShift The shift key object on the lower keyset.
+ * @param {Object} upperShift The shift key object on the upper keyset.
+ */
+function checkShiftHighlight(lowerShift, upperShift) {
+ assertTrue(!!keyboard.shift, "Shift key was not cached by keyboard");
+ var unlocked = lowerShift.lowerCaseKeysetId;
+ var locked = lowerShift.upperCaseKeysetId;
+ assertTrue(keyboard.keyset == unlocked,
+ "Initial keyboard keyset is not unlocked. Keyset: " +
kevers 2013/09/30 21:58:28 assertEquals
rsadam 2013/09/30 22:52:09 Done.
+ keyboard.keyset + " Expected: " + unlocked);
+ // Crashes if we don't give it a pointerId.
+ var mockEvent = { pointerId: 1};
+ // Tap shift key.
+ lowerShift.down(mockEvent);
+ upperShift.up(mockEvent);
+ // Tests that we are now in locked case.
+ assertTrue(keyboard.keyset == locked,
+ "Keyset is not locked on highlight. Keyset: " + keyboard.keyset +
+ " Expected: " + locked);
+ // Some alphanumeric character.
+ mockTypeCharacter('A', 0x41, true);
+ // Check that we've reverted to lower case.
+ assertTrue(keyboard.keyset == unlocked,
+ "Did not revert to lower case after highlight. Keyset: " +
+ keyboard.keyset + " Expected: " + unlocked);
+ // Check that we persist in lower case.
+ mockTypeCharacter('a', 0x41, false);
+ assertTrue(keyboard.keyset == unlocked,
+ "Did not stay in lower case after highlight. Keyset: " +
+ keyboard.keyset + " Expected: " + unlocked);
+}
+
+/**
+ * Tests that a particular shift key has been initialized correctly.
+ * @param {Object} shift The shift key.
+ */
+function checkShiftInitialState(shift) {
+ //Checks that the unlocked case is lower.
+ var expectedUnlocked = 'lower';
+ assertTrue(shift.lowerCaseKeysetId == expectedUnlocked,
kevers 2013/09/30 21:58:28 assertEquals
rsadam 2013/09/30 22:52:09 Done.
+ "Expected unlocked case to be: " + expectedUnlocked + " was: " +
+ shift.lowerCaseKeysetId);
+ //Checks that the locked case is upper.
+ var expectedLocked = 'upper';
+ assertTrue(shift.upperCaseKeysetId == expectedLocked,
+ "Expected locked case to be: " + expectedLocked + " was: " +
+ shift.upperCaseKeysetId);
+}
+
+/**
+ * Tests that a particular shift key capitalizes on long press.
+ * @param {Object} shift The shift key.
+ */
+function checkShiftLongPress(lowerShift, upperShift) {
+ // Check that keyboard is in expected start state.
+ assertTrue(!!keyboard.shift, "Shift key was not cached by keyboard");
+ var unlocked = lowerShift.lowerCaseKeysetId;
+ var locked = lowerShift.upperCaseKeysetId;
+ assertTrue(keyboard.keyset == unlocked,
kevers 2013/09/30 21:58:28 assertEquals
rsadam 2013/09/30 22:52:09 Done.
+ "Initial keyboard keyset is not unlocked. Keyset: " +
+ keyboard.keyset + " Expected: " + unlocked);
+ // Mocks a pointer event.
+ var mockEvent = { pointerId: 1};
+ lowerShift.down(mockEvent);
+ assertTrue(keyboard.keyset == locked,
+ "Did not transition to locked case on shift key down. Keyset: " +
+ keyboard.keyset + " Expected: " + locked);
+ // Long press should now be active.
+ mockTimer.tick(1000);
+ // Type any caps character, make sure we remain in caps mode.
+ upperShift.up(mockEvent);
+ mockTypeCharacter('A', 0x41, true);
+ assertTrue(keyboard.keyset == locked,
+ "Did not remain in locked case after long press. Keyset: " +
+ keyboard.keyset + " Expected: " + locked);
+ //Revert to lower case.
+ upperShift.down(mockEvent);
+ assertTrue(keyboard.keyset == unlocked,
+ "Did not revert to lower case on shift down. Keyset: " +
+ keyboard.keyset + " Expected: " + unlocked);
+ lowerShift.up(mockEvent);
+}
+
+function checkShiftDoubleClick(lowerShift, upperShift) {
+ // Check that keyboard is in expected start state.
+ assertTrue(!!keyboard.shift, "Shift key was not cached by keyboard");
+ var unlocked = lowerShift.lowerCaseKeysetId;
+ var locked = lowerShift.upperCaseKeysetId;
+ assertTrue(keyboard.keyset == unlocked,
kevers 2013/09/30 21:58:28 assertEquals
rsadam 2013/09/30 22:52:09 Done.
+ "Initial keyboard keyset is not unlocked. Keyset: " +
+ keyboard.keyset + " Expected: " + unlocked);
+ // Mocks a pointer event.
+ var mockEvent = { pointerId: 1};
+ lowerShift.down(mockEvent);
+ upperShift.up(mockEvent);
+ // Need to also mock a keyboard pointer up event.
+ keyboard.up(mockEvent);
+ upperShift.down(mockEvent);
+ upperShift.up(mockEvent);
+ keyboard.up(mockEvent);
+ // Check that we're capslocked.
+ assertTrue(keyboard.keyset == locked,
+ "Did not lock on double click. Keyset: " +
+ keyboard.keyset + " Expected: " + locked);
+ mockTypeCharacter('A', 0x41, true);
+ assertTrue(keyboard.keyset == locked,
+ "Did not remain in locked case after typing another key. Keyset: " +
+ keyboard.keyset + " Expected: " + locked);
+ // Reverts to lower case.
+ upperShift.down(mockEvent);
+ assertTrue(keyboard.keyset == unlocked,
+ "Did not revert to lower case on shift down. Keyset: " +
+ keyboard.keyset + " Expected: " + unlocked);
+ lowerShift.up(mockEvent);
+}
+/**
+ * Asynchronously tests highlighting of the left and right shift keys.
+ * @param {function} testDoneCallBack The callback function to be called
+ * on completion.
+ */
+function testShiftHighlightAsync(testDoneCallback) {
+ var runTest = function() {
+ var alignments = ['left', 'right'];
+ for (var i in alignments) {
+ var alignment = alignments[i];
+ var shifts = getShiftKeys(alignment);
+ checkShiftHighlight(shifts['lower'], shifts['upper']);
+ }
+ };
+ onKeyboardReady('testShiftKeyHighlightAsync', runTest, testDoneCallback);
+}
+
+/**
+ * Asynchronously tests initialization of the left and right shift keys.
+ * @param {function} testDoneCallBack The callback function to be called
+ * on completion.
+ */
+function testShiftKeyInitAsync(testDoneCallback) {
+ var runTest = function() {
+ var alignments = ['left', 'right'];
+ for (var i in alignments) {
+ var alignment = alignments[i];
+ var shifts = getShiftKeys(alignment);
+ checkShiftInitialState(shifts['lower']);
+ checkShiftInitialState(shifts['upper']);
+ }
+ };
+ onKeyboardReady('testShiftKeyInitAsync', runTest, testDoneCallback);
+}
+
+/**
+ * Asynchronously tests capitalization on double click of the left and
+ * right shift keys.
+ * @param {function} testDoneCallBack The callback function to be called
+ * on completion.
+ */
+function testShiftDoubleClickAsync(testDoneCallback) {
+ var runTest = function() {
+ var alignments = ['left', 'right'];
+ for (var i in alignments) {
+ var alignment = alignments[i];
+ var shifts = getShiftKeys(alignment);
+ checkShiftDoubleClick(shifts['lower'], shifts['upper']);
+ }
+ };
+ onKeyboardReady('testShiftDoubleClickAsync', runTest, testDoneCallback);
+}
+
+/**
+ * Asynchronously tests capitalization on long press of the left and
+ * right shift keys.
+ * @param {function} testDoneCallBack The callback function to be called
+ * on completion.
+ */
+function testShiftLongPressAsync(testDoneCallback) {
+ var runTest = function() {
+ var alignments = ['left', 'right'];
+ for (var i in alignments) {
+ var alignment = alignments[i];
+ var shifts = getShiftKeys(alignment);
+ checkShiftLongPress(shifts['lower'], shifts['upper']);
+ }
+ };
+ onKeyboardReady('testShiftLongPressAsync', runTest, testDoneCallback);
+}
+
+/**
+ * Asynchronously tests chording on the keyboard.
+ * @param {function} testDoneCallBack The callback function to be called
+ * on completion.
+ */
+function testShiftChordingAsync(testDoneCallback) {
+ var runTest = function() {
+ var left = getShiftKeys('left');
+ var right = getShiftKeys('right');
+ checkShiftChording(left['lower'], left['upper']);
+ checkShiftChording(right['lower'], right['upper']);
+ }
+ onKeyboardReady('testShiftChordingAsync', runTest, testDoneCallback);
+}

Powered by Google App Engine
This is Rietveld 408576698