VulpesOS/gaia/apps/system/test/unit/screen_manager_test.js
OverSu b38dea0597 Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
2026-09-30 23:13:03 +02:00

804 lines
29 KiB
JavaScript
Executable file

/* globals ScreenManager, ScreenBrightnessTransition,
ScreenWakeLockManager, ScreenAutoBrightness, MockService,
MockAppWindow, MocksHelper, MockLockScreen, MockMozPower,
MockNavigatorMozTelephony, MockSettingsListener, MocksleepMenu */
'use strict';
require('/shared/test/unit/mocks/mock_settings_listener.js');
require('/shared/test/unit/mocks/mock_navigator_moz_power.js');
require('/shared/test/unit/mocks/mock_navigator_moz_telephony.js');
require('/shared/test/unit/mocks/mock_service.js');
require('/test/unit/mock_app_window.js');
require('/shared/test/unit/mocks/mock_lazy_loader.js');
require('/test/unit/mock_lock_screen.js');
require('/test/unit/mock_navigator_moz_power.js');
require('/test/unit/mock_sleep_menu.js');
require('/test/unit/mock_statusbar.js');
function switchProperty(originObject, prop, stub, reals, useDefineProperty) {
if (!useDefineProperty) {
reals[prop] = originObject[prop];
originObject[prop] = stub;
} else {
Object.defineProperty(originObject, prop, {
configurable: true,
get: function() { return stub; }
});
}
}
function restoreProperty(originObject, prop, reals, useDefineProperty) {
if (!useDefineProperty) {
originObject[prop] = reals[prop];
} else {
Object.defineProperty(originObject, prop, {
configurable: true,
get: function() { return reals[prop]; }
});
}
}
var mocksForScreenManager = new MocksHelper([
'SettingsListener', 'Service', 'LazyLoader'
]).init();
require('/js/screen_auto_brightness.js');
require('/js/screen_brightness_transition.js');
require('/js/wake_lock_manager.js');
suite('system/ScreenManager', function() {
var reals = {};
mocksForScreenManager.attachTestHelpers();
var realMozTelephony;
var stubScreenBrightnessTransition;
var stubScreenWakeLockManager;
var stubScreenAutoBrightness;
suiteSetup(function() {
realMozTelephony = navigator.mozTelephony;
navigator.mozTelephony = MockNavigatorMozTelephony;
});
suiteTeardown(function() {
MockNavigatorMozTelephony.mSuiteTeardown();
navigator.mozTelephony = realMozTelephony;
});
setup(function(done) {
window.lockScreen = MockLockScreen;
switchProperty(navigator, 'mozPower', MockMozPower, reals, true);
this.sinon.useFakeTimers();
stubScreenBrightnessTransition =
this.sinon.stub(ScreenBrightnessTransition.prototype);
this.sinon.stub(window, 'ScreenBrightnessTransition')
.returns(stubScreenBrightnessTransition);
stubScreenAutoBrightness =
this.sinon.stub(ScreenAutoBrightness.prototype);
this.sinon.stub(window, 'ScreenAutoBrightness')
.returns(stubScreenAutoBrightness);
stubScreenWakeLockManager =
this.sinon.stub(ScreenWakeLockManager.prototype);
this.sinon.stub(window, 'ScreenWakeLockManager')
.returns(stubScreenWakeLockManager);
// We make sure fake timers are in place before we require the app
requireApp('system/js/screen_manager.js', done);
});
teardown(function() {
MockNavigatorMozTelephony.mTeardown();
restoreProperty(navigator, 'mozPower', reals, true);
});
suite('init()', function() {
setup(function() {
var stubById = this.sinon.stub(document, 'getElementById');
stubById.withArgs('screen').returns(document.createElement('div'));
this.sinon.stub(MockSettingsListener, 'observe');
this.sinon.stub(ScreenManager, 'turnScreenOn');
this.sinon.stub(ScreenManager, '_reconfigScreenTimeout');
this.sinon.stub(ScreenManager, '_setIdleTimeout');
});
test('Event listener adding', function() {
var eventListenerStub = this.sinon.stub(window, 'addEventListener');
ScreenManager.start();
assert.isTrue(eventListenerStub.withArgs('sleep').calledOnce);
assert.isTrue(eventListenerStub.withArgs('wake').calledOnce);
assert.isTrue(eventListenerStub.withArgs('requestshutdown').calledOnce);
});
test('wake lock handling', function() {
ScreenManager.start();
assert.isTrue(stubScreenWakeLockManager.start.calledOnce);
stubScreenWakeLockManager.onwakelockchange(true);
assert.isTrue(ScreenManager._reconfigScreenTimeout.called);
});
test('Testing SettingsListener.observe for screen.timeout', function() {
ScreenManager._firstOn = false;
ScreenManager.turnScreenOn.reset();
MockSettingsListener.observe.withArgs('screen.timeout')
.callsArgWith(2, 50);
ScreenManager.start();
assert.isTrue(ScreenManager._firstOn);
assert.equal(MockMozPower.screenBrightness, 0.5);
assert.isTrue(ScreenManager.turnScreenOn.called);
});
test('Testing SettingsListener.observe for ' +
'screen.automatic-brightness', function() {
MockSettingsListener.observe.reset();
MockSettingsListener.observe.withArgs('screen.automatic-brightness')
.callsArgWith(2, true);
this.sinon.stub(ScreenManager, 'setDeviceLightEnabled');
ScreenManager.start();
assert.isTrue(ScreenManager.setDeviceLightEnabled.called);
});
test('Testing callback of telephony.addEventListener', function() {
this.sinon.spy(navigator.mozTelephony, 'addEventListener');
ScreenManager.start();
sinon.assert.calledWith(
navigator.mozTelephony.addEventListener, 'callschanged'
);
});
});
suite('handleEvent()', function() {
suite('Testing devicelight event', function() {
test('if _deviceLightEnabled is false', function() {
ScreenManager._deviceLightEnabled = false;
ScreenManager.handleEvent({'type': 'devicelight'});
assert.isFalse(stubScreenAutoBrightness.autoAdjust.called);
});
test('if screenEnabled is false', function() {
ScreenManager.screenEnabled = false;
ScreenManager.handleEvent({'type': 'devicelight'});
assert.isFalse(stubScreenAutoBrightness.autoAdjust.called);
});
test('if _inTransition is true', function() {
ScreenManager._inTransition = true;
ScreenManager.handleEvent({'type': 'devicelight'});
assert.isFalse(stubScreenAutoBrightness.autoAdjust.called);
});
test('put all together', function() {
ScreenManager._deviceLightEnabled = true;
ScreenManager.screenEnabled = true;
ScreenManager._inTransition = false;
ScreenManager.handleEvent({'type': 'devicelight'});
assert.isTrue(stubScreenAutoBrightness.autoAdjust.called);
});
});
test('Testing sleep event', function() {
this.sinon.spy(ScreenManager, 'turnScreenOff');
ScreenManager.handleEvent({'type': 'sleep'});
sinon.assert.calledWith(ScreenManager.turnScreenOff, true, 'powerkey');
});
test('Testing sleep event during a call', function() {
MockNavigatorMozTelephony.calls = [{}];
this.sinon.spy(ScreenManager, 'turnScreenOff');
ScreenManager.handleEvent({'type': 'sleep'});
sinon.assert.notCalled(ScreenManager.turnScreenOff);
});
test('Testing wake event', function() {
this.sinon.spy(ScreenManager, 'turnScreenOn');
ScreenManager.handleEvent({'type': 'wake'});
sinon.assert.calledWith(ScreenManager.turnScreenOn);
});
test('Testing wake event during a call', function() {
MockNavigatorMozTelephony.calls = [{}];
this.sinon.spy(ScreenManager, 'turnScreenOn');
ScreenManager.handleEvent({'type': 'wake'});
sinon.assert.notCalled(ScreenManager.turnScreenOn);
});
test('Testing accessibility action event', function() {
var stubReconfigScreenTimeout = this.sinon.stub(ScreenManager,
'_reconfigScreenTimeout');
ScreenManager.handleEvent({'type': 'accessibility-action'});
assert.isTrue(stubReconfigScreenTimeout.called);
});
suite('Test nfc-tech events', function() {
test('if _inTransition is true', function() {
var stubTurnScreenOn = this.sinon.stub(ScreenManager, 'turnScreenOn');
ScreenManager._inTransition = true;
ScreenManager.handleEvent({'type': 'nfc-tech-discovered'});
assert.isTrue(stubTurnScreenOn.calledOnce, 'nfc-tech-discovered');
ScreenManager.handleEvent({'type': 'nfc-tech-lost'});
assert.isTrue(stubTurnScreenOn.calledTwice, 'nfc-tech-lost');
});
test('if _intransition is false', function() {
var stubReconfigScreenTimeout = this.sinon.stub(
ScreenManager,
'_reconfigScreenTimeout');
ScreenManager.handleEvent({'type': 'nfc-tech-discovered'});
assert.isTrue(stubReconfigScreenTimeout.calledOnce,
'nfc-tech-discovered');
ScreenManager.handleEvent({'type': 'nfc-tech-lost'});
assert.isTrue(stubReconfigScreenTimeout.calledTwice, 'nfc-tech-lost');
});
});
suite('Testing userproximity event', function() {
var stubTurnOn, stubTurnOff;
setup(function() {
stubTurnOn = this.sinon.stub(ScreenManager, 'turnScreenOn');
stubTurnOff = this.sinon.stub(ScreenManager, 'turnScreenOff');
});
test('if Bluetooth SCO connected', function() {
this.sinon.stub(MockService, 'query').returns(true);
ScreenManager._screenOffBy = 'proximity';
ScreenManager.handleEvent({'type': 'userproximity'});
assert.isTrue(stubTurnOn.called);
assert.isFalse(stubTurnOff.called);
});
test('if Bluetooth SCO disconnected', function() {
this.sinon.stub(MockService, 'query').returns(false);
MockNavigatorMozTelephony.speakerEnabled = false;
MockService.mockQueryWith('isHeadsetConnected', false);
ScreenManager.handleEvent({'type': 'userproximity'});
assert.isTrue(stubTurnOn.called);
assert.isFalse(stubTurnOff.called);
});
test('if evt.near is yes', function() {
MockService.mockQueryWith('Bluetooth.isSCOProfileConnected', false);
MockService.mockQueryWith('isHeadsetConnected', false);
ScreenManager.handleEvent({'type': 'userproximity', 'near': 'yes'});
assert.isFalse(stubTurnOn.called);
assert.isTrue(stubTurnOff.calledWith(true, 'proximity'));
});
test('if earphone is connected', function() {
MockService.mockQueryWith('isHeadsetConnected', true);
ScreenManager._screenOffBy = 'proximity';
ScreenManager.handleEvent({'type': 'userproximity'});
assert.isTrue(stubTurnOn.called);
});
});
suite('Testing callschanged event', function() {
var stubCpuWakeLock, stubTurnOn, stubRemoveListener;
setup(function() {
stubCpuWakeLock = {};
stubTurnOn = this.sinon.stub(ScreenManager, 'turnScreenOn');
stubRemoveListener = this.sinon.stub(window, 'removeEventListener');
stubCpuWakeLock.unlock = this.sinon.stub();
ScreenManager._cpuWakeLock = stubCpuWakeLock;
});
teardown(function() {
restoreProperty(window, 'dialerAgent', reals);
});
test('with a call', function() {
var stubDispatchEvent = this.sinon.stub(window, 'dispatchEvent');
var stubAddListener = this.sinon.stub();
MockNavigatorMozTelephony.calls = [
{ 'addEventListener': stubAddListener }
];
ScreenManager.handleEvent({'type': 'callschanged'});
assert.isFalse(stubDispatchEvent.calledWith('open-callscreen'));
assert.isFalse(stubAddListener.called);
});
test('with a conference call', function() {
var stubDispatchEvent = this.sinon.stub(window, 'dispatchEvent');
var stubAddListener = this.sinon.stub();
MockNavigatorMozTelephony.conferenceGroup.calls = [
{ 'addEventListener': stubAddListener },
{ 'addEventListener': stubAddListener }
];
ScreenManager.handleEvent({'type': 'callschanged'});
assert.isFalse(stubDispatchEvent.calledWith('open-callscreen'));
assert.isFalse(stubAddListener.called);
});
suite('without a cpuWakeLock', function() {
teardown(function() {
ScreenManager._uninstallProximityListener();
});
test('for an incoming call', function() {
var stubDispatchEvent = this.sinon.stub(window, 'dispatchEvent');
var stubAddListener = this.sinon.stub();
MockNavigatorMozTelephony.calls = [{
addEventListener: stubAddListener,
state: 'incoming'
}];
ScreenManager._cpuWakeLock = null;
ScreenManager.handleEvent({'type': 'callschanged'});
assert.isFalse(stubDispatchEvent.calledWith('open-callscreen'));
assert.isTrue(stubAddListener.called);
});
test('for an outgoing call', function() {
var stubAddListener = this.sinon.stub(window, 'addEventListener');
var stubStateListener = this.sinon.stub();
MockNavigatorMozTelephony.calls = [{
addEventListener: stubStateListener,
state: 'dialing'
}];
ScreenManager._cpuWakeLock = null;
ScreenManager.handleEvent({'type': 'callschanged'});
assert.isTrue(stubStateListener.notCalled);
assert.isTrue(stubAddListener.calledOnce);
assert.isTrue(stubAddListener.calledWith('userproximity'));
});
});
});
suite('Testing statechange event', function() {
var stubReqWakeLock, stubAddListener, stubCallRemoveListener, evt;
setup(function() {
stubReqWakeLock = this.sinon.stub(navigator, 'requestWakeLock');
stubAddListener = this.sinon.stub(window, 'addEventListener');
stubCallRemoveListener = this.sinon.stub();
evt = {
'type': 'statechange',
'target': {
'removeEventListener': stubCallRemoveListener
}
};
});
test('state is disconnected', function() {
evt.target.state = 'disconnected';
ScreenManager.handleEvent(evt);
assert.isFalse(stubCallRemoveListener.called);
assert.isFalse(stubAddListener.called);
assert.isFalse(stubReqWakeLock.called);
});
test('state is connected', function() {
evt.target.state = 'connected';
ScreenManager.handleEvent(evt);
assert.isTrue(stubCallRemoveListener.called);
assert.isTrue(stubAddListener.calledOnce);
assert.isTrue(stubAddListener.calledWith('userproximity'));
assert.isTrue(stubReqWakeLock.called);
});
});
test('Testing shutdown event', function() {
var powerOffSpy = this.sinon.spy(MocksleepMenu, 'startPowerOff');
powerOffSpy.withArgs(false);
this.sinon.stub(ScreenManager, 'turnScreenOn');
ScreenManager.handleEvent({
type: 'requestshutdown',
detail: MocksleepMenu
});
assert.isTrue(ScreenManager.turnScreenOn.calledOnce);
assert.isTrue(powerOffSpy.withArgs(false).calledOnce);
});
suite('Testing logohidden event', function() {
var fakeAppConfig1 = {
url: 'app://www.fake/index.html',
manifest: {},
manifestURL: 'app://wwww.fake/ManifestURL',
origin: 'app://www.fake'
};
setup(function() {
MockService.mockQueryWith('locked', true);
MockService.mockQueryWith('getTopMostWindow', {
CLASS_NAME: 'LockScreenWindow'
});
this.sinon.spy(ScreenManager, '_setIdleTimeout');
this.sinon.stub(window, 'removeEventListener');
});
test('Lockscreen is displayed', function() {
MockService.mockQueryWith('locked', true);
window.dispatchEvent(new CustomEvent('logohidden'));
assert.ok(ScreenManager._setIdleTimeout
.withArgs(ScreenManager.LOCKING_TIMEOUT, true).calledOnce);
});
test('Lockscreen closing, it will check if there is a holding wakeLock',
function() {
var originalManager = ScreenManager._wakeLockManager;
ScreenManager._wakeLockManager = {
isHeld: true
};
var originalSetIdleTimeout = ScreenManager._setIdleTimeout;
var stubSetIdleTimeout = this.sinon.stub();
ScreenManager._setIdleTimeout = stubSetIdleTimeout;
ScreenManager.handleEvent(new CustomEvent('lockscreen-appclosing'));
assert.isFalse(stubSetIdleTimeout.called,
'it set the timeout even when the wake lock is being held');
stubSetIdleTimeout = this.sinon.stub();
ScreenManager._setIdleTimeout = stubSetIdleTimeout;
ScreenManager._wakeLockManager = {
isHeld: false
};
ScreenManager.handleEvent(new CustomEvent('lockscreen-appclosing'));
assert.isTrue(stubSetIdleTimeout.called,
'it DOESN\'T set the timeout even when there is no wake lock');
ScreenManager._wakeLockManager = originalManager;
ScreenManager._setIdleTimeout = originalSetIdleTimeout;
});
test('An app is displayed', function() {
MockService.mockQueryWith('getTopMostWindow',
new MockAppWindow(fakeAppConfig1));
window.dispatchEvent(new CustomEvent('logohidden'));
assert.ok(ScreenManager._setIdleTimeout
.withArgs(ScreenManager._idleTimeout, false).calledOnce);
});
test('Remove the event listener', function() {
window.dispatchEvent(new CustomEvent('logohidden'));
assert.ok(window.removeEventListener
.withArgs('logohidden', ScreenManager).calledOnce);
});
});
});
suite('turnScreenOff()', function() {
var stubSetIdle,
stubRemoveListener,
stubFireEvent,
stubUnlock,
stubSetBrightness;
setup(function() {
stubSetIdle = this.sinon.stub(ScreenManager, '_setIdleTimeout');
stubRemoveListener = this.sinon.stub(window, 'removeEventListener');
stubFireEvent = this.sinon.stub(ScreenManager, 'fireScreenChangeEvent');
stubUnlock = this.sinon.stub();
stubSetBrightness = this.sinon.stub(ScreenManager, 'setScreenBrightness');
ScreenManager._cpuWakeLock = {'unlock': stubUnlock};
});
test('when screen disabled', function() {
ScreenManager.screenEnabled = false;
assert.isFalse(ScreenManager.turnScreenOff());
});
test('turn off screen with instant argument', function() {
ScreenManager.screenEnabled = true;
assert.isTrue(ScreenManager.turnScreenOff(true, 'powerkey'));
this.sinon.clock.tick(20);
assert.equal(stubRemoveListener.callCount, 4);
assert.isTrue(stubSetIdle.calledWith(0));
assert.isFalse(ScreenManager.screenEnabled);
assert.isTrue(stubSetBrightness.calledWith(0, true));
assert.isFalse(MockMozPower.screenEnabled);
assert.isFalse(MockMozPower.keyLightEnabled);
assert.isTrue(ScreenManager.fireScreenChangeEvent.called);
});
test('turn off instantly then on again', function() {
ScreenManager.screenEnabled = true;
assert.isTrue(ScreenManager.turnScreenOff(true, 'powerkey'));
this.sinon.clock.tick(10);
assert.isTrue(ScreenManager.turnScreenOn(true));
this.sinon.clock.tick(10);
assert.isTrue(ScreenManager.screenEnabled);
assert.isTrue(MockMozPower.screenEnabled);
assert.isTrue(MockMozPower.keyLightEnabled);
});
test('turn off screen wihout instant argument', function() {
ScreenManager.screenEnabled = true;
assert.isTrue(ScreenManager.turnScreenOff(false));
assert.isFalse(stubSetIdle.called);
this.sinon.clock.tick(ScreenManager._dimNotice);
assert.isTrue(stubSetIdle.called);
});
test('turn off screen but not in transition', function() {
ScreenManager.screenEnabled = true;
assert.isTrue(ScreenManager.turnScreenOff(false));
ScreenManager._inTransition = false;
this.sinon.clock.tick(ScreenManager._dimNotice);
assert.isFalse(stubSetIdle.called);
});
});
suite('turnScreenOn()', function() {
var stubSetBrightness,
stubReconfTimeout,
stubTelephony = {},
stubReqWakeLock,
stubAddListener,
stubFireEvent;
setup(function() {
stubSetBrightness = this.sinon.stub(ScreenManager, 'setScreenBrightness');
stubReconfTimeout =
this.sinon.stub(ScreenManager, '_reconfigScreenTimeout');
switchProperty(navigator, 'mozTelephony', stubTelephony, reals);
stubReqWakeLock = this.sinon.stub(navigator, 'requestWakeLock');
stubAddListener = this.sinon.stub(window, 'addEventListener');
stubFireEvent = this.sinon.stub(ScreenManager, 'fireScreenChangeEvent');
});
teardown(function() {
restoreProperty(navigator, 'mozTelephony', reals);
});
test('screen enabled when _inTransition is false', function() {
ScreenManager.screenEnabled = true;
ScreenManager._inTransition = false;
assert.isFalse(ScreenManager.turnScreenOn(true));
assert.isFalse(stubReconfTimeout.called);
});
test('screen enabled when _inTransition is false', function() {
ScreenManager._inTransition = true;
assert.isFalse(ScreenManager.turnScreenOn(true));
assert.isTrue(stubSetBrightness.called);
assert.isTrue(stubReconfTimeout.called);
});
test('screen disabled when _deviceLightEnable is true', function() {
ScreenManager.screenEnabled = false;
stubTelephony.calls = [];
stubTelephony.conferenceGroup = {calls: []};
ScreenManager._deviceLightEnable = true;
ScreenManager.turnScreenOn(true);
assert.isTrue(stubAddListener.called);
assert.isTrue(stubReconfTimeout.called);
assert.isTrue(stubFireEvent.called);
});
test('screen disabled when _deviceLightEnable is false', function() {
ScreenManager._deviceLightEnable = false;
stubAddListener.reset();
ScreenManager.turnScreenOn(true);
assert.isFalse(stubAddListener.called);
});
test('screen disabled with a call', function() {
ScreenManager.screenEnabled = false;
stubTelephony.calls = [{'state': 'connected'}];
stubTelephony.conferenceGroup = {calls: []};
ScreenManager.turnScreenOn(true);
assert.isTrue(stubReqWakeLock.calledWith('cpu'));
assert.isTrue(stubAddListener.calledWith('userproximity'));
});
test('screen disabled with a conference call', function() {
ScreenManager.screenEnabled = false;
stubTelephony.calls = [];
stubTelephony.conferenceGroup = {
calls: [{'addEventListener': stubAddListener},
{'addEventListener': stubAddListener}]
};
ScreenManager.turnScreenOn(true);
assert.isTrue(stubReqWakeLock.calledWith('cpu'));
assert.isTrue(stubAddListener.calledWith('userproximity'));
});
});
suite('setScreenBrightness()', function() {
test('set brightness with instant argument', function() {
ScreenManager.setScreenBrightness(0.5, true);
assert.equal(MockMozPower.screenBrightness, 0.5);
});
test('set brightness without instant argument', function() {
ScreenManager.setScreenBrightness(0.5, false);
assert.isTrue(stubScreenBrightnessTransition.transitionTo.called);
});
});
suite('setDeviceLightEnabled()', function() {
var stubSetBrightness, stubAddListener, stubRemoveListener;
setup(function() {
stubSetBrightness = this.sinon.stub(ScreenManager, 'setScreenBrightness');
stubAddListener = this.sinon.stub(window, 'addEventListener');
stubRemoveListener = this.sinon.stub(window, 'removeEventListener');
});
test('if setDeviceLightEnabled(false) and ' +
'_deviceLightEnabled is true', function() {
ScreenManager._userBrightness = 0.5;
ScreenManager._deviceLightEnabled = true;
ScreenManager.setDeviceLightEnabled(false);
assert.isTrue(stubSetBrightness.calledWith(0.5, false));
});
test('if argument is true', function() {
ScreenManager.setDeviceLightEnabled(true);
assert.isFalse(stubSetBrightness.called);
});
test('if argument is false', function() {
ScreenManager.setDeviceLightEnabled(false);
assert.isFalse(stubAddListener.called);
assert.isTrue(stubRemoveListener.called);
});
test('if argument & screenEnabled are both true', function() {
ScreenManager.screenEnabled = true;
ScreenManager.setDeviceLightEnabled(true);
assert.isTrue(stubAddListener.called);
assert.isFalse(stubRemoveListener.called);
});
});
test('_setIdleTimeout()', function() {
var stubClearIdleTimeout, stubSetIdleTimeout;
setup(function() {
stubClearIdleTimeout = this.sinon.stub();
switchProperty(window, 'clearIdleTimeout', stubClearIdleTimeout, reals);
stubSetIdleTimeout = this.sinon.stub();
switchProperty(window, 'setIdleTimeout', stubSetIdleTimeout, reals);
});
teardown(function() {
restoreProperty(window, 'clearIdleTimeout', reals);
restoreProperty(window, 'setIdleTimeout', reals);
});
test('set idle timeout to 100', function() {
ScreenManager._setIdleTimeout(100, true);
assert.isTrue(stubClearIdleTimeout.called);
assert.isTrue(stubSetIdleTimeout.called);
});
test('set idle timeout to 0', function() {
ScreenManager._setIdleTimeout(0, true);
assert.isTrue(stubClearIdleTimeout.called);
assert.isFalse(stubSetIdleTimeout.called);
});
});
test('fireScreenChangeEvent()', function() {
var stubDispatchEvent = this.sinon.stub(window, 'dispatchEvent');
ScreenManager.fireScreenChangeEvent();
assert.isTrue(stubDispatchEvent.called);
});
suite('toggleScreen()', function() {
var stubTurnOff, stubTurnOn;
setup(function() {
stubTurnOff = this.sinon.stub(ScreenManager, 'turnScreenOff');
stubTurnOn = this.sinon.stub(ScreenManager, 'turnScreenOn');
});
test('if screenEnabled is true', function() {
ScreenManager.screenEnabled = true;
ScreenManager.toggleScreen();
assert.isTrue(stubTurnOff.calledWith(true, 'toggle'));
assert.isFalse(stubTurnOn.called);
});
test('if screenEnabled is false', function() {
ScreenManager.screenEnabled = false;
ScreenManager.toggleScreen();
assert.isTrue(stubTurnOn.called);
assert.isFalse(stubTurnOff.called);
});
});
suite('Attention window open events', function() {
test('handle attentionopening event', function() {
// The public interface is event, so we manually fire and forward it to
// the handler, to avoid the asynchronous part which is unnecessary in
// the test.
var stubDispatchEvent = this.sinon.stub(window, 'dispatchEvent',
function(e) {
ScreenManager.handleEvent(e);
});
var stubTurnOn = this.sinon.stub(ScreenManager, 'turnScreenOn');
ScreenManager.enabled = false;
window.dispatchEvent(new CustomEvent('attentionopening'));
assert.isTrue(stubTurnOn.called);
stubDispatchEvent.restore();
});
test('handle attentionopened event', function() {
// The public interface is event, so we manually fire and forward it to
// the handler, to avoid the asynchronous part which is unnecessary in
// the test.
var stubDispatchEvent = this.sinon.stub(window, 'dispatchEvent',
function(e) {
ScreenManager.handleEvent(e);
});
var stubTurnOn = this.sinon.stub(ScreenManager, 'turnScreenOn');
ScreenManager.enabled = false;
window.dispatchEvent(new CustomEvent('attentionopened'));
assert.isTrue(stubTurnOn.called);
stubDispatchEvent.restore();
});
});
suite('secureapp opened/terminated events', function() {
test('secur-appeopend', function() {
var evt = { 'type': 'secure-appopened' };
var stubReconfigScreenTimeout =
this.sinon.stub(ScreenManager, '_reconfigScreenTimeout');
ScreenManager.handleEvent(evt);
assert.isTrue(stubReconfigScreenTimeout.called,
'it doesn\'t reset the timeout while secure appcreated');
});
test('secur-appterminated', function() {
var evt = { 'type': 'secure-appterminated' };
var stubReconfigScreenTimeout =
this.sinon.stub(ScreenManager, '_reconfigScreenTimeout');
ScreenManager.handleEvent(evt);
assert.isTrue(stubReconfigScreenTimeout.called,
'it doesn\'t reset the timeout while secure appterminated');
});
});
suite('unlocking-start/stop events', function() {
test('handle unlocking-start event', function() {
// The public interface is event, so we manually fire and forward it to
// the handler, to avoid the asynchronous part which is unnecessary in
// the test.
var stubDispatchEvent = this.sinon.stub(window, 'dispatchEvent',
function(e) {
ScreenManager.handleEvent(e);
});
window.dispatchEvent(new CustomEvent('unlocking-start'));
assert.isTrue(ScreenManager._unlocking);
stubDispatchEvent.restore();
});
test('handle unlocking-stop event', function() {
var stubDispatchEvent = this.sinon.stub(window, 'dispatchEvent',
function(e) {
ScreenManager.handleEvent(e);
});
var stubReconfigScreenTimeout = this.sinon.stub(ScreenManager,
'_reconfigScreenTimeout');
window.dispatchEvent(new CustomEvent('unlocking-stop'));
assert.isFalse(ScreenManager._unlocking);
assert.isTrue(stubReconfigScreenTimeout.called);
stubDispatchEvent.restore();
stubReconfigScreenTimeout.restore();
});
});
});