blob: addafcf8165691e1c84c7a5322a4d7cc29fde969 [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.
*
*/
/* global Windows, WinJS, cordova */
exports.defineAutoTests = function () {
var hasPowerManagerAPI =
cordova.platformId === 'windows' && Windows && Windows.System && Windows.System.Power && Windows.System.Power.PowerManager;
var batteryStatusUnsupported =
(cordova.platformId === 'windows8' ||
// We don't test battery status on Windows when there is no corresponding APIs available
cordova.platformId === 'windows') &&
!(hasPowerManagerAPI || WinJS.Utilities.isPhone);
var onEvent;
describe('Battery (navigator.battery)', function () {
it('battery.spec.1 should exist', function () {
if (batteryStatusUnsupported) {
pending('Battery status is not supported on windows store');
}
expect(navigator.battery).toBeDefined();
});
});
describe('Battery Events', function () {
describe('batterystatus', function () {
afterEach(function () {
if (!batteryStatusUnsupported) {
try {
window.removeEventListener('batterystatus', onEvent, false);
} catch (e) {
console.error('Error removing batterystatus event listener: ' + e);
}
}
});
it('battery.spec.2 should fire batterystatus events', function (done) {
if (batteryStatusUnsupported) {
pending('Battery status is not supported on windows store');
}
onEvent = jasmine.createSpy('BatteryStatus');
// batterystatus -> 30
window.addEventListener('batterystatus', onEvent, false);
navigator.battery._status({
level: 30,
isPlugged: false
});
setTimeout(function () {
expect(onEvent).toHaveBeenCalled();
done();
}, 100);
});
});
describe('batterylow', function () {
afterEach(function () {
if (!batteryStatusUnsupported) {
try {
window.removeEventListener('batterylow', onEvent, false);
} catch (e) {
console.error('Error removing batterylow event listener: ' + e);
}
}
});
it('battery.spec.3 should fire batterylow event (30 -> 20)', function (done) {
if (batteryStatusUnsupported) {
pending('Battery status is not supported on windows store');
}
onEvent = jasmine.createSpy('BatteryLow');
// batterylow 30 -> 20
window.addEventListener('batterylow', onEvent, false);
navigator.battery._status({
level: 30,
isPlugged: false
});
navigator.battery._status({
level: 20,
isPlugged: false
});
setTimeout(function () {
expect(onEvent).toHaveBeenCalled();
done();
}, 100);
});
it('battery.spec.3.1 should fire batterylow event (30 -> 19)', function (done) {
if (batteryStatusUnsupported) {
pending('Battery status is not supported on windows store');
}
onEvent = jasmine.createSpy('BatteryLow');
// batterylow 30 -> 19
window.addEventListener('batterylow', onEvent, false);
navigator.battery._status({
level: 30,
isPlugged: false
});
navigator.battery._status({
level: 19,
isPlugged: false
});
setTimeout(function () {
expect(onEvent).toHaveBeenCalled();
done();
}, 100);
});
it('battery.spec.3.2 should not fire batterylow event (5 -> 20)', function (done) {
if (batteryStatusUnsupported) {
pending('Battery status is not supported on windows store');
}
onEvent = jasmine.createSpy('BatteryLow');
// batterylow should not fire when level increases (5->20) ( CB-4519 )
window.addEventListener('batterylow', onEvent, false);
navigator.battery._status({
level: 5,
isPlugged: false
});
navigator.battery._status({
level: 20,
isPlugged: false
});
setTimeout(function () {
expect(onEvent).not.toHaveBeenCalled();
done();
}, 100);
});
it('battery.spec.3.3 batterylow event(21 -> 20) should not fire if charging', function (done) {
if (batteryStatusUnsupported) {
pending('Battery status is not supported on windows store');
}
onEvent = jasmine.createSpy('BatteryLow');
// batterylow should NOT fire if we are charging ( CB-4520 )
window.addEventListener('batterylow', onEvent, false);
navigator.battery._status({
level: 21,
isPlugged: true
});
navigator.battery._status({
level: 20,
isPlugged: true
});
setTimeout(function () {
expect(onEvent).not.toHaveBeenCalled();
done();
}, 100);
});
});
describe('batterycritical', function () {
afterEach(function () {
if (!batteryStatusUnsupported) {
try {
window.removeEventListener('batterycritical', onEvent, false);
} catch (e) {
console.error('Error removing batterycritical event listener: ' + e);
}
}
});
it('battery.spec.4 should fire batterycritical event (19 -> 5)', function (done) {
if (batteryStatusUnsupported) {
pending('Battery status is not supported on windows store');
}
onEvent = jasmine.createSpy('BatteryCritical');
// batterycritical 19->5
window.addEventListener('batterycritical', onEvent, false);
navigator.battery._status({
level: 19,
isPlugged: false
});
navigator.battery._status({
level: 5,
isPlugged: false
});
setTimeout(function () {
expect(onEvent).toHaveBeenCalled();
done();
}, 100);
});
it('battery.spec.4.1 should fire batterycritical event (19 -> 4)', function (done) {
if (batteryStatusUnsupported) {
pending('Battery status is not supported on windows store');
}
onEvent = jasmine.createSpy('BatteryCritical');
// batterycritical 19->4
window.addEventListener('batterycritical', onEvent, false);
navigator.battery._status({
level: 19,
isPlugged: false
});
navigator.battery._status({
level: 4,
isPlugged: false
});
setTimeout(function () {
expect(onEvent).toHaveBeenCalled();
done();
}, 100);
});
it('battery.spec.4.2 should fire batterycritical event (100 -> 4) when decreases', function (done) {
if (batteryStatusUnsupported) {
pending('Battery status is not supported on windows store');
}
onEvent = jasmine.createSpy('BatteryCritical');
// setup: batterycritical should fire when level decreases (100->4) ( CB-4519 )
window.addEventListener('batterycritical', onEvent, false);
navigator.battery._status({
level: 100,
isPlugged: false
});
navigator.battery._status({
level: 4,
isPlugged: false
});
setTimeout(function () {
expect(onEvent).toHaveBeenCalled();
done();
}, 100);
});
it('battery.spec.4.3 should not fire batterycritical event (4 -> 5) when increasing', function (done) {
if (batteryStatusUnsupported) {
pending('Battery status is not supported on windows store');
}
onEvent = jasmine.createSpy('BatteryCritical');
window.addEventListener('batterycritical', onEvent, false);
// batterycritical should not fire when level increases (4->5)( CB-4519 )
navigator.battery._status({
level: 4,
isPlugged: false
});
navigator.battery._status({
level: 5,
isPlugged: false
});
setTimeout(function () {
expect(onEvent.calls.count()).toBeLessThan(2);
done();
}, 100);
});
it('battery.spec.4.4 should not fire batterycritical event (6 -> 5) if charging', function (done) {
if (batteryStatusUnsupported) {
pending('Battery status is not supported on windows store');
}
onEvent = jasmine.createSpy('BatteryCritical');
window.addEventListener('batterycritical', onEvent, false);
// batterycritical should NOT fire if we are charging ( CB-4520 )
navigator.battery._status({
level: 6,
isPlugged: true
});
navigator.battery._status({
level: 5,
isPlugged: true
});
setTimeout(function () {
expect(onEvent).not.toHaveBeenCalled();
done();
}, 100);
});
});
});
};
//* *****************************************************************************************
//* **************************************Manual Tests***************************************
//* *****************************************************************************************
exports.defineManualTests = function (contentEl, createActionButton) {
/* Battery */
function updateInfo (info) {
document.getElementById('levelValue').innerText = info.level;
document.getElementById('pluggedValue').innerText = info.isPlugged;
if (info.level > 5) {
document.getElementById('criticalValue').innerText = 'false';
}
if (info.level > 20) {
document.getElementById('lowValue').innerText = 'false';
}
}
function batteryLow (info) {
document.getElementById('lowValue').innerText = 'true';
}
function batteryCritical (info) {
document.getElementById('criticalValue').innerText = 'true';
}
function addBattery () {
window.addEventListener('batterystatus', updateInfo, false);
}
function removeBattery () {
window.removeEventListener('batterystatus', updateInfo, false);
}
function addLow () {
window.addEventListener('batterylow', batteryLow, false);
}
function removeLow () {
window.removeEventListener('batterylow', batteryLow, false);
}
function addCritical () {
window.addEventListener('batterycritical', batteryCritical, false);
}
function removeCritical () {
window.removeEventListener('batterycritical', batteryCritical, false);
}
// Generate Dynamic Table
function generateTable (tableId, rows, cells, elements) {
var table = document.createElement('table');
for (var r = 0; r < rows; r++) {
var row = table.insertRow(r);
for (var c = 0; c < cells; c++) {
var cell = row.insertCell(c);
cell.setAttribute('align', 'center');
for (var e in elements) {
if (elements[e].position.row === r && elements[e].position.cell === c) {
var htmlElement = document.createElement(elements[e].tag);
var content;
if (elements[e].content !== '') {
content = document.createTextNode(elements[e].content);
htmlElement.appendChild(content);
}
if (elements[e].type) {
htmlElement.type = elements[e].type;
}
htmlElement.setAttribute('id', elements[e].id);
cell.appendChild(htmlElement);
}
}
}
}
table.setAttribute('align', 'center');
table.setAttribute('id', tableId);
return table;
}
// Battery Elements
var batteryElements = [
{
id: 'statusTag',
content: 'Status:',
tag: 'div',
position: {
row: 0,
cell: 0
}
},
{
id: 'statusValue',
content: '',
tag: 'div',
position: {
row: 0,
cell: 1
}
},
{
id: 'levelTag',
content: 'Level:',
tag: 'div',
position: {
row: 1,
cell: 0
}
},
{
id: 'levelValue',
content: '',
tag: 'div',
position: {
row: 1,
cell: 1
}
},
{
id: 'pluggedTag',
content: 'Plugged:',
tag: 'div',
position: {
row: 2,
cell: 0
}
},
{
id: 'pluggedValue',
content: '',
tag: 'div',
position: {
row: 2,
cell: 1
}
},
{
id: 'lowTag',
content: 'Low:',
tag: 'div',
position: {
row: 3,
cell: 0
}
},
{
id: 'lowValue',
content: '',
tag: 'div',
position: {
row: 3,
cell: 1
}
},
{
id: 'criticalTag',
content: 'Critical:',
tag: 'div',
position: {
row: 4,
cell: 0
}
},
{
id: 'criticalValue',
content: '',
tag: 'div',
position: {
row: 4,
cell: 1
}
}
];
// Title audio results
var div = document.createElement('h2');
div.appendChild(document.createTextNode('Battery Status'));
div.setAttribute('align', 'center');
contentEl.appendChild(div);
var batteryTable = generateTable('info', 5, 3, batteryElements);
contentEl.appendChild(batteryTable);
div = document.createElement('h2');
div.appendChild(document.createTextNode('Actions'));
div.setAttribute('align', 'center');
contentEl.appendChild(div);
contentEl.innerHTML +=
'<h3>Battery Status Tests</h3>' +
'Will update values for level and plugged when they change. If battery low and critical values are false, they will get updated in status box, but only once' +
'<div id="addBS"></div><div id="remBs"></div>' +
'<h3>Battery Low Tests</h3>' +
'</p> Will update value for battery low to true when battery is below 20%' +
'<div id="addBl"></div><div id="remBl"></div>' +
'<h3>Battery Critical Tests</h3>' +
'</p> Will update value for battery critical to true when battery is below 5%' +
'<div id="addBc"></div><div id="remBc"></div>';
createActionButton(
'Add "batterystatus" listener',
function () {
addBattery();
},
'addBS'
);
createActionButton(
'Remove "batterystatus" listener',
function () {
removeBattery();
},
'remBs'
);
createActionButton(
'Add "batterylow" listener',
function () {
addLow();
},
'addBl'
);
createActionButton(
'Remove "batterylow" listener',
function () {
removeLow();
},
'remBl'
);
createActionButton(
'Add "batterycritical" listener',
function () {
addCritical();
},
'addBc'
);
createActionButton(
'Remove "batterycritical" listener',
function () {
removeCritical();
},
'remBc'
);
};