553 lines
18 KiB
JavaScript
553 lines
18 KiB
JavaScript
|
/*
|
||
|
*
|
||
|
* 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.
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
/* jshint jasmine: true */
|
||
|
/* global WinJS */
|
||
|
|
||
|
exports.defineAutoTests = function () {
|
||
|
var isWindowsStore = (cordova.platformId == "windows8") || (cordova.platformId == "windows" && !WinJS.Utilities.isPhone),
|
||
|
onEvent;
|
||
|
|
||
|
describe('Battery (navigator.battery)', function () {
|
||
|
|
||
|
it("battery.spec.1 should exist", function () {
|
||
|
if (isWindowsStore) {
|
||
|
pending('Battery status is not supported on windows store');
|
||
|
}
|
||
|
|
||
|
expect(navigator.battery).toBeDefined();
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe('Battery Events', function () {
|
||
|
|
||
|
describe("batterystatus", function () {
|
||
|
|
||
|
afterEach(function () {
|
||
|
if (!isWindowsStore) {
|
||
|
try {
|
||
|
window.removeEventListener("batterystatus", onEvent, false);
|
||
|
}
|
||
|
catch (e) {
|
||
|
console.err('Error removing batterystatus event listener: ' + e);
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
|
||
|
it("battery.spec.2 should fire batterystatus events", function (done) {
|
||
|
if (isWindowsStore) {
|
||
|
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 (!isWindowsStore) {
|
||
|
try {
|
||
|
window.removeEventListener("batterylow", onEvent, false);
|
||
|
}
|
||
|
catch (e) {
|
||
|
console.err('Error removing batterylow event listener: ' + e);
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
|
||
|
it("battery.spec.3 should fire batterylow event (30 -> 20)", function (done) {
|
||
|
if (isWindowsStore) {
|
||
|
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 (isWindowsStore) {
|
||
|
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 (isWindowsStore) {
|
||
|
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 (isWindowsStore) {
|
||
|
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 (!isWindowsStore) {
|
||
|
try {
|
||
|
window.removeEventListener("batterycritical", onEvent, false);
|
||
|
}
|
||
|
catch (e) {
|
||
|
console.err('Error removing batterycritical event listener: ' + e);
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
|
||
|
it("battery.spec.4 should fire batterycritical event (19 -> 5)", function (done) {
|
||
|
if (isWindowsStore) {
|
||
|
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 (isWindowsStore) {
|
||
|
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 (isWindowsStore) {
|
||
|
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 (isWindowsStore) {
|
||
|
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 (isWindowsStore) {
|
||
|
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');
|
||
|
};
|