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.
This commit is contained in:
parent
93e3a48004
commit
b38dea0597
25901 changed files with 9982925 additions and 369 deletions
243
gaia/apps/emergency-call/test/unit/keypad_test.js
Executable file
243
gaia/apps/emergency-call/test/unit/keypad_test.js
Executable file
|
|
@ -0,0 +1,243 @@
|
|||
/* globals gTonesFrequencies, KeypadManager, loadBodyHTML,
|
||||
MockIccManager, MockL10n, MockNavigatorMozTelephony,
|
||||
MockNavigatorSettings, MockSettingsListener, MocksHelper,
|
||||
MockTonePlayer
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
require('/shared/test/unit/load_body_html_helper.js');
|
||||
require('/shared/test/unit/mocks/mock_confirm_dialog.js');
|
||||
require('/shared/test/unit/mocks/mock_iccmanager.js');
|
||||
require('/shared/test/unit/mocks/mock_l10n.js');
|
||||
require('/shared/test/unit/mocks/mock_lazy_loader.js');
|
||||
require('/shared/test/unit/mocks/mock_navigator_moz_settings.js');
|
||||
require('/shared/test/unit/mocks/mock_navigator_moz_telephony.js');
|
||||
require('/shared/test/unit/mocks/mock_settings_listener.js');
|
||||
require('/shared/test/unit/mocks/dialer/mock_call.js');
|
||||
require('/shared/test/unit/mocks/dialer/mock_utils.js');
|
||||
require('/shared/test/unit/mocks/dialer/mock_tone_player.js');
|
||||
|
||||
require('/shared/js/dialer/dtmf_tone.js');
|
||||
require('/js/keypad.js');
|
||||
|
||||
|
||||
var mocksHelperForKeypad = new MocksHelper([
|
||||
'LazyLoader',
|
||||
'Utils',
|
||||
'SettingsListener',
|
||||
'TonePlayer'
|
||||
]).init();
|
||||
|
||||
suite('Keypad', function() {
|
||||
var subject;
|
||||
var realMozIccManager;
|
||||
var realMozL10n;
|
||||
var realMozSettings;
|
||||
var realMozTelephony;
|
||||
|
||||
mocksHelperForKeypad.attachTestHelpers();
|
||||
|
||||
// Dummy node used as event target
|
||||
var dummyNode = document.createElement('div');
|
||||
|
||||
/**
|
||||
* Simulate a touchstart event
|
||||
*
|
||||
* @param key {String} The target's dataset value, the touched key
|
||||
*/
|
||||
function mockTouchStart(key) {
|
||||
var fakeEvent = {
|
||||
target: dummyNode,
|
||||
preventDefault: function() {},
|
||||
stopPropagation: function() {},
|
||||
type: 'touchstart'
|
||||
};
|
||||
dummyNode.dataset.value = key;
|
||||
subject.keyHandler(fakeEvent);
|
||||
}
|
||||
|
||||
/**
|
||||
* Simulate a touchend event
|
||||
*
|
||||
* @param key {String} The target's dataset value, the touched key
|
||||
*/
|
||||
function mockTouchEnd(key) {
|
||||
var fakeEvent = {
|
||||
target: dummyNode,
|
||||
preventDefault: function() {},
|
||||
stopPropagation: function() {},
|
||||
type: 'touchend'
|
||||
};
|
||||
dummyNode.dataset.value = key;
|
||||
subject.keyHandler(fakeEvent);
|
||||
}
|
||||
|
||||
suiteSetup(function() {
|
||||
realMozIccManager = navigator.mozIccManager;
|
||||
navigator.mozIccManager = new MockIccManager();
|
||||
|
||||
realMozL10n = navigator.mozL10n;
|
||||
navigator.mozL10n = MockL10n;
|
||||
|
||||
realMozSettings = navigator.mozSettings;
|
||||
navigator.mozSettings = MockNavigatorSettings;
|
||||
MockNavigatorSettings.mSyncRepliesOnly = true;
|
||||
|
||||
realMozTelephony = navigator.mozTelephony;
|
||||
navigator.mozTelephony = MockNavigatorMozTelephony;
|
||||
});
|
||||
|
||||
suiteTeardown(function() {
|
||||
navigator.mozIccManager = realMozIccManager;
|
||||
navigator.mozL10n = realMozL10n;
|
||||
navigator.mozSettings = realMozSettings;
|
||||
MockNavigatorSettings.mSyncRepliesOnly = false;
|
||||
MockNavigatorMozTelephony.mSuiteTeardown();
|
||||
navigator.mozTelephony = realMozTelephony;
|
||||
});
|
||||
|
||||
setup(function() {
|
||||
loadBodyHTML('/test/unit/mock_dialer_index.html');
|
||||
|
||||
dummyNode = document.createElement('div');
|
||||
|
||||
subject = KeypadManager;
|
||||
subject.init(false);
|
||||
|
||||
this.sinon.useFakeTimers();
|
||||
});
|
||||
|
||||
teardown(function() {
|
||||
dummyNode = null;
|
||||
MockNavigatorMozTelephony.mTeardown();
|
||||
});
|
||||
|
||||
suite('Keypad Manager', function() {
|
||||
test('initializates the TonePlayer to use the "system" channel',
|
||||
function() {
|
||||
this.sinon.spy(MockTonePlayer, 'init');
|
||||
KeypadManager.init(/* oncall */ false);
|
||||
|
||||
sinon.assert.calledWith(MockTonePlayer.init, 'system');
|
||||
});
|
||||
|
||||
test('sanitizePhoneNumber', function(done) {
|
||||
var testCases = {
|
||||
'111-111-1111': '111-111-1111',
|
||||
' 222-222-2222 ': '222-222-2222',
|
||||
' 333 - 333 - 3333 ': '333-333-3333',
|
||||
'4444 4444 4444': '444444444444',
|
||||
'555\n555\n5555': '5555555555',
|
||||
'666\t666\t6666': '6666666666'
|
||||
};
|
||||
|
||||
var counter = 0;
|
||||
|
||||
function verifyNumber(index) {
|
||||
return function() {
|
||||
var sanitized = subject.sanitizePhoneNumber(index);
|
||||
assert.equal(sanitized, testCases[index]);
|
||||
};
|
||||
}
|
||||
|
||||
for (var i in testCases) {
|
||||
counter++;
|
||||
test('#sanitizePhoneNumber - test case ' + counter, verifyNumber(i));
|
||||
}
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
test('Adds active class to keys when pressed', function() {
|
||||
subject._phoneNumber = '';
|
||||
|
||||
mockTouchStart('1');
|
||||
assert.isTrue(dummyNode.classList.contains('active'));
|
||||
mockTouchEnd('1');
|
||||
assert.isFalse(dummyNode.classList.contains('active'));
|
||||
});
|
||||
|
||||
test('Multi-tap events are ignored', function() {
|
||||
mockTouchStart('1');
|
||||
assert.equal(subject._phoneNumber, '1');
|
||||
mockTouchStart('2');
|
||||
assert.equal(subject._phoneNumber, '1');
|
||||
mockTouchEnd('2');
|
||||
assert.equal(subject._phoneNumber, '1');
|
||||
mockTouchEnd('1');
|
||||
assert.equal(subject._phoneNumber, '1');
|
||||
});
|
||||
|
||||
suite('Audible and DTMF tones when composing numbers', function() {
|
||||
|
||||
setup(function() {
|
||||
subject._observePreferences();
|
||||
MockSettingsListener.mCallbacks['phone.ring.keypad'](true);
|
||||
});
|
||||
|
||||
test('Pressing a button plays a short tone', function() {
|
||||
var startSpy = this.sinon.spy(MockTonePlayer, 'start');
|
||||
var stopSpy = this.sinon.spy(MockTonePlayer, 'stop');
|
||||
|
||||
mockTouchStart('1');
|
||||
assert.isTrue(startSpy.calledWith(gTonesFrequencies['1'], true));
|
||||
mockTouchEnd('1');
|
||||
assert.isTrue(stopSpy.calledOnce);
|
||||
});
|
||||
|
||||
test('Button tones are disabled via prefs', function() {
|
||||
var startSpy = this.sinon.spy(MockTonePlayer, 'start');
|
||||
|
||||
MockSettingsListener.mCallbacks['phone.ring.keypad'](false);
|
||||
mockTouchStart('1');
|
||||
assert.isTrue(startSpy.notCalled);
|
||||
mockTouchEnd('1');
|
||||
assert.isTrue(startSpy.notCalled);
|
||||
});
|
||||
|
||||
test('Pressing a button does not play a DTMF tone', function() {
|
||||
var startToneSpy =
|
||||
this.sinon.spy(MockNavigatorMozTelephony, 'startTone');
|
||||
var stopToneSpy =
|
||||
this.sinon.spy(MockNavigatorMozTelephony, 'stopTone');
|
||||
|
||||
mockTouchStart('1');
|
||||
assert.isTrue(stopToneSpy.notCalled);
|
||||
assert.isTrue(startToneSpy.notCalled);
|
||||
});
|
||||
});
|
||||
|
||||
suite('Keypad vibration', function() {
|
||||
setup(function() {
|
||||
this.sinon.spy(navigator, 'vibrate');
|
||||
subject._observePreferences();
|
||||
});
|
||||
|
||||
test('vibrates if setting is set', function() {
|
||||
MockSettingsListener.mCallbacks['keyboard.vibration'](true);
|
||||
|
||||
mockTouchStart('1');
|
||||
sinon.assert.calledWith(navigator.vibrate, 50);
|
||||
});
|
||||
|
||||
test('does not vibrate if setting is not set', function() {
|
||||
MockSettingsListener.mCallbacks['keyboard.vibration'](false);
|
||||
|
||||
mockTouchStart('1');
|
||||
sinon.assert.notCalled(navigator.vibrate);
|
||||
});
|
||||
});
|
||||
|
||||
suite('Long press', function() {
|
||||
setup(function() {
|
||||
this.sinon.spy(window, 'setTimeout');
|
||||
});
|
||||
|
||||
test('should not try to detect the voicemail action', function() {
|
||||
mockTouchStart('1');
|
||||
sinon.assert.calledOnce(window.setTimeout);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
Loading…
Reference in a new issue