Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/apps/system/test/unit/battery_manager_test.js
diff options
context:
space:
mode:
Diffstat (limited to 'apps/system/test/unit/battery_manager_test.js')
-rw-r--r--apps/system/test/unit/battery_manager_test.js204
1 files changed, 204 insertions, 0 deletions
diff --git a/apps/system/test/unit/battery_manager_test.js b/apps/system/test/unit/battery_manager_test.js
new file mode 100644
index 0000000..ee85f86
--- /dev/null
+++ b/apps/system/test/unit/battery_manager_test.js
@@ -0,0 +1,204 @@
+'use strict';
+
+requireApp('system/test/unit/mock_navigator_battery.js');
+requireApp('system/test/unit/mock_settings_listener.js');
+requireApp('system/test/unit/mock_sleep_menu.js');
+requireApp('system/test/unit/mock_gesture_detector.js');
+requireApp('system/test/unit/mocks_helper.js');
+requireApp('system/js/battery_manager.js');
+
+var mocksForBatteryManager = [
+ 'SettingsListener',
+ 'SleepMenu',
+ 'GestureDetector'
+];
+
+mocksForBatteryManager.forEach(function(mockName) {
+ if (! window[mockName]) {
+ window[mockName] = null;
+ }
+});
+
+
+suite('battery manager >', function() {
+ var realBattery;
+ var screenNode, notifNode, overlayNode;
+ var mocksHelper;
+ var tinyTimeout = 10;
+
+ suiteSetup(function() {
+ mocksHelper = new MocksHelper(mocksForBatteryManager);
+ mocksHelper.suiteSetup();
+
+ realBattery = BatteryManager._battery;
+ BatteryManager._battery = MockNavigatorBattery;
+
+ // must be big enough, otherwise the BatteryManager timeout occurs
+ // before the different suites execute.
+ BatteryManager.TOASTER_TIMEOUT = tinyTimeout;
+ });
+
+ suiteTeardown(function() {
+ mocksHelper.suiteTeardown();
+
+ BatteryManager._battery = realBattery;
+ realBattery = null;
+ });
+
+ setup(function() {
+ mocksHelper.setup();
+
+ var batteryNotificationMarkup =
+ '<div id="system-overlay" data-z-index-level="system-overlay">' +
+ '<div id="battery">' +
+ '<span class="icon-battery"></span>' +
+ '<span class="battery-notification" '+
+ 'data-l10n-id="battery-almost-empty">Battery almost empty' +
+ '</span>' +
+ '</div>' +
+ '</div>';
+
+ screenNode = document.createElement('div');
+ screenNode.id = 'screen';
+ screenNode.innerHTML = batteryNotificationMarkup;
+ document.body.appendChild(screenNode);
+
+ overlayNode = document.getElementById('system-overlay');
+ notifNode = document.getElementById('battery');
+
+ MockNavigatorBattery.level = 1;
+ PowerSaveHandler.init();
+ BatteryManager.init();
+ });
+
+ teardown(function() {
+ mocksHelper.teardown();
+
+ screenNode.parentNode.removeChild(screenNode);
+ });
+
+ function sendScreenChange(val) {
+ var detail = { screenEnabled: val};
+ var evt = new CustomEvent('screenchange', { detail: detail });
+ window.dispatchEvent(evt);
+ }
+
+ function sendLevelChange(level) {
+ MockNavigatorBattery.level = level;
+
+ var evt = new CustomEvent('levelchange');
+ MockNavigatorBattery.mTriggerEvent(evt);
+ }
+
+ function sendChargingChange(val) {
+ MockNavigatorBattery.charging = val;
+
+ var evt = new CustomEvent('chargingchange');
+ MockNavigatorBattery.mTriggerEvent(evt);
+ }
+
+ suite('"level is near empty" notification >', function() {
+ function assertDisplayed() {
+ assert.ok(overlayNode.classList.contains('battery'));
+ }
+
+ function assertNotDisplayed() {
+ assert.isFalse(overlayNode.classList.contains('battery'));
+ }
+
+ teardown(function(done) {
+ // wait for the notification timeout
+ setTimeout(done, tinyTimeout * 2);
+ });
+
+ suite('init >', function() {
+ setup(function() {
+ MockNavigatorBattery.level = 0.02;
+ BatteryManager.init();
+ });
+
+ test('display notification', function() {
+ assertDisplayed();
+ });
+ });
+
+ suite('battery goes empty >', function() {
+ setup(function() {
+ sendLevelChange(0.05);
+ });
+
+ test('display notification', function() {
+ assertDisplayed();
+ });
+
+ test('do not display twice', function(done) {
+ setTimeout(function() {
+ sendLevelChange(0.02);
+
+ assertNotDisplayed();
+ done();
+ }, tinyTimeout * 2);
+ });
+
+ suite('charging >', function() {
+ setup(function() {
+ sendChargingChange(true);
+ });
+
+ test('hide notification', function() {
+ assertNotDisplayed();
+ });
+
+ test('not charging > show notification', function() {
+ sendChargingChange(false);
+ assertDisplayed();
+ });
+
+ suite('goes up >', function() {
+ setup(function() {
+ sendLevelChange(0.2);
+ });
+
+ test('hide notification', function() {
+ assertNotDisplayed();
+ });
+
+ suite('not charging >', function() {
+ setup(function() {
+ sendChargingChange(false);
+ });
+
+ test('should not display', function() {
+ assertNotDisplayed();
+ });
+
+ test('goes empty again > display notification', function() {
+ sendLevelChange(0.02);
+
+ assertDisplayed();
+ });
+ });
+
+ });
+
+ });
+ });
+
+ suite('screen goes off > battery goes empty >', function() {
+ setup(function() {
+ sendScreenChange(false);
+ sendLevelChange(0.05);
+ });
+
+ test('no notification', function() {
+ assertNotDisplayed();
+ });
+
+ test('screen goes on > display notification', function() {
+ sendScreenChange(true);
+
+ assertDisplayed();
+ });
+ });
+ });
+});