VulpesOS/gaia/apps/system/test/unit/quick_settings_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

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] + '');
});
});
});
});