blob: 675b002ea0579ade7420cbc19fb832c2df30c1bb [file] [log] [blame]
/*
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/
/* eslint-env jasmine */
exports.defineManualTests = function (contentEl, createActionButton) {
var logMessage = function (message, color) {
var log = document.getElementById('info');
var logLine = document.createElement('div');
if (color) {
logLine.style.color = color;
}
logLine.innerHTML = message;
log.appendChild(logLine);
};
var clearLog = function () {
var log = document.getElementById('info');
log.innerHTML = '';
};
// -------------------------------------------------------------------------
// Vibrations
// -------------------------------------------------------------------------
// new standard vibrate call that aligns to w3c spec with param long
var vibrateWithInt = function () {
clearLog();
navigator.vibrate(3000);
logMessage('navigator.vibrate(3000)', 'green');
};
// new standard vibrate call that aligns to w3c spec with param array
var vibrateWithArray = function () {
clearLog();
navigator.vibrate([3000]);
logMessage('navigator.vibrate([3000])', 'green');
};
// vibrate with a pattern using w3c spec
var vibrateWithPattern = function () {
clearLog();
navigator.vibrate([1000, 2000, 3000, 2000, 5000]);
logMessage('navigator.vibrate([1000, 2000, 3000, 2000, 5000])', 'green');
};
// cancel existing vibration using w3c spec navigator.vibrate(0)
var cancelWithZero = function () {
clearLog();
navigator.vibrate(0);
logMessage('navigator.vibrate(0)', 'green');
};
// cancel existing vibration using w3c spec navigator.vibrate([])
var cancelWithEmpty = function () {
clearLog();
navigator.vibrate([]);
logMessage('navigator.vibrate([])', 'green');
};
// reference to the timeout variable
var timeout;
// check whether there is an ongoing vibration
var vibrateOn = false;
// special long vibrate used to test cancel
var longVibrate = function () {
clearLog();
navigator.vibrate(60000);
vibrateOn = true;
logMessage('navigator.vibrate(60000)', 'green');
timeout = setTimeout(resetVibrateOn, 60000); // if user doesn't cancel vibrate, reset vibrateOn var after 60 seconds
};
// special long vibrate with pattern used to test cancel
var longVibrateWithPattern = function () {
clearLog();
navigator.vibrate([1000, 2000, 3000, 2000, 5000, 2000, 30000]);
vibrateOn = true;
logMessage('navigator.vibrate([1000, 2000, 3000, 2000, 5000, 2000, 30000])', 'green');
timeout = setTimeout(resetVibrateOn, 45000); // if user doesn't cancel vibrate, reset vibrateOn var after 45 seconds
};
// initiate two vibrations to test cancel
var multipleVibrations = function () {
clearLog();
navigator.vibrate(20000);
navigator.vibrate(45000);
vibrateOn = true;
logMessage('navigator.vibrate(15000)\nnavigator.vibrate(45000)', 'green');
timeout = setTimeout(resetVibrateOn, 45000); // if user doesn't cancel vibrate, reset vibrateOn var after 45 seconds
};
function resetVibrateOn () {
vibrateOn = false;
}
var vibrate_tests = '<h1>Vibrate Tests</h1>' +
'<h3>Starred tests only work for Android and Windows. </h3>' +
'<h3>iOS ignores the time given for a vibrate </h3>' +
'<p/> <div id="vibrate_int"></div>' +
'Expected result: Vibrate once for 3 seconds.' +
'<p/> <div id="vibrate_array"></div>' +
'Expected result: Vibrate once for 3 seconds.' +
'<p/> <div id="vibrate_with_pattern"></div>' +
'Expected result: Vibrate for 1s, pause for 2s, vibrate for 3s, pause for 2s, vibrate for 5s.' +
'<p/> <div id="cancel_zero"></div>' +
'Expected result: Press once to initiate vibrate for 60 seconds. Press again to cancel vibrate immediately.' +
'<p/><div id="cancel_array"></div>' +
'Expected result: Press once to initiate vibrate for 60 seconds. Press again to cancel vibrate immediately.' +
'<p/> <div id="cancelWithPattern_zero"></div>' +
'Expected result: Press once to initiate vibrate with pattern for 45s. Press again to cancel vibrate immediately.' +
'<p/> <div id="cancelWithPattern_array"></div>' +
'Expected result: Press once to initiate vibrate with pattern for 45s. Press again to cancel vibrate immediately.' +
'<p/> <div id="cancelMultipleVibrations"></div>' +
'Expected result: Press once to initiate two vibrations simultaneously (one for 20s the other for 45s so total of 45s). Press again to cancel both vibrations immediately.';
contentEl.innerHTML = '<div id="info"></div>' + vibrate_tests;
// standard vibrate with new call param int
createActionButton('Vibrate with int', function () {
vibrateWithInt();
}, 'vibrate_int');
// standard vibrate with new call param array
createActionButton('Vibrate with array', function () {
vibrateWithArray();
}, 'vibrate_array');
// vibrate with a pattern
createActionButton('* Vibrate with a pattern', function () {
vibrateWithPattern();
}, 'vibrate_with_pattern');
// cancel any existing vibrations with param 0
createActionButton('* Cancel vibration with 0', function () {
if (!vibrateOn) {
longVibrate();
} else {
cancelWithZero();
resetVibrateOn();
clearTimeout(timeout); // clear the timeout since user has canceled the vibrate
}
}, 'cancel_zero');
// cancel any existing vibrations with param []
createActionButton('* Cancel vibration with []', function () {
if (!vibrateOn) {
longVibrate();
} else {
cancelWithEmpty();
resetVibrateOn();
clearTimeout(timeout); // clear the timeout since user has canceled the vibrate
}
}, 'cancel_array');
// cancel vibration with pattern with param 0
createActionButton('* Cancel vibration with pattern with 0', function () {
if (!vibrateOn) {
longVibrateWithPattern();
} else {
cancelWithZero();
resetVibrateOn();
clearTimeout(timeout); // clear the timeout since user has canceled the vibrate
}
}, 'cancelWithPattern_zero');
// cancel vibration with pattern with param []
createActionButton('* Cancel vibration with pattern with []', function () {
if (!vibrateOn) {
longVibrateWithPattern();
} else {
cancelWithEmpty();
resetVibrateOn();
clearTimeout(timeout); // clear the timeout since user has canceled the vibrate
}
}, 'cancelWithPattern_array');
// cancel multiple vibrations
createActionButton('* Cancel multiple vibrations', function () {
if (!vibrateOn) {
multipleVibrations();
} else {
cancelWithZero();
resetVibrateOn();
clearTimeout(timeout); // clear the timeout since user has canceled the vibrate
}
}, 'cancelMultipleVibrations');
};