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
362
gaia/apps/ftu/test/unit/timezone_test.js
Executable file
362
gaia/apps/ftu/test/unit/timezone_test.js
Executable file
|
|
@ -0,0 +1,362 @@
|
|||
/* global MocksHelper, MockNavigatorSettings,
|
||||
MockL10n, MockNavigatorMozMobileConnections,
|
||||
IccHelper, tzSelect
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
require('/shared/test/unit/mocks/mock_navigator_moz_mobile_connections.js');
|
||||
require('/shared/test/unit/mocks/mock_navigator_moz_settings.js');
|
||||
require('/shared/test/unit/mocks/mock_icc_helper.js');
|
||||
require('/shared/test/unit/mocks/mock_l20n.js');
|
||||
|
||||
require('/shared/test/unit/load_body_html_helper.js');
|
||||
|
||||
var mocksHelperForTimezones = new MocksHelper([
|
||||
'IccHelper'
|
||||
]).init();
|
||||
|
||||
suite('timezones >', function() {
|
||||
var realMozMobileConnections,
|
||||
realMozSettings,
|
||||
realXHR,
|
||||
realL10n;
|
||||
|
||||
var regionSelector, citySelector;
|
||||
|
||||
var TIMEZONES = {
|
||||
'Africa': [
|
||||
{'cc':'NA', 'offset':'+01:00,+02:00', 'city':'Windhoek'}
|
||||
],
|
||||
'America': [
|
||||
{'cc':'VE', 'offset':'-04:30,-04:30', 'city':'Caracas'},
|
||||
{'cc':'US', 'offset':'-05:00,-04:00', 'city':'New_York'}
|
||||
],
|
||||
'Asia': [
|
||||
{'cc':'TW', 'offset':'+08:00,+08:00', 'city':'Taipei'}
|
||||
],
|
||||
'Australia': [
|
||||
{'cc':'AU', 'offset':'+10:00,+11:00', 'city':'Sydney'}
|
||||
],
|
||||
'Europe': [
|
||||
{'cc':'ES', 'offset':'+01:00,+02:00', 'city':'Madrid'},
|
||||
{'cc':'GB', 'offset':'+00:00,+01:00', 'city':'London'}
|
||||
],
|
||||
'Indian': [
|
||||
{'cc':'RE', 'offset':'+04:00,+04:00', 'city':'Reunion'}
|
||||
]
|
||||
};
|
||||
var APN_TZ = {
|
||||
'649': 'Africa/Windhoek',
|
||||
'734': 'America/Caracas',
|
||||
'310': 'America/New_York',
|
||||
'311': 'America/New_York',
|
||||
'466': 'Asia/Taipei',
|
||||
'505': 'Australia/Sydney',
|
||||
'647': 'Indian/Reunion',
|
||||
'214': 'Europe/Madrid',
|
||||
'234': {
|
||||
'00': 'Europe/London',
|
||||
'02': 'Europe/London',
|
||||
'03': 'Europe/Jersey',
|
||||
'10': 'Europe/London',
|
||||
'11': 'Europe/London',
|
||||
'15': 'Europe/London',
|
||||
'20': 'Europe/London',
|
||||
'30': 'Europe/London',
|
||||
'31': 'Europe/London',
|
||||
'32': 'Europe/London',
|
||||
'33': 'Europe/London',
|
||||
'34': 'Europe/London',
|
||||
'36': 'Europe/Isle_of_Man',
|
||||
'50': 'Europe/Jersey',
|
||||
'55': 'Europe/Jersey',
|
||||
'58': 'Europe/Isle_of_Man'
|
||||
}
|
||||
};
|
||||
|
||||
function getTextFromSelectors() {
|
||||
// Careful with the text transformations for the lists
|
||||
// we add 'tzRegion-' to mapped regions
|
||||
var mRegion = regionSelector.querySelectorAll('option')
|
||||
[regionSelector.selectedIndex].getAttribute('data-l10n-id');
|
||||
var mCity = citySelector.querySelectorAll('option')
|
||||
[citySelector.selectedIndex].textContent;
|
||||
return {
|
||||
region: mRegion,
|
||||
city: mCity
|
||||
};
|
||||
}
|
||||
|
||||
function MockXMLHttpRequest() {
|
||||
var mResponse = MockXMLHttpRequest.mResponse;
|
||||
this.open = function(method, url) {
|
||||
if (url) {
|
||||
var urlArray = url.split('/');
|
||||
var file = urlArray[urlArray.length - 1].split('.')[0];
|
||||
switch (file) {
|
||||
case 'tz':
|
||||
mResponse = TIMEZONES;
|
||||
break;
|
||||
case 'apn_tz':
|
||||
mResponse = APN_TZ;
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
this.send = function() {
|
||||
this.response = mResponse;
|
||||
this.timeout = setTimeout(this.onload.bind(this));
|
||||
};
|
||||
this.abort = function() {
|
||||
if (this.timeout) {
|
||||
clearTimeout(this.clearTimeout);
|
||||
}
|
||||
};
|
||||
}
|
||||
mocksHelperForTimezones.attachTestHelpers();
|
||||
|
||||
suiteSetup(function(done) {
|
||||
// we use the real XHR here, and mock it for the rest of the tests
|
||||
loadBodyHTML('/index.html');
|
||||
|
||||
realMozSettings = navigator.mozSettings;
|
||||
navigator.mozSettings = MockNavigatorSettings;
|
||||
MockNavigatorSettings.mSettings['time.timezone'] = 'America/New_York';
|
||||
MockNavigatorSettings.mSettings['time.timezone.user-selected'] = null;
|
||||
|
||||
realL10n = document.l10n;
|
||||
document.l10n = MockL10n;
|
||||
|
||||
realMozMobileConnections = navigator.mozMobileConnections;
|
||||
navigator.mozMobileConnections = MockNavigatorMozMobileConnections;
|
||||
|
||||
realXHR = window.XMLHttpRequest;
|
||||
window.XMLHttpRequest = MockXMLHttpRequest;
|
||||
|
||||
require('/shared/js/tz_select.js', done);
|
||||
|
||||
regionSelector = document.getElementById('tz-region');
|
||||
citySelector = document.getElementById('tz-city');
|
||||
});
|
||||
|
||||
suiteTeardown(function() {
|
||||
navigator.mozMobileConnections = realMozMobileConnections;
|
||||
navigator.mozSettings = realMozSettings;
|
||||
document.l10n = realL10n;
|
||||
window.XMLHttpRequest = realXHR;
|
||||
});
|
||||
|
||||
test('> observing changes on time.timezone', function() {
|
||||
assert.isNotNull(navigator.mozSettings.mObservers['time.timezone']);
|
||||
});
|
||||
|
||||
test('> no previous user interaction, use DEFAULT timezone', function() {
|
||||
assert.equal(navigator.mozSettings.mSettings['time.timezone'],
|
||||
'America/New_York');
|
||||
});
|
||||
|
||||
suite('> very first run, no user interaction', function() {
|
||||
suite('> no SIM card', function() {
|
||||
setup(function() {
|
||||
IccHelper.setProperty('iccInfo', null);
|
||||
});
|
||||
|
||||
test('we use DEFAULT value', function(done) {
|
||||
function tzLoaded(timezone, needsConfirmation) {
|
||||
var currentValues = getTextFromSelectors();
|
||||
assert.equal(currentValues.region, 'tzRegion-America');
|
||||
assert.equal(currentValues.city, 'New York');
|
||||
assert.isTrue(needsConfirmation);
|
||||
done();
|
||||
}
|
||||
|
||||
tzSelect(regionSelector, citySelector, tzLoaded, tzLoaded);
|
||||
});
|
||||
});
|
||||
|
||||
suite('> SIM ready, connection avaiable', function() {
|
||||
var conn;
|
||||
|
||||
setup(function() {
|
||||
// we need a live connection for this test (network)
|
||||
conn = new window.MockMobileconnection();
|
||||
conn.voice = {
|
||||
connected: true,
|
||||
network: {
|
||||
mcc: 466, // Asia / Taipei
|
||||
mnc: 2
|
||||
}
|
||||
};
|
||||
|
||||
MockNavigatorMozMobileConnections.mAddMobileConnection(conn, 0);
|
||||
});
|
||||
|
||||
teardown(function() {
|
||||
conn = null;
|
||||
MockNavigatorMozMobileConnections.mRemoveMobileConnection();
|
||||
});
|
||||
|
||||
test('get timezone from the connection', function(done) {
|
||||
function tzLoaded(timezone, needsConfirmation) {
|
||||
var currentValues = getTextFromSelectors();
|
||||
assert.equal(currentValues.region, 'tzRegion-Australia');
|
||||
assert.equal(currentValues.city, 'Sydney');
|
||||
// When the timezone (and presumably the time) is loaded from
|
||||
// network, it doesn't need to be confirmed by the user.
|
||||
assert.isFalse(needsConfirmation);
|
||||
done();
|
||||
}
|
||||
|
||||
conn.voice.network.mcc = 505; // Australia/Sydney
|
||||
tzSelect(regionSelector, citySelector, tzLoaded, tzLoaded);
|
||||
});
|
||||
|
||||
test('if unknown MCC/MNC, use default', function(done) {
|
||||
function tzLoaded(timezone, needsConfirmation) {
|
||||
var currentValues = getTextFromSelectors();
|
||||
// DEFAULT is America/New_York
|
||||
assert.equal(currentValues.region, 'tzRegion-America');
|
||||
assert.equal(currentValues.city, 'New York');
|
||||
assert.isTrue(needsConfirmation);
|
||||
done();
|
||||
}
|
||||
|
||||
conn.voice.network.mcc = 1; // unknown
|
||||
conn.voice.network.mnc = 1; // unknown
|
||||
tzSelect(regionSelector, citySelector, tzLoaded, tzLoaded);
|
||||
});
|
||||
});
|
||||
|
||||
suite('> SIM ready, no connection', function() {
|
||||
var conn;
|
||||
|
||||
setup(function() {
|
||||
// no connection
|
||||
conn = new window.MockMobileconnection();
|
||||
conn.voice = null;
|
||||
MockNavigatorMozMobileConnections.mAddMobileConnection(conn, 0);
|
||||
|
||||
// but access to the SIM data
|
||||
IccHelper.setProperty('cardstate', 'ready');
|
||||
});
|
||||
|
||||
teardown(function() {
|
||||
conn = null;
|
||||
MockNavigatorMozMobileConnections.mRemoveMobileConnection();
|
||||
});
|
||||
|
||||
test('get timezone from SIM', function(done) {
|
||||
function tzLoaded(timezone, needsConfirmation) {
|
||||
var currentValues = getTextFromSelectors();
|
||||
assert.equal(currentValues.region, 'tzRegion-Europe');
|
||||
assert.equal(currentValues.city, 'London');
|
||||
assert.isTrue(needsConfirmation);
|
||||
done();
|
||||
}
|
||||
|
||||
IccHelper.setProperty('iccInfo',{
|
||||
mcc: 234, // Europe/London
|
||||
mnc: 32
|
||||
});
|
||||
|
||||
tzSelect(regionSelector, citySelector, tzLoaded, tzLoaded);
|
||||
});
|
||||
|
||||
test('if unknown MCC/MNC, use default', function(done) {
|
||||
function tzLoaded(timezone, needsConfirmation) {
|
||||
var currentValues = getTextFromSelectors();
|
||||
assert.equal(currentValues.region, 'tzRegion-America');
|
||||
assert.equal(currentValues.city, 'New York');
|
||||
assert.isTrue(needsConfirmation);
|
||||
done();
|
||||
}
|
||||
|
||||
IccHelper.setProperty('iccInfo',{
|
||||
mcc: 0, // unknown
|
||||
mnc: 0 // unknown
|
||||
});
|
||||
tzSelect(regionSelector, citySelector, tzLoaded, tzLoaded);
|
||||
});
|
||||
});
|
||||
|
||||
suite('> protected SIM card', function() {
|
||||
var conn;
|
||||
|
||||
setup(function() {
|
||||
// no connection
|
||||
conn = new window.MockMobileconnection();
|
||||
conn.voice = null;
|
||||
MockNavigatorMozMobileConnections.mAddMobileConnection(conn, 0);
|
||||
|
||||
// but access to the SIM data
|
||||
|
||||
IccHelper.setProperty('cardstate', 'pin_required');
|
||||
});
|
||||
|
||||
teardown(function() {
|
||||
MockNavigatorMozMobileConnections.mRemoveMobileConnection();
|
||||
});
|
||||
|
||||
test('> default is used while waiting for access', function(done) {
|
||||
function tzLoaded(timezone, needsConfirmation) {
|
||||
var currentValues = getTextFromSelectors();
|
||||
assert.lengthOf(IccHelper.mEventListeners.iccinfochange, 1);
|
||||
assert.equal(currentValues.region, 'tzRegion-America');
|
||||
assert.equal(currentValues.city, 'New York');
|
||||
assert.isTrue(needsConfirmation);
|
||||
done();
|
||||
}
|
||||
|
||||
tzSelect(regionSelector, citySelector, tzLoaded, tzLoaded);
|
||||
});
|
||||
|
||||
test('> reload when granted access to SIM info', function(done) {
|
||||
var calls = 0;
|
||||
function tzLoaded(timezone, needsConfirmation) {
|
||||
calls++;
|
||||
IccHelper.mTriggerEventListeners('iccinfochange', {});
|
||||
|
||||
// we expect 2 calls before finishing
|
||||
if (calls === 2) {
|
||||
var currentValues = getTextFromSelectors();
|
||||
done(function check_asserts() {
|
||||
assert.equal(currentValues.region, 'tzRegion-Europe');
|
||||
assert.equal(currentValues.city, 'London');
|
||||
assert.isTrue(needsConfirmation);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
IccHelper.setProperty('iccInfo',{
|
||||
mcc: 234, // Europe
|
||||
mnc: 20 // London
|
||||
});
|
||||
tzSelect(regionSelector, citySelector, tzLoaded, tzLoaded);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
suite('> user chose previously', function() {
|
||||
|
||||
setup(function() {
|
||||
MockNavigatorSettings.mSettings['time.timezone.user-selected'] =
|
||||
'Europe/Madrid';
|
||||
});
|
||||
teardown(function() {
|
||||
MockNavigatorSettings.mSettings['time.timezone.user-selected'] = null;
|
||||
});
|
||||
|
||||
test('> previous selection prevails', function(done) {
|
||||
function tzLoaded(timezone, needsConfirmation) {
|
||||
var currentValues = getTextFromSelectors();
|
||||
assert.equal(currentValues.region, 'tzRegion-Europe');
|
||||
assert.equal(currentValues.city, 'Madrid');
|
||||
assert.isTrue(needsConfirmation);
|
||||
done();
|
||||
}
|
||||
|
||||
tzSelect(regionSelector, citySelector, tzLoaded, tzLoaded);
|
||||
});
|
||||
});
|
||||
});
|
||||
Loading…
Reference in a new issue