Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
294 lines
8.9 KiB
JavaScript
Executable file
294 lines
8.9 KiB
JavaScript
Executable file
'use strict';
|
|
/* global MockL10n, MockNavigatorMozMobileConnections,
|
|
MockNavigatorSettings, MocksHelper, MockSettingsListener,
|
|
MockWifiManager, QuickSettings, MockService */
|
|
|
|
require('/test/unit/mock_activity.js');
|
|
require('/shared/test/unit/mocks/mock_l10n.js');
|
|
require('/test/unit/mock_wifi_manager.js');
|
|
require('/shared/test/unit/mocks/mock_service.js');
|
|
require('/shared/test/unit/mocks/mock_settings_listener.js');
|
|
require('/shared/test/unit/mocks/mock_navigator_moz_settings.js');
|
|
require('/shared/test/unit/mocks/mock_navigator_moz_mobile_connections.js');
|
|
|
|
require('/js/quick_settings.js');
|
|
|
|
var mocksForQuickSettings = new MocksHelper([
|
|
'Service',
|
|
'MozActivity',
|
|
'SettingsListener',
|
|
'NavigatorMozMobileConnections'
|
|
]).init();
|
|
|
|
suite('quick settings > ', function() {
|
|
var realWifiManager;
|
|
var realL10n;
|
|
var realSettings;
|
|
var realMozMobileConnections;
|
|
var fakeQuickSettingsNode;
|
|
var realAirplaneMode;
|
|
var subject;
|
|
|
|
mocksForQuickSettings.attachTestHelpers();
|
|
|
|
suiteSetup(function() {
|
|
realWifiManager = navigator.mozWifiManager;
|
|
navigator.mozWifiManager = MockWifiManager;
|
|
realSettings = navigator.mozSettings;
|
|
navigator.mozSettings = MockNavigatorSettings;
|
|
realL10n = navigator.mozL10n;
|
|
navigator.mozL10n = MockL10n;
|
|
realMozMobileConnections = navigator.mozMobileConnections;
|
|
navigator.mozMobileConnections = MockNavigatorMozMobileConnections;
|
|
});
|
|
|
|
suiteTeardown(function() {
|
|
navigator.mozWifiManager = realWifiManager;
|
|
navigator.MozMobileConnections = realMozMobileConnections;
|
|
navigator.mozL10n = realL10n;
|
|
navigator.mozSettings = realSettings;
|
|
window.AirplaneMode = realAirplaneMode;
|
|
});
|
|
|
|
setup(function() {
|
|
MockNavigatorMozMobileConnections.mAddMobileConnection();
|
|
|
|
fakeQuickSettingsNode = document.createElement('div');
|
|
fakeQuickSettingsNode.id = 'quick-settings';
|
|
document.body.appendChild(fakeQuickSettingsNode);
|
|
|
|
subject = new QuickSettings();
|
|
|
|
subject.ELEMENTS.forEach(function testAddElement(elementName) {
|
|
var elt = document.createElement('div');
|
|
elt.id = 'quick-settings-' + elementName;
|
|
fakeQuickSettingsNode.appendChild(elt);
|
|
});
|
|
subject.start();
|
|
});
|
|
|
|
teardown(function() {
|
|
fakeQuickSettingsNode.parentNode.removeChild(fakeQuickSettingsNode);
|
|
});
|
|
|
|
suite('Data icon', function() {
|
|
var dataDOM;
|
|
setup(function() {
|
|
this.sinon.stub(document, 'getElementById', function() {
|
|
dataDOM = document.createElement('div');
|
|
return dataDOM;
|
|
});
|
|
});
|
|
test('Data icon is ready when started', function() {
|
|
MockService.mockQueryWith('dataIcon', {
|
|
data_sprite: 'test'
|
|
});
|
|
subject.start();
|
|
assert.equal(dataDOM.style.backgroundImage, 'url("test")');
|
|
});
|
|
|
|
test('Data icon is ready when started', function() {
|
|
subject.start();
|
|
MockService.mockQueryWith('dataIcon', {
|
|
data_sprite: 'test2'
|
|
});
|
|
window.dispatchEvent(new CustomEvent('dataiconchanged'));
|
|
assert.equal(dataDOM.style.backgroundImage, 'url("test2")');
|
|
});
|
|
});
|
|
|
|
test('system/quick settings/enable wifi: Connected', function() {
|
|
MockWifiManager.connection.status = 'connected';
|
|
subject.handleEvent({
|
|
type: 'click',
|
|
target: subject.wifi,
|
|
preventDefault: function() {}
|
|
});
|
|
subject.handleEvent({
|
|
type: 'wifi-statuschange',
|
|
preventDefault: function() {}
|
|
});
|
|
assert.equal(
|
|
MockNavigatorSettings.mSettings['wifi.connect_via_settings'], true);
|
|
});
|
|
|
|
test('system/quick settings/enable wifi: Connecting failed', function() {
|
|
MockWifiManager.connection.status = 'connectingfailed';
|
|
subject.handleEvent({
|
|
type: 'click',
|
|
target: subject.wifi,
|
|
preventDefault: function() {}
|
|
});
|
|
subject.handleEvent({
|
|
type: 'wifi-statuschange',
|
|
preventDefault: function() {}
|
|
});
|
|
assert.equal(
|
|
MockNavigatorSettings.mSettings['wifi.connect_via_settings'], false);
|
|
});
|
|
|
|
test('system/quick settings/enable wifi: Disconnected', function() {
|
|
MockWifiManager.connection.status = 'disconnected';
|
|
subject.handleEvent({
|
|
type: 'click',
|
|
target: subject.wifi,
|
|
preventDefault: function() {}
|
|
});
|
|
subject.handleEvent({
|
|
type: 'wifi-statuschange',
|
|
preventDefault: function() {}
|
|
});
|
|
assert.equal(
|
|
MockNavigatorSettings.mSettings['wifi.connect_via_settings'], false);
|
|
});
|
|
|
|
test('system/quick settings/disable wifi', function() {
|
|
MockSettingsListener.mCallbacks['wifi.enabled'](true);
|
|
subject.handleEvent({
|
|
type: 'click',
|
|
target: subject.wifi,
|
|
preventDefault: function() {}
|
|
});
|
|
assert.equal(
|
|
MockNavigatorSettings.mSettings['wifi.connect_via_settings'], false);
|
|
});
|
|
|
|
test('system/quick disable wifi should not work:' +
|
|
'since airplaneMode is switching', function() {
|
|
MockSettingsListener.mCallbacks['wifi.enabled'](false);
|
|
subject.airplaneModeSwitching = true;
|
|
subject.handleEvent({
|
|
type: 'click',
|
|
target: subject.wifi,
|
|
preventDefault: function() {}
|
|
});
|
|
assert.equal(
|
|
MockNavigatorSettings.mSettings['wifi.enabled'], false);
|
|
});
|
|
|
|
test('system/quick settings/enable airplane mode', function() {
|
|
MockSettingsListener.mCallbacks['airplaneMode.status']('enabled');
|
|
this.sinon.stub(window, 'dispatchEvent');
|
|
subject.handleEvent({
|
|
type: 'click',
|
|
target: subject.airplaneMode,
|
|
preventDefault: function() {}
|
|
});
|
|
assert.equal(
|
|
subject.airplaneMode.dataset.enabled, 'true');
|
|
assert.isTrue(subject.settings.airplaneMode);
|
|
|
|
assert.equal(subject.airplaneModeSwitching, false);
|
|
|
|
assert.equal(
|
|
subject.data.classList.contains(
|
|
'quick-settings-airplane-mode'), true);
|
|
|
|
assert.isTrue(window.dispatchEvent.called);
|
|
assert.equal(window.dispatchEvent.getCall(0).args[0].type,
|
|
'request-airplane-mode-disable');
|
|
});
|
|
|
|
test('system/quick settings/disable airplane mode', function() {
|
|
MockSettingsListener.mCallbacks['airplaneMode.status']('disabled');
|
|
this.sinon.stub(window, 'dispatchEvent');
|
|
subject.handleEvent({
|
|
type: 'click',
|
|
target: subject.airplaneMode,
|
|
preventDefault: function() {}
|
|
});
|
|
assert.equal(
|
|
subject.airplaneMode.dataset.enabled, undefined);
|
|
assert.isFalse(subject.settings.airplaneMode);
|
|
|
|
assert.equal(subject.airplaneModeSwitching, false);
|
|
|
|
assert.equal(
|
|
subject.data.classList.contains(
|
|
'quick-settings-airplane-mode'), false);
|
|
|
|
assert.isTrue(window.dispatchEvent.called);
|
|
assert.equal(window.dispatchEvent.getCall(0).args[0].type,
|
|
'request-airplane-mode-enable');
|
|
});
|
|
|
|
test('system/quick settings/disabling airplane mode', function() {
|
|
MockSettingsListener.mCallbacks['airplaneMode.status']('disabling');
|
|
subject.handleEvent({
|
|
type: 'click',
|
|
target: subject.airplaneMode,
|
|
preventDefault: function() {}
|
|
});
|
|
|
|
assert.equal(
|
|
subject.airplaneMode.dataset.disabling, 'true');
|
|
|
|
assert.equal(subject.airplaneModeSwitching, true);
|
|
|
|
assert.equal(
|
|
subject.airplaneMode.dataset.enabling, undefined);
|
|
});
|
|
|
|
test('system/quick settings/enabling airplane mode', function() {
|
|
MockSettingsListener.mCallbacks['airplaneMode.status']('enabling');
|
|
subject.handleEvent({
|
|
type: 'click',
|
|
target: subject.airplaneMode,
|
|
preventDefault: function() {}
|
|
});
|
|
|
|
assert.equal(
|
|
subject.airplaneMode.dataset.enabling, 'true');
|
|
|
|
assert.equal(subject.airplaneModeSwitching, true);
|
|
|
|
assert.equal(
|
|
subject.airplaneMode.dataset.disabling, undefined);
|
|
});
|
|
|
|
suite('datachange > ', function() {
|
|
var label = {
|
|
'lte': '4G', // 4G LTE
|
|
'ehrpd': '4G', // 4G CDMA
|
|
'hspa+': 'H+', // 3.5G HSPA+
|
|
'hsdpa': 'H', 'hsupa': 'H', 'hspa': 'H', // 3.5G HSDPA
|
|
// 3G CDMA
|
|
'evdo0': '3G', 'evdoa': '3G', 'evdob': '3G', '1xrtt': '3G',
|
|
'umts': '3G', // 3G
|
|
'edge': 'E', // EDGE
|
|
'is95a': '2G', 'is95b': '2G', // 2G CDMA
|
|
'gprs': '2G'
|
|
};
|
|
|
|
function setDataTypeOnConn(index, value) {
|
|
MockNavigatorMozMobileConnections[index].data = {};
|
|
MockNavigatorMozMobileConnections[index].data.type = value;
|
|
}
|
|
|
|
suite('one sim has data but the other one doesn\'t', function() {
|
|
setup(function() {
|
|
setDataTypeOnConn(0, 'umts');
|
|
setDataTypeOnConn(1, undefined);
|
|
MockNavigatorMozMobileConnections[0]
|
|
.triggerEventListeners('datachange');
|
|
});
|
|
|
|
test('we would get 3G label', function() {
|
|
assert.equal(subject.data.dataset.network, label.umts);
|
|
});
|
|
});
|
|
|
|
suite('no sim has data', function() {
|
|
setup(function() {
|
|
setDataTypeOnConn(0, undefined);
|
|
setDataTypeOnConn(1, undefined);
|
|
MockNavigatorMozMobileConnections[0]
|
|
.triggerEventListeners('datachange');
|
|
});
|
|
|
|
test('we would get undefined label', function() {
|
|
assert.equal(subject.data.dataset.network, label[undefined] + '');
|
|
});
|
|
});
|
|
});
|
|
});
|