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
17
gaia/tv_apps/browser/test/unit/.jshintrc
Executable file
17
gaia/tv_apps/browser/test/unit/.jshintrc
Executable file
|
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"extends": "../../../../.jshintrc",
|
||||
"predef": [
|
||||
"assert",
|
||||
"suite",
|
||||
"test",
|
||||
"setup",
|
||||
"teardown",
|
||||
"suiteSetup",
|
||||
"suiteTeardown",
|
||||
"require",
|
||||
"requireApp",
|
||||
"sinon",
|
||||
"mocha",
|
||||
"loadBodyHTML"
|
||||
]
|
||||
}
|
||||
834
gaia/tv_apps/browser/test/unit/browser_db_test.js
Executable file
834
gaia/tv_apps/browser/test/unit/browser_db_test.js
Executable file
|
|
@ -0,0 +1,834 @@
|
|||
'use strict';
|
||||
/* global BrowserDB, NumberHelper, MockNavigatorSettings */
|
||||
/* jshint latedef:false */
|
||||
|
||||
requireApp('browser/shared/test/unit/mocks/' +
|
||||
'mock_navigator_moz_set_message_handler.js');
|
||||
|
||||
// Stub of Browser object.
|
||||
var Browser = {
|
||||
_doNotCustomize: true,
|
||||
_hasSV: false,
|
||||
|
||||
getDefaultData: function getDefaultData(callback) {
|
||||
|
||||
var data = {
|
||||
'topSites': [
|
||||
{
|
||||
'title': 'Mozilla',
|
||||
'uri': 'http://mozilla.org'
|
||||
},
|
||||
{
|
||||
'title': 'Firefox OS',
|
||||
'uri': 'http://mozilla.org/firefoxos'
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
// Imitate real getConfigurationData function by creating JSON from our
|
||||
// object and parsing it before returning it.
|
||||
var json = JSON.stringify(data);
|
||||
|
||||
// Select the data from the object.
|
||||
var parsed = JSON.parse(json);
|
||||
|
||||
// Done, notify callback.
|
||||
callback(parsed);
|
||||
},
|
||||
|
||||
getConfigurationData: function browser_getDefaultData(variant, callback) {
|
||||
|
||||
// For all other tests in the suite, we do _not_ want any customizations.
|
||||
// We use this handy boolean to skip this step.
|
||||
if (this._doNotCustomize) {
|
||||
callback({});
|
||||
return;
|
||||
}
|
||||
|
||||
var mccCode = NumberHelper.zfill(variant.mcc, 3);
|
||||
var mncCode = NumberHelper.zfill(variant.mnc, 3);
|
||||
|
||||
// Customization test data.
|
||||
var dataNoSV = {
|
||||
'000000': {
|
||||
bookmarks: [
|
||||
{
|
||||
title: 'customize test 1',
|
||||
uri: 'http://customize.test.mozilla.org/1'
|
||||
},
|
||||
{
|
||||
title: 'customize test 2',
|
||||
uri: 'http://customize.test.mozilla.org/2'
|
||||
}
|
||||
],
|
||||
searchEngines: [
|
||||
{
|
||||
title: 'customize search test 1',
|
||||
uri: 'http://customize.test.mozilla.org/search/1',
|
||||
iconUri: DATA_URI
|
||||
}
|
||||
],
|
||||
settings: {
|
||||
defaultSearchEngine: 'http://customize.test.mozilla.org/search/1'
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var dataSV = {
|
||||
'000000': {
|
||||
bookmarks: [
|
||||
{
|
||||
title: 'customize test 1',
|
||||
uri: 'http://customize.test.mozilla.org/1'
|
||||
},
|
||||
{
|
||||
title: 'customize test 2',
|
||||
uri: 'http://customize.test.mozilla.org/2'
|
||||
}
|
||||
],
|
||||
searchEngines: [
|
||||
{
|
||||
title: 'customize search test 1',
|
||||
uri: 'http://customize.test.mozilla.org/search/1',
|
||||
iconUri: DATA_URI
|
||||
}
|
||||
],
|
||||
settings: {
|
||||
defaultSearchEngine: 'http://customize.test.mozilla.org/search/1'
|
||||
}
|
||||
},
|
||||
'214007': {
|
||||
bookmarks: [
|
||||
{
|
||||
title: 'customize SV test 1',
|
||||
uri: 'http://customize.sv.test.mozilla.org/1'
|
||||
},
|
||||
{
|
||||
title: 'customize SV test 2',
|
||||
uri: 'http://customize.sv.test.mozilla.org/2'
|
||||
}
|
||||
],
|
||||
searchEngines: [
|
||||
{
|
||||
title: 'customize SV search test 1',
|
||||
uri: 'http://customize.sv.test.mozilla.org/search/1',
|
||||
iconUri: DATA_URI
|
||||
}
|
||||
],
|
||||
settings: {
|
||||
defaultSearchEngine: 'http://customize.sv.test.mozilla.org/search/1'
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// Imitate real getConfigurationData function by creating JSON from our
|
||||
// object and parsing it before returning it.
|
||||
var json =
|
||||
this._hasSV ? JSON.stringify(dataSV) : JSON.stringify(dataNoSV);
|
||||
|
||||
// Select the data from the object.
|
||||
var parsed = JSON.parse(json);
|
||||
|
||||
if (mccCode === '000' && mncCode === '000' && this._hasSV) {
|
||||
BrowserDB.waitFirstRunWithSim();
|
||||
return;
|
||||
}
|
||||
// Done, notify callback.
|
||||
callback(parsed[mccCode + mncCode]);
|
||||
|
||||
return;
|
||||
},
|
||||
|
||||
setSearchProvider: function browser_setSearchProvider(uri, title, iconUri) {
|
||||
return;
|
||||
}
|
||||
};
|
||||
|
||||
requireApp('browser/shared/test/unit/mocks/mock_navigator_moz_settings.js');
|
||||
|
||||
requireApp('browser/shared/js/utilities.js');
|
||||
requireApp('browser/js/browser_db.js');
|
||||
|
||||
/* jshint maxlen:false */
|
||||
const DATA_URI =
|
||||
'data:image/x-icon;base64,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';
|
||||
/* jshint maxlen:80 */
|
||||
|
||||
var clearBrowserStores = function(done) {
|
||||
BrowserDB.db.open(function() {
|
||||
BrowserDB.db.clearPlaces(function() {
|
||||
BrowserDB.db.clearVisits(function() {
|
||||
BrowserDB.db.clearIcons(function() {
|
||||
BrowserDB.db.clearBookmarks(function() {
|
||||
BrowserDB.db.clearSearchEngines(function() {
|
||||
BrowserDB.db.clearSettings(function() {
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
suite('BrowserDB', function() {
|
||||
var realMozSettings = null;
|
||||
|
||||
const MSG_NAME = 'first-run-with-sim';
|
||||
var message = { mcc: '214', mnc: '007' };
|
||||
|
||||
suiteSetup(function() {
|
||||
realMozSettings = navigator.mozSettings;
|
||||
navigator.mozSettings = MockNavigatorSettings;
|
||||
});
|
||||
|
||||
suiteTeardown(function() {
|
||||
navigator.mozSettings = realMozSettings;
|
||||
});
|
||||
|
||||
// XXX: Disable this test since TV doesn't have operator customizations.
|
||||
// Enable and modify this test once customization is implemented.
|
||||
// suite('BrowserDB.operatorVariantCustomization WITH SV configuration',
|
||||
// function() {
|
||||
// var realSetMessageHandler = null;
|
||||
|
||||
// suiteSetup(function() {
|
||||
// realSetMessageHandler = window.navigator.mozSetMessageHandler;
|
||||
// window.navigator.mozSetMessageHandler =
|
||||
// window.MockNavigatormozSetMessageHandler;
|
||||
// });
|
||||
|
||||
// suiteTeardown(function() {
|
||||
// window.navigator.mozSetMessageHandler = realSetMessageHandler;
|
||||
// });
|
||||
|
||||
// setup(function(done) {
|
||||
// this.sinon.useFakeTimers();
|
||||
// navigator.mozSetMessageHandler.mSetup();
|
||||
// navigator.mozSettings.createLock()
|
||||
// .set({'operatorResources.data.topsites': {
|
||||
// 'topSites': [
|
||||
// {
|
||||
// 'title': 'Topsite',
|
||||
// 'uri': 'http://customize.test.mozilla.org/topsite'
|
||||
// }
|
||||
// ]}});
|
||||
|
||||
// // For these series of tests, we *do* want customizations to run.
|
||||
// Browser._doNotCustomize = false;
|
||||
// Browser._hasSV = true;
|
||||
// // And we want to manually initialize the DB.
|
||||
// BrowserDB.init(function() {
|
||||
// var itemsToAdd = 3;
|
||||
// BrowserDB.populate(0, function() {
|
||||
// if (--itemsToAdd <= 0) {
|
||||
// done();
|
||||
// }
|
||||
// });
|
||||
// window.navigator.mozSetMessageHandler.mTrigger(MSG_NAME, message);
|
||||
// });
|
||||
// });
|
||||
|
||||
// teardown(function(done) {
|
||||
// Browser._doNotCustomize = true;
|
||||
// Browser._hasSV = false;
|
||||
// clearBrowserStores(done);
|
||||
// window.navigator.mozSetMessageHandler.mTeardown();
|
||||
// });
|
||||
|
||||
// test('Operator Variant Customization -- Bookmarks with SV configuration',
|
||||
// function(done) {
|
||||
// BrowserDB.db.getAllBookmarks(function(bookmarks) {
|
||||
// assert.equal(bookmarks.length, 2);
|
||||
|
||||
// // We can't yet guarantee order of bookmarks (bug 895807)
|
||||
// if (bookmarks[0].uri == 'http://customize.sv.test.mozilla.org/2') {
|
||||
// assert.equal(bookmarks[0].uri,
|
||||
// 'http://customize.sv.test.mozilla.org/2');
|
||||
// assert.equal(bookmarks[0].title, 'customize SV test 2');
|
||||
// assert.equal(bookmarks[1].uri,
|
||||
// 'http://customize.sv.test.mozilla.org/1');
|
||||
// assert.equal(bookmarks[1].title, 'customize SV test 1');
|
||||
// } else {
|
||||
// assert.equal(bookmarks[1].uri,
|
||||
// 'http://customize.sv.test.mozilla.org/2');
|
||||
// assert.equal(bookmarks[1].title, 'customize SV test 2');
|
||||
|
||||
// assert.equal(bookmarks[0].uri,
|
||||
// 'http://customize.sv.test.mozilla.org/1');
|
||||
// assert.equal(bookmarks[0].title, 'customize SV test 1');
|
||||
// }
|
||||
// done();
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
|
||||
// XXX: Disable this test since TV doesn't have operator customizations.
|
||||
// Enable and modify this test once customization is implemented.
|
||||
// suite('BrowserDB.operatorVariantCustomization', function() {
|
||||
// setup(function(done) {
|
||||
// navigator.mozSettings.createLock()
|
||||
// .set({'operatorResources.data.topsites': {
|
||||
// 'topSites': [
|
||||
// {
|
||||
// 'title': 'Topsite',
|
||||
// 'uri': 'http://customize.test.mozilla.org/topsite'
|
||||
// }
|
||||
// ]}});
|
||||
|
||||
// // For these series of tests, we *do* want customizations to run.
|
||||
// Browser._doNotCustomize = false;
|
||||
// // And we want to manually initialize the DB.
|
||||
// BrowserDB.init(function() {
|
||||
// var itemsToAdd = 3;
|
||||
// BrowserDB.populate(0, function() {
|
||||
// if (--itemsToAdd <= 0) {
|
||||
// done();
|
||||
// }
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
|
||||
// teardown(function(done) {
|
||||
// Browser._doNotCustomize = true;
|
||||
// Browser._hasSV = false;
|
||||
// clearBrowserStores(done);
|
||||
// });
|
||||
|
||||
// test('Operator Variant Customization -- Bookmarks without SV configuration',
|
||||
// function(done) {
|
||||
|
||||
// BrowserDB.db.getAllBookmarks(function(bookmarks) {
|
||||
// assert.equal(bookmarks.length, 2);
|
||||
|
||||
// // We can't yet guarantee order of bookmarks (bug 895807)
|
||||
// if (bookmarks[0].uri == 'http://customize.test.mozilla.org/2') {
|
||||
// assert.equal(bookmarks[0].uri, 'http://customize.test.mozilla.org/2');
|
||||
// assert.equal(bookmarks[0].title, 'customize test 2');
|
||||
|
||||
// assert.equal(bookmarks[1].uri, 'http://customize.test.mozilla.org/1');
|
||||
// assert.equal(bookmarks[1].title, 'customize test 1');
|
||||
// } else {
|
||||
// assert.equal(bookmarks[1].uri, 'http://customize.test.mozilla.org/2');
|
||||
// assert.equal(bookmarks[1].title, 'customize test 2');
|
||||
|
||||
// assert.equal(bookmarks[0].uri, 'http://customize.test.mozilla.org/1');
|
||||
// assert.equal(bookmarks[0].title, 'customize test 1');
|
||||
// }
|
||||
|
||||
// done();
|
||||
// });
|
||||
// });
|
||||
|
||||
// test('Operator Variant Customization -- Search Engines', function(done) {
|
||||
// BrowserDB.getSearchEngine(
|
||||
// 'http://customize.test.mozilla.org/search/1',
|
||||
// function(searchEngine) {
|
||||
// assert.equal(searchEngine.uri,
|
||||
// 'http://customize.test.mozilla.org/search/1');
|
||||
// assert.equal(searchEngine.title,
|
||||
// 'customize search test 1');
|
||||
|
||||
// done();
|
||||
// }
|
||||
// );
|
||||
// });
|
||||
|
||||
// test('Operator Variant Customization -- Top sites', function(done) {
|
||||
// BrowserDB.getTopSites(20, null, function(places) {
|
||||
// assert.equal(places.length, 3);
|
||||
|
||||
// assert.equal(places[0].uri,
|
||||
// 'http://customize.test.mozilla.org/topsite');
|
||||
// assert.equal(places[0].title, 'Topsite');
|
||||
|
||||
// assert.equal(places[1].uri, 'http://mozilla.org');
|
||||
// assert.equal(places[1].title, 'Mozilla');
|
||||
|
||||
// assert.equal(places[2].uri, 'http://mozilla.org/firefoxos');
|
||||
// assert.equal(places[2].title, 'Firefox OS');
|
||||
|
||||
// done();
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
|
||||
suite('BrowserDB.db', function() {
|
||||
setup(function(done) {
|
||||
clearBrowserStores(done);
|
||||
});
|
||||
|
||||
teardown(function(done) {
|
||||
clearBrowserStores(done);
|
||||
});
|
||||
|
||||
test('createPlace', function(done) {
|
||||
BrowserDB.db.createPlace('http://mozilla.org/test1', function() {
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
test('getPlace', function(done) {
|
||||
BrowserDB.db.createPlace('http://mozilla.org/test2', function() {
|
||||
BrowserDB.db.getPlace('http://mozilla.org/test2', function(place) {
|
||||
done(function() {
|
||||
assert.equal(place.title, 'http://mozilla.org/test2');
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
test('getPlace - not found', function(done) {
|
||||
BrowserDB.db.getPlace('http://mozilla.org/doesnotexist',
|
||||
function(place) {
|
||||
done(function() {
|
||||
assert.equal(place, undefined);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
test('saveBookmark', function(done) {
|
||||
var bookmark = {
|
||||
uri: 'http://mozilla.org/test1',
|
||||
title: 'Mozilla',
|
||||
timestamp: new Date().valueOf()
|
||||
};
|
||||
BrowserDB.db.saveBookmark(bookmark, function() {
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
// TODO: SHOULD FAIL
|
||||
test('saveBookmarkInvalidURI', function(done) {
|
||||
var bookmark = {
|
||||
uri: 'notAURI',
|
||||
title: 'Mozilla',
|
||||
timestamp: new Date().valueOf()
|
||||
};
|
||||
BrowserDB.db.saveBookmark(bookmark, function() {
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
// TODO: SHOULD FAIL
|
||||
test('saveBookmarkInvalidTitle', function(done) {
|
||||
var bookmark = {
|
||||
uri: 'http://mozilla.org/test1',
|
||||
title: '',
|
||||
timestamp: new Date().valueOf()
|
||||
};
|
||||
BrowserDB.db.saveBookmark(bookmark, function() {
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
test('saveBookmarkNonHTTP(S)', function(done) {
|
||||
var bookmark = {
|
||||
uri: 'rtsp://mozilla.org/test1',
|
||||
title: '',
|
||||
timestamp: new Date().valueOf()
|
||||
};
|
||||
BrowserDB.db.saveBookmark(bookmark, function() {
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
test('getBookmark', function(done) {
|
||||
var bookmark = {
|
||||
uri: 'http://mozilla.org/test2',
|
||||
title: 'Mozilla'
|
||||
};
|
||||
BrowserDB.db.saveBookmark(bookmark, function() {
|
||||
BrowserDB.db.getBookmark('http://mozilla.org/test2',
|
||||
function(bookmark) {
|
||||
done(function() {
|
||||
assert.equal(bookmark.title, 'Mozilla');
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
test('getBookmark - not found', function(done) {
|
||||
BrowserDB.db.getBookmark('http://mozilla.org/doesnotexist',
|
||||
function(bookmark) {
|
||||
done(function() {
|
||||
assert.equal(bookmark, undefined);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
test('deleteBookmark', function(done) {
|
||||
var bookmark = {
|
||||
uri: 'http://mozilla.org/test3',
|
||||
title: 'Mozilla'
|
||||
};
|
||||
BrowserDB.db.saveBookmark(bookmark, function() {
|
||||
BrowserDB.db.deleteBookmark('http://mozilla.org/test3',
|
||||
function() {
|
||||
BrowserDB.db.getBookmark('http://mozilla.org/test3',
|
||||
function(bookmark) {
|
||||
done(function(bookmark) {
|
||||
assert.equal(bookmark, undefined);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
// XXX: updatePlace has been changed to visitMaxCheck. Redesign this test
|
||||
// later.
|
||||
// test('updatePlace', function(done) {
|
||||
// var place = {
|
||||
// uri: 'http://mozilla.org/test3',
|
||||
// title: 'Mozilla'
|
||||
// };
|
||||
// BrowserDB.db.updatePlace(place, function() {
|
||||
// place.title = 'Mozilla3';
|
||||
// BrowserDB.db.updatePlace(place, function() {
|
||||
// BrowserDB.db.getPlace('http://mozilla.org/test3',
|
||||
// function(place) {
|
||||
// done(function() {
|
||||
// assert.equal(place.title, 'Mozilla3');
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
|
||||
test('updatePlaceScreenshot', function(done) {
|
||||
var uri = 'http://mozilla.org/test4';
|
||||
BrowserDB.db.updatePlaceScreenshot(uri, DATA_URI, function() {
|
||||
BrowserDB.db.getPlace(uri, function(place) {
|
||||
done(function() {
|
||||
assert.equal(place.screenshot, DATA_URI);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
// XXX: updatePlace has been changed to visitMaxCheck. Redesign this test
|
||||
// later.
|
||||
// test('getPlacesByFrecency', function(done) {
|
||||
// var place1 = {
|
||||
// uri: 'http://mozilla.org/test1',
|
||||
// frecency: 3
|
||||
// };
|
||||
// var place2 = {
|
||||
// uri: 'http://mozilla.org/test2',
|
||||
// frecency: 2
|
||||
// };
|
||||
// var place3 = {
|
||||
// uri: 'http://mozilla.org/test3',
|
||||
// frecency: 1
|
||||
// };
|
||||
// BrowserDB.db.updatePlace(place1, function() {
|
||||
// BrowserDB.db.updatePlace(place2, function() {
|
||||
// BrowserDB.db.updatePlace(place3, function() {
|
||||
// BrowserDB.db.getPlacesByFrecency(2, null, function(topSites) {
|
||||
// done(function() {
|
||||
// assert.equal(2, topSites.length);
|
||||
// assert.equal(topSites[0].uri, 'http://mozilla.org/test1');
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
|
||||
test('saveIcon', function(done) {
|
||||
// Let's just use content-type text, a blob is a blob.
|
||||
var blob = new Blob(['hello', ' world'], {type: 'text/plain'});
|
||||
var iconEntry = {
|
||||
uri: 'http://mozilla.org/favicon.ico',
|
||||
data: blob,
|
||||
expiration: new Date().valueOf()
|
||||
};
|
||||
BrowserDB.db.saveIcon(iconEntry, function() {
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
// XXX: Error: TypeError: callback is not a function
|
||||
// Fix this.
|
||||
// test('getIcon', function(done) {
|
||||
// // Let's just use content-type text, a blob is a blob.
|
||||
// var blob = new Blob(['hello', ' world'], {type: 'text/plain'});
|
||||
// var iconEntry = {
|
||||
// uri: 'http://mozilla.org/favicon.ico',
|
||||
// data: blob,
|
||||
// expiration: new Date().valueOf()
|
||||
// };
|
||||
// BrowserDB.db.saveIcon(iconEntry, function() {
|
||||
// BrowserDB.db.getIcon('http://mozilla.org/favicon.ico', function() {
|
||||
// done();
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
|
||||
test('saveIcon', function(done) {
|
||||
// Let's just use text, a blob is a blob.
|
||||
var blob = new Blob(['hello', ' world'], {type: 'text/plain'});
|
||||
var iconEntry = {
|
||||
uri: 'http://mozilla.org/favicon.ico',
|
||||
data: blob,
|
||||
expiration: new Date().valueOf()
|
||||
};
|
||||
BrowserDB.db.saveIcon(iconEntry, function() {
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
// XXX: Test failed on Treeherder with reason unknown.
|
||||
// test('getAllBookmarks', function(done) {
|
||||
// BrowserDB.addBookmark('http://mozilla.org/test1', 'Mozilla', function() {
|
||||
// BrowserDB.addBookmark('http://mozilla.org/test2', 'Mozilla',
|
||||
// function() {
|
||||
// BrowserDB.db.getAllBookmarks(function(bookmarks) {
|
||||
// done(function() {
|
||||
// assert.equal(bookmarks.length, 2);
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
|
||||
// XXX: Test failed on Treeherder with reason unknown.
|
||||
// test('getAllBookmarkUris', function(done) {
|
||||
// BrowserDB.addBookmark('http://mozilla.org/test1', 'Mozilla', function() {
|
||||
// BrowserDB.addBookmark('http://mozilla.org/test2', 'Mozilla',
|
||||
// function() {
|
||||
// BrowserDB.db.getAllBookmarkUris(function(uris) {
|
||||
// done(function() {
|
||||
// assert.equal(uris.length, 2);
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
|
||||
// XXX: Error: expected null to equal 0
|
||||
// Fix this.
|
||||
// test('resetPlaceFrecency', function(done) {
|
||||
// BrowserDB.addPlace('http://mozilla.org/test8', function() {
|
||||
// BrowserDB.updateFrecency('http://mozilla.org/test8', function() {
|
||||
// BrowserDB.db.resetPlaceFrecency('http://mozilla.org/test8',
|
||||
// function() {
|
||||
// BrowserDB.db.getPlace('http://mozilla.org/test8', function(place) {
|
||||
// done(function() {
|
||||
// assert.equal(null, place.frecency);
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
|
||||
test('saveSearchEngine', function(done) {
|
||||
var search_engine = {
|
||||
uri: 'http://google.com/',
|
||||
title: 'Google',
|
||||
iconUri: DATA_URI
|
||||
};
|
||||
BrowserDB.db.saveSearchEngine(search_engine, function() {
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
test('getSearchEngine', function(done) {
|
||||
var search_engine = {
|
||||
uri: 'http://google.com/',
|
||||
title: 'Google',
|
||||
iconUri: DATA_URI
|
||||
};
|
||||
BrowserDB.db.saveSearchEngine(search_engine, function() {
|
||||
BrowserDB.db.getSearchEngine('http://google.com/',
|
||||
function(search_engine) {
|
||||
done(function() {
|
||||
assert.equal(search_engine.title, 'Google');
|
||||
assert.equal(search_engine.iconUri, DATA_URI);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
test('getAllSearchEngines', function(done) {
|
||||
var search_engine1 = {
|
||||
uri: 'http://google.com/search',
|
||||
title: 'Google',
|
||||
iconUri: DATA_URI
|
||||
};
|
||||
var search_engine2 = {
|
||||
uri: 'http://yahoo.com/search',
|
||||
title: 'Yahoo',
|
||||
iconUri: DATA_URI
|
||||
};
|
||||
BrowserDB.db.saveSearchEngine(search_engine1, function() {
|
||||
BrowserDB.db.saveSearchEngine(search_engine2, function() {
|
||||
BrowserDB.db.getAllSearchEngines(function(engines) {
|
||||
done(function() {
|
||||
assert.equal(engines.length, 2);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
suite('BrowserDB', function() {
|
||||
setup(function(done) {
|
||||
clearBrowserStores(done);
|
||||
});
|
||||
|
||||
teardown(function(done) {
|
||||
clearBrowserStores(done);
|
||||
});
|
||||
|
||||
// XXX: Test failed on Treeherder with reason unknown.
|
||||
// test('addPlace', function(done) {
|
||||
// BrowserDB.addPlace('http://mozilla.org/test4', function() {
|
||||
// done();
|
||||
// });
|
||||
// });
|
||||
|
||||
// XXX: Error: timeout of 10000ms exceeded
|
||||
// Fix this.
|
||||
// test('setPageTitle', function(done) {
|
||||
// BrowserDB.addPlace('http://mozilla.org/test5', function() {
|
||||
// BrowserDB.setPageTitle('http://mozilla.org/test5',
|
||||
// 'Mozilla5', function() {
|
||||
// BrowserDB.db.getPlace('http://mozilla.org/test5',
|
||||
// function(place) {
|
||||
// done(function() {
|
||||
// assert.equal(place.title, 'Mozilla5');
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
|
||||
// XXX: Error: TypeError: callback is not a function
|
||||
// Fix this.
|
||||
// test('setAndLoadIconForPage', function(done) {
|
||||
// BrowserDB.setAndLoadIconForPage('http://mozilla.org/test6',
|
||||
// DATA_URI, function() {
|
||||
// BrowserDB.db.getIcon(DATA_URI, function(iconEntry) {
|
||||
// done(function() {
|
||||
// assert.equal(true, iconEntry.expiration > new Date().valueOf());
|
||||
// var twoDaysAway = new Date().valueOf() + 172800000;
|
||||
// assert.equal(true, iconEntry.expiration < twoDaysAway);
|
||||
// assert.equal(2550, iconEntry.data.size);
|
||||
// assert.equal('image/x-icon', iconEntry.data.type);
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
|
||||
// XXX: Error: timeout of 10000ms exceeded
|
||||
// Fix this.
|
||||
// test('addVisit', function(done) {
|
||||
// BrowserDB.addVisit('http://mozilla.org/test8', function() {
|
||||
// done();
|
||||
// });
|
||||
// });
|
||||
|
||||
// XXX: Error: timeout of 10000ms exceeded
|
||||
// Fix this.
|
||||
// test('addVisit - existing place', function(done) {
|
||||
// BrowserDB.addPlace('http://mozilla.org/test9', function() {
|
||||
// BrowserDB.addVisit('http://mozilla.org/test9', function() {
|
||||
// done();
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
|
||||
// XXX: Test failed on Treeherder with reason unknown.
|
||||
// test('addBookmark', function(done) {
|
||||
// BrowserDB.addBookmark('http://mozilla.org/test7', 'Test 7', function() {
|
||||
// BrowserDB.getBookmark('http://mozilla.org/test7', function(bookmark) {
|
||||
// done(function() {
|
||||
// assert.equal(bookmark.title, 'Test 7');
|
||||
// assert.equal(true, bookmark.timestamp > 0);
|
||||
// var now = new Date().valueOf();
|
||||
// assert.equal(true, bookmark.timestamp <= now);
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
|
||||
// XXX: Test failed on Treeherder with reason unknown.
|
||||
// test('updateBookmark', function(done) {
|
||||
// BrowserDB.addBookmark('http://mozilla.org/test7', 'Test 7', function() {
|
||||
// BrowserDB.updateBookmark('http://mozilla.org/test7', 'Test 8',
|
||||
// function() {
|
||||
// BrowserDB.getBookmark('http://mozilla.org/test7', function(bookmark) {
|
||||
// done(function() {
|
||||
// assert.equal(bookmark.title, 'Test 8');
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
|
||||
// XXX: Test failed on Treeherder with reason unknown.
|
||||
// test('updateBookmark - not found', function(done) {
|
||||
// BrowserDB.updateBookmark('http://mozilla.org/test7', 'Test 7',
|
||||
// function() {
|
||||
// BrowserDB.getBookmark('http://mozilla.org/test7', function(bookmark) {
|
||||
// done(function() {
|
||||
// assert.equal(bookmark.title, 'Test 7');
|
||||
// assert.equal(true, bookmark.timestamp > 0);
|
||||
// var now = new Date().valueOf();
|
||||
// assert.equal(true, bookmark.timestamp <= now);
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
|
||||
// XXX: Test failed on Treeherder with reason unknown.
|
||||
// test('updateFrecency', function(done) {
|
||||
// BrowserDB.addPlace('http://mozilla.org/test8', function() {
|
||||
// BrowserDB.updateFrecency('http://mozilla.org/test8', function() {
|
||||
// BrowserDB.updateFrecency('http://mozilla.org/test8', function() {
|
||||
// BrowserDB.db.getPlace('http://mozilla.org/test8', function(place) {
|
||||
// done(function() {
|
||||
// assert.equal(2, place.frecency);
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
|
||||
test('addSearchEngine', function(done) {
|
||||
var data = {
|
||||
uri: 'http://google.com/',
|
||||
title: 'Google',
|
||||
iconUri: DATA_URI
|
||||
};
|
||||
BrowserDB.addSearchEngine(data, function() {
|
||||
BrowserDB.getSearchEngine('http://google.com/',
|
||||
function(search_engine) {
|
||||
done(function() {
|
||||
assert.equal(search_engine.title, 'Google');
|
||||
assert.equal(search_engine.uri, 'http://google.com/');
|
||||
assert.equal(search_engine.iconUri, DATA_URI);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
test('updateSetting', function(done) {
|
||||
BrowserDB.updateSetting('test_value', 'test_key', function() {
|
||||
BrowserDB.getSetting('test_key', function(setting) {
|
||||
done(function() {
|
||||
assert.equal(setting, 'test_value');
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
127
gaia/tv_apps/browser/test/unit/browser_dialog_test.js
Executable file
127
gaia/tv_apps/browser/test/unit/browser_dialog_test.js
Executable file
|
|
@ -0,0 +1,127 @@
|
|||
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /
|
||||
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
||||
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
/* global BrowserDialog */
|
||||
/* global expect */
|
||||
/* global MocksHelper */
|
||||
/* global MockL10n */
|
||||
|
||||
'use strict';
|
||||
|
||||
require('/shared/test/unit/load_body_html_helper.js');
|
||||
require('/shared/test/unit/mocks/mock_l10n.js');
|
||||
requireApp('browser/js/browser_dialog.js');
|
||||
requireApp('browser/test/unit/mocks/mock_browser.js');
|
||||
requireApp('browser/test/unit/mocks/mock_awesomescreen.js');
|
||||
|
||||
var mocksForBrowserDialog = new MocksHelper([
|
||||
'Awesomescreen',
|
||||
'Browser'
|
||||
]).init();
|
||||
|
||||
suite('Browser Dialog >', function() {
|
||||
var subject;
|
||||
var realL10n;
|
||||
|
||||
mocksForBrowserDialog.attachTestHelpers();
|
||||
|
||||
suiteSetup(function() {
|
||||
realL10n = navigator.mozL10n;
|
||||
navigator.mozL10n = MockL10n;
|
||||
|
||||
loadBodyHTML('fixtures/browser_dialog.html');
|
||||
|
||||
subject = BrowserDialog;
|
||||
subject.init();
|
||||
});
|
||||
|
||||
suiteTeardown(function() {
|
||||
navigator.mozL10n = realL10n;
|
||||
});
|
||||
|
||||
suite('Initial state', function() {
|
||||
test('should init DOM elements', function() {
|
||||
[
|
||||
'browserDialogBase',
|
||||
'browserDialog',
|
||||
'browserDialogTitle',
|
||||
'browserDialogMsg',
|
||||
'browserDialogInput',
|
||||
'browserDialogInputArea',
|
||||
'browserDialogInputClear',
|
||||
'browserDialogButton',
|
||||
'browserDialogButton1',
|
||||
'browserDialogButton2'].forEach(element => {
|
||||
expect(subject[element]).to.be.an('object');
|
||||
});
|
||||
});
|
||||
|
||||
test('should not have pending deferred actions', function() {
|
||||
expect(subject.deferredActions.size).to.equals(0);
|
||||
});
|
||||
});
|
||||
|
||||
suite('Sign out dialog', function() {
|
||||
var promise;
|
||||
|
||||
setup(function() {
|
||||
this.sinon.stub(subject, 'cancelDialog');
|
||||
});
|
||||
|
||||
test('signout_confirm dialog should add a deferred action',
|
||||
function(done) {
|
||||
promise = subject.createDialog('signout_confirm');
|
||||
expect(subject.browserDialogTitle.getAttribute('data-l10n-id'))
|
||||
.to.equals('fxsync-confirm-sign-out-title');
|
||||
expect(subject.browserDialogMsg.getAttribute('data-l10n-id'))
|
||||
.to.equals('fxsync-confirm-sign-out-message');
|
||||
expect(subject.browserDialogButton1.getAttribute('data-l10n-id'))
|
||||
.to.equals('LT_CANCEL');
|
||||
expect(subject.browserDialogButton1.dataset.type)
|
||||
.to.equals('signout_confirm');
|
||||
expect(subject.browserDialogButton1.classList.contains('visible'))
|
||||
.to.equals(true);
|
||||
expect(subject.browserDialogButton2.getAttribute('data-l10n-id'))
|
||||
.to.equals('fxsync-sign-out');
|
||||
expect(subject.browserDialogButton2.dataset.type)
|
||||
.to.equals('signout_confirm');
|
||||
expect(subject.browserDialogButton2.classList.contains('visible'))
|
||||
.to.equals(true);
|
||||
expect(subject.deferredActions.size).to.equals(1);
|
||||
done();
|
||||
});
|
||||
|
||||
test('click on signout_confirm button 2 should resolve deferred action',
|
||||
function(done) {
|
||||
promise.then(() => {
|
||||
expect(subject.deferredActions.size).to.equals(0);
|
||||
done();
|
||||
});
|
||||
subject.dialogButton2({
|
||||
preventDefault() {},
|
||||
currentTarget: {
|
||||
addEventListener() {},
|
||||
removeEventListener() {}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
test('click on signout_confirm button 1 should reject deferred action',
|
||||
function(done) {
|
||||
subject.createDialog('signout_confirm').catch(() => {
|
||||
expect(subject.deferredActions.size).to.equals(0);
|
||||
done();
|
||||
});
|
||||
subject.dialogButton1({
|
||||
preventDefault() {},
|
||||
currentTarget: {
|
||||
addEventListener() {},
|
||||
removeEventListener() {}
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
20
gaia/tv_apps/browser/test/unit/fixtures/browser_dialog.html
Executable file
20
gaia/tv_apps/browser/test/unit/fixtures/browser_dialog.html
Executable file
|
|
@ -0,0 +1,20 @@
|
|||
<div id="browser-dialog-base">
|
||||
<div id="browser-dialog">
|
||||
<div id="browser-dialog-title">
|
||||
<p id="browser-dialog-title-text"></p>
|
||||
</div>
|
||||
<div id="browser-dialog-msg">
|
||||
<p id="browser-dialog-msg-text"></p>
|
||||
</div>
|
||||
<form id="browser-dialog-input">
|
||||
<input id="browser-dialog-input-area">
|
||||
<div class="input-line"></div>
|
||||
<div id="browser-dialog-input-clear"></div>
|
||||
</form>
|
||||
<div id="browser-dialog-margin"></div>
|
||||
<div id="browser-dialog-button">
|
||||
<button class="browser-dialog-button" id="browser-dialog-button2"></button>
|
||||
<button class="browser-dialog-button" id="browser-dialog-button1"></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
16
gaia/tv_apps/browser/test/unit/mocks/mock_awesomescreen.js
Executable file
16
gaia/tv_apps/browser/test/unit/mocks/mock_awesomescreen.js
Executable file
|
|
@ -0,0 +1,16 @@
|
|||
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /
|
||||
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
||||
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
'use strict';
|
||||
|
||||
(function(exports) {
|
||||
|
||||
var MockAwesomescreen = {
|
||||
focusImgFunc() {}
|
||||
};
|
||||
|
||||
exports.MockAwesomescreen = MockAwesomescreen;
|
||||
}(window));
|
||||
21
gaia/tv_apps/browser/test/unit/mocks/mock_browser.js
Executable file
21
gaia/tv_apps/browser/test/unit/mocks/mock_browser.js
Executable file
|
|
@ -0,0 +1,21 @@
|
|||
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /
|
||||
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
||||
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
'use strict';
|
||||
|
||||
(function(exports) {
|
||||
|
||||
var MockBrowser = {
|
||||
sideBlock: {
|
||||
dataset: {
|
||||
sidebar: 'false'
|
||||
}
|
||||
},
|
||||
switchCursorMode() {}
|
||||
};
|
||||
|
||||
exports.MockBrowser = MockBrowser;
|
||||
}(window));
|
||||
16
gaia/tv_apps/browser/test/unit/mocks/mock_settings.js
Executable file
16
gaia/tv_apps/browser/test/unit/mocks/mock_settings.js
Executable file
|
|
@ -0,0 +1,16 @@
|
|||
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /
|
||||
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
||||
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
'use strict';
|
||||
|
||||
(function(exports) {
|
||||
|
||||
var MockSettings = {
|
||||
show() {}
|
||||
};
|
||||
|
||||
exports.MockSettings = MockSettings;
|
||||
}(window));
|
||||
5
gaia/tv_apps/browser/test/unit/setup.js
Executable file
5
gaia/tv_apps/browser/test/unit/setup.js
Executable file
|
|
@ -0,0 +1,5 @@
|
|||
'use strict';
|
||||
|
||||
/* global require */
|
||||
|
||||
require('/shared/test/unit/mocks/mocks_helper.js');
|
||||
482
gaia/tv_apps/browser/test/unit/sync/db_test.js
Executable file
482
gaia/tv_apps/browser/test/unit/sync/db_test.js
Executable file
|
|
@ -0,0 +1,482 @@
|
|||
'use strict';
|
||||
/* global SyncBrowserDB */
|
||||
/* exported Browser */
|
||||
/* jshint latedef:false */
|
||||
|
||||
requireApp('browser/shared/test/unit/mocks/' +
|
||||
'mock_navigator_moz_set_message_handler.js');
|
||||
|
||||
/* jshint maxlen:false */
|
||||
const DATA_URI =
|
||||
'data:image/x-icon;base64,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';
|
||||
/* jshint maxlen:80 */
|
||||
const DEFAULT_FAVICON = 'style/images/default-fav.svg';
|
||||
|
||||
requireApp('browser/js/sync/db.js');
|
||||
|
||||
var clearBrowserStores = function(done) {
|
||||
SyncBrowserDB.db.open(function() {
|
||||
Promise.all([
|
||||
new Promise(SyncBrowserDB.db.clearPlaces),
|
||||
new Promise(SyncBrowserDB.db.clearVisits),
|
||||
new Promise(SyncBrowserDB.db.clearIcons),
|
||||
new Promise(SyncBrowserDB.db.clearBookmarks)
|
||||
]).then(() => {
|
||||
done();
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
var bookmarkGenerator = (amount, done, parentid) => {
|
||||
var list = [];
|
||||
function item(i) {
|
||||
return {
|
||||
id: 'FXSYNCID_00' + i,
|
||||
bmkUri: 'http://mozilla.org/test' + i,
|
||||
title: 'Mozilla',
|
||||
parentid: parentid ? parentid : 'FXS_P_ID_00' + i,
|
||||
timestamp: Date.now()
|
||||
};
|
||||
}
|
||||
|
||||
var i = 0;
|
||||
|
||||
function wrapper() {
|
||||
if (i < amount) {
|
||||
var t = item(i);
|
||||
list.push(t);
|
||||
SyncBrowserDB.db.saveBookmark(t, wrapper);
|
||||
i++;
|
||||
} else {
|
||||
done(list);
|
||||
}
|
||||
}
|
||||
|
||||
wrapper();
|
||||
};
|
||||
|
||||
var historyGenerator = (amount, done, timeOffset) => {
|
||||
var list = [];
|
||||
function item(i) {
|
||||
return {
|
||||
fxsyncId: 'FXSYNCID_00' + i,
|
||||
uri: 'http://mozilla.org/test' + i,
|
||||
title: 'Mozilla',
|
||||
timestamp: timeOffset + i * 10
|
||||
};
|
||||
}
|
||||
|
||||
var i = 0;
|
||||
|
||||
function wrapper() {
|
||||
if (i < amount) {
|
||||
var t = item(i);
|
||||
list.push(t);
|
||||
SyncBrowserDB.db.createRawHistory(t, wrapper);
|
||||
i++;
|
||||
} else {
|
||||
done(list);
|
||||
}
|
||||
}
|
||||
|
||||
wrapper();
|
||||
};
|
||||
|
||||
window.Awesomescreen = {
|
||||
DEFAULT_FAVICON: DEFAULT_FAVICON
|
||||
};
|
||||
|
||||
suite('SyncBrowserDB', function() {
|
||||
suite('SyncBrowserDB.db', function() {
|
||||
setup(function(done) {
|
||||
clearBrowserStores(done);
|
||||
});
|
||||
|
||||
teardown(function(done) {
|
||||
clearBrowserStores(done);
|
||||
});
|
||||
|
||||
test('createPlace & getPlace', function(done) {
|
||||
const URL = 'http://mozilla.org/test1';
|
||||
SyncBrowserDB.db.createPlace(URL, () => {
|
||||
SyncBrowserDB.db.getPlace(URL, place => {
|
||||
assert.equal(place.title, URL);
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
test('createRawHistory & getHistory', function(done) {
|
||||
var example = {
|
||||
fxsyncId: 'FXSYNCID_001',
|
||||
uri: 'http://mozilla.org/test1',
|
||||
title: 'Mozilla',
|
||||
timestamp: Date.now()
|
||||
};
|
||||
SyncBrowserDB.db.createRawHistory(example, () => {
|
||||
SyncBrowserDB.db.getHistory(10, places => {
|
||||
assert.equal(places.length, 1);
|
||||
example.iconUri = DEFAULT_FAVICON;
|
||||
assert.deepEqual(places[0], example);
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
test('getPlace - not found', function(done) {
|
||||
const NONEXIST_URL = 'http://mozilla.org/doesnotexist';
|
||||
SyncBrowserDB.db.getPlace(NONEXIST_URL, place => {
|
||||
assert.equal(place, undefined);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
test('saveBookmark && getBookmark', function(done) {
|
||||
var example = {
|
||||
id: 'FXSYNCID_001',
|
||||
bmkUri: 'http://mozilla.org/test1',
|
||||
title: 'Mozilla',
|
||||
parentid: 'FXS_P_ID_001',
|
||||
timestamp: Date.now()
|
||||
};
|
||||
SyncBrowserDB.db.saveBookmark(example, () => {
|
||||
SyncBrowserDB.db.getBookmark(example.id, bookmark => {
|
||||
assert.deepEqual(bookmark, example);
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
test('saveBookmark && getBookmarkByUri', function(done) {
|
||||
var example = {
|
||||
id: 'FXSYNCID_002',
|
||||
bmkUri: 'http://mozilla.org/test2',
|
||||
title: 'Mozilla',
|
||||
parentid: 'FXS_P_ID_002',
|
||||
timestamp: Date.now()
|
||||
};
|
||||
SyncBrowserDB.db.saveBookmark(example, () => {
|
||||
SyncBrowserDB.db.getBookmarkByUri(example.bmkUri, bookmark => {
|
||||
assert.deepEqual(bookmark, example);
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
test('getBookmarkByParentId', function(done) {
|
||||
var example = {
|
||||
id: 'FXSYNCID_001',
|
||||
bmkUri: 'http://mozilla.org/test1',
|
||||
title: 'Mozilla',
|
||||
parentid: 'FXS_P_ID_001',
|
||||
timestamp: Date.now()
|
||||
};
|
||||
SyncBrowserDB.db.saveBookmark(example, () => {
|
||||
SyncBrowserDB.db.getBookmarkByParentId(example.parentid, bookmark => {
|
||||
assert.equal(bookmark.length, 1);
|
||||
assert.deepEqual(bookmark[0], example);
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
test('getBookmarkByUri - not found', function(done) {
|
||||
const NONEXIST_URL = 'http://mozilla.org/doesnotexist';
|
||||
SyncBrowserDB.db.getBookmarkByUri(NONEXIST_URL, bookmark => {
|
||||
assert.equal(bookmark, undefined);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
test('getAllBookmarks', function(done) {
|
||||
const RECORD_SIZE = 10;
|
||||
bookmarkGenerator(RECORD_SIZE, records => {
|
||||
SyncBrowserDB.db.getAllBookmarks(bookmarks => {
|
||||
assert.equal(bookmarks.length, RECORD_SIZE);
|
||||
// Sort by timestamp, so we did a reversing comparison here.
|
||||
for (var i = 0; i < RECORD_SIZE; i++) {
|
||||
assert.deepEqual(bookmarks[i], records[RECORD_SIZE -1 -i]);
|
||||
}
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
test('getAllBookmarkUris', function(done) {
|
||||
const RECORD_SIZE = 10;
|
||||
bookmarkGenerator(RECORD_SIZE, records => {
|
||||
SyncBrowserDB.db.getAllBookmarkUris(bookmarkUris => {
|
||||
assert.equal(bookmarkUris.length, RECORD_SIZE);
|
||||
// Sort by timestamp, so we did a reversing comparison here.
|
||||
for (var i = 0; i < RECORD_SIZE; i++) {
|
||||
assert.deepEqual(bookmarkUris[i],
|
||||
records[RECORD_SIZE -1 -i].bmkUri);
|
||||
}
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
test('deleteBookmark', function(done) {
|
||||
var example = {
|
||||
id: 'FXSYNCID_003',
|
||||
bmkUri: 'http://mozilla.org/test3',
|
||||
title: 'Mozilla',
|
||||
parentid: 'FXS_P_ID_003',
|
||||
timestamp: Date.now()
|
||||
};
|
||||
SyncBrowserDB.db.saveBookmark(example, () => {
|
||||
SyncBrowserDB.db.deleteBookmark('FXSYNCID_003', () => {
|
||||
SyncBrowserDB.db.getBookmark('FXSYNCID_003', bookmark => {
|
||||
assert.equal(bookmark, undefined);
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
test('updatePlaceScreenshot', function(done) {
|
||||
var uri = 'http://mozilla.org/test4';
|
||||
SyncBrowserDB.db.updatePlaceScreenshot(uri, DATA_URI, () => {
|
||||
SyncBrowserDB.db.getPlace(uri, place => {
|
||||
assert.equal(place.screenshot, DATA_URI);
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
test('saveIcon', function(done) {
|
||||
var blob = new Blob(['hello', ' world'], {type: 'text/plain'});
|
||||
var iconEntry = {
|
||||
uri: 'http://mozilla.org/favicon.ico',
|
||||
data: blob,
|
||||
expiration: Date.now()
|
||||
};
|
||||
SyncBrowserDB.db.saveIcon(iconEntry, () => {
|
||||
SyncBrowserDB.db.getIcon(iconEntry.uri, null, (e) => {
|
||||
assert.deepEqual(e, iconEntry);
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
suite('SyncBrowserDB', function() {
|
||||
setup(function(done) {
|
||||
clearBrowserStores(done);
|
||||
});
|
||||
|
||||
teardown(function(done) {
|
||||
clearBrowserStores(done);
|
||||
});
|
||||
|
||||
test('updateRawBookmark & getBookmark by id', function(done) {
|
||||
var example = {
|
||||
id: 'FXSYNCID_003',
|
||||
bmkUri: 'http://mozilla.org/test3',
|
||||
title: 'Mozilla',
|
||||
parentid: 'FXS_P_ID_003',
|
||||
timestamp: Date.now()
|
||||
};
|
||||
SyncBrowserDB.updateRawBookmark(example, () => {
|
||||
SyncBrowserDB.getBookmark(example.id, bookmark => {
|
||||
assert.deepEqual(example, bookmark);
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
test('updateRawBookmark & getBookmark by {id}', function(done) {
|
||||
var example = {
|
||||
id: 'FXSYNCID_003',
|
||||
bmkUri: 'http://mozilla.org/test3',
|
||||
title: 'Mozilla',
|
||||
parentid: 'FXS_P_ID_003',
|
||||
timestamp: Date.now()
|
||||
};
|
||||
SyncBrowserDB.updateRawBookmark(example, () => {
|
||||
SyncBrowserDB.getBookmark({id: example.id}, bookmark => {
|
||||
assert.deepEqual(example, bookmark);
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
test('updateRawBookmark & getBookmark by {bmkUri}', function(done) {
|
||||
var example = {
|
||||
id: 'FXSYNCID_003',
|
||||
bmkUri: 'http://mozilla.org/test3',
|
||||
title: 'Mozilla',
|
||||
parentid: 'FXS_P_ID_003',
|
||||
timestamp: Date.now()
|
||||
};
|
||||
SyncBrowserDB.updateRawBookmark(example, () => {
|
||||
SyncBrowserDB.getBookmark({bmkUri: example.bmkUri}, bookmark => {
|
||||
assert.deepEqual(example, bookmark);
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
test('updateRawBookmark & getBookmark by {parentid}', function(done) {
|
||||
var example = {
|
||||
id: 'FXSYNCID_003',
|
||||
bmkUri: 'http://mozilla.org/test3',
|
||||
title: 'Mozilla',
|
||||
parentid: 'FXS_P_ID_003',
|
||||
timestamp: Date.now()
|
||||
};
|
||||
SyncBrowserDB.updateRawBookmark(example, () => {
|
||||
SyncBrowserDB.getBookmark({parentid: example.parentid}, bookmarks => {
|
||||
assert.equal(bookmarks.length, 1);
|
||||
assert.deepEqual(example, bookmarks[0]);
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
test('getBookmark by {parentid}, sorted by children array', function(done) {
|
||||
var example = {
|
||||
id: 'FXS_P_ID_001',
|
||||
type: 'folder',
|
||||
title: 'Mozilla',
|
||||
children: ['FXSYNCID_003', 'FXSYNCID_001',
|
||||
'FXSYNCID_000', 'FXSYNCID_002'],
|
||||
parentid: 'FXS_P_ID_000',
|
||||
timestamp: Date.now()
|
||||
};
|
||||
SyncBrowserDB.updateRawBookmark(example, () => {
|
||||
bookmarkGenerator(4, rawRecords => {
|
||||
SyncBrowserDB.getBookmark({parentid: example.id}, bookmarks => {
|
||||
assert.deepEqual(bookmarks[0], rawRecords[3]);
|
||||
assert.deepEqual(bookmarks[1], rawRecords[1]);
|
||||
assert.deepEqual(bookmarks[2], rawRecords[0]);
|
||||
assert.deepEqual(bookmarks[3], rawRecords[2]);
|
||||
done();
|
||||
});
|
||||
}, 'FXS_P_ID_001');
|
||||
});
|
||||
});
|
||||
|
||||
test('removeBookmark', function(done) {
|
||||
var example = {
|
||||
id: 'FXSYNCID_003',
|
||||
bmkUri: 'http://mozilla.org/test3',
|
||||
title: 'Mozilla',
|
||||
parentid: 'FXS_P_ID_003',
|
||||
timestamp: Date.now()
|
||||
};
|
||||
SyncBrowserDB.updateRawBookmark(example, () => {
|
||||
SyncBrowserDB.removeBookmark(example.id, () => {
|
||||
SyncBrowserDB.getBookmark(example.id, bookmark => {
|
||||
assert.equal(bookmark, undefined);
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
test('clearBookmarks', function(done) {
|
||||
bookmarkGenerator(10, (rawRecords) => {
|
||||
SyncBrowserDB.clearBookmarks().then(() => {
|
||||
SyncBrowserDB.db.getAllBookmarks(bookmarks => {
|
||||
assert.isArray(bookmarks);
|
||||
assert.equal(bookmarks.length, 0);
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
test('updateRawHistory & removeHistory', function(done) {
|
||||
var example = {
|
||||
fxsyncId: 'FXSYNCID_003',
|
||||
uri: 'http://mozilla.org/test3',
|
||||
title: 'Mozilla',
|
||||
timestamp: Date.now()
|
||||
};
|
||||
SyncBrowserDB.updateRawHistory(example, () => {
|
||||
SyncBrowserDB.removeHistory(example.uri, bookmark => {
|
||||
assert.equal(bookmark, undefined);
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
test('clearHistoryDeep', function(done) {
|
||||
historyGenerator(10, (rawRecords) => {
|
||||
SyncBrowserDB.clearHistoryDeep().then(() => {
|
||||
SyncBrowserDB.db.getHistory(10000, history => {
|
||||
assert.isArray(history);
|
||||
assert.equal(history.length, 0);
|
||||
done();
|
||||
});
|
||||
});
|
||||
}, 10000);
|
||||
});
|
||||
|
||||
test('getHistoryByTime', function(done) {
|
||||
historyGenerator(10, (rawRecords) => {
|
||||
SyncBrowserDB.getHistoryByTime(10075, 10085, false, false, history => {
|
||||
assert.equal(history.length, 1);
|
||||
rawRecords[8].iconUri = DEFAULT_FAVICON;
|
||||
assert.deepEqual(history[0], rawRecords[8]);
|
||||
done();
|
||||
});
|
||||
}, 10000);
|
||||
});
|
||||
|
||||
test('getHistoryByTime with timestamp equal=true', function(done) {
|
||||
historyGenerator(10, (rawRecords) => {
|
||||
SyncBrowserDB.getHistoryByTime(10070, 10080, true, true, history => {
|
||||
assert.equal(history.length, 2);
|
||||
rawRecords[7].iconUri = DEFAULT_FAVICON;
|
||||
rawRecords[8].iconUri = DEFAULT_FAVICON;
|
||||
assert.deepEqual(history[0], rawRecords[8]);
|
||||
assert.deepEqual(history[1], rawRecords[7]);
|
||||
done();
|
||||
});
|
||||
}, 10000);
|
||||
});
|
||||
|
||||
test('getHistoryTimestamp with equal=true / dir=prev', function(done) {
|
||||
historyGenerator(10, (rawRecords) => {
|
||||
SyncBrowserDB.getHistoryTimestamp(10070, 'prev', true, ts => {
|
||||
assert.equal(ts, 10070);
|
||||
done();
|
||||
});
|
||||
}, 10000);
|
||||
});
|
||||
|
||||
test('getHistoryTimestamp with equal=false / dir=prev', function(done) {
|
||||
historyGenerator(10, (rawRecords) => {
|
||||
SyncBrowserDB.getHistoryTimestamp(10070, 'prev', false, ts => {
|
||||
assert.equal(ts, 10060);
|
||||
done();
|
||||
});
|
||||
}, 10000);
|
||||
});
|
||||
|
||||
test('getHistoryTimestamp with equal=true / dir=next', function(done) {
|
||||
historyGenerator(10, (rawRecords) => {
|
||||
SyncBrowserDB.getHistoryTimestamp(10075, 'next', true, ts => {
|
||||
assert.equal(ts, 10080);
|
||||
done();
|
||||
});
|
||||
}, 10000);
|
||||
});
|
||||
|
||||
test('getHistoryTimestamp with equal=false / dir=next', function(done) {
|
||||
historyGenerator(10, (rawRecords) => {
|
||||
SyncBrowserDB.getHistoryTimestamp(10075, 'next', false, ts => {
|
||||
assert.equal(ts, 10080);
|
||||
done();
|
||||
});
|
||||
}, 10000);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
27
gaia/tv_apps/browser/test/unit/sync/fixtures/settings.html
Executable file
27
gaia/tv_apps/browser/test/unit/sync/fixtures/settings.html
Executable file
|
|
@ -0,0 +1,27 @@
|
|||
<div id="fxsync-area">
|
||||
<div id="fxsync-header">
|
||||
<p data-l10n-id="fxsync-firefox-sync">Firefox Sync</p>
|
||||
</div>
|
||||
<div id="fxsync-disabled">
|
||||
<smart-button id="fxsync-sign-in-button" type="simple-text" data-l10n-id="fxsync-create-account-or-sign-in"></smart-button>
|
||||
<p id="fxsync-sign-in-description" data-l10n-id="fxsync-sign-in-to-sync-description"></p>
|
||||
</div>
|
||||
<div id="fxsync-enabled">
|
||||
<span id="fxsync-signed-in-as" data-l10n-id="fxsync-signed-in-as"></span>
|
||||
<smart-button id="fxsync-sync-now-button" type="simple-text" data-l10n-id="fxsync-sync-now"></smart-button>
|
||||
<smart-button id="fxsync-sign-out-button" type="simple-text" data-l10n-id="fxsync-sign-out"></smart-button>
|
||||
<ul class="settings-horizontal-list">
|
||||
<li class="settings-horizontal-list-item">
|
||||
<input type="checkbox" id="fxsync-collection-bookmarks" ></input>
|
||||
<label for="fxsync-collection-bookmarks"></label>
|
||||
<span data-l10n-id="fxsync-collection-bookmarks"></span>
|
||||
</li>
|
||||
<li class="settings-horizontal-list-item">
|
||||
<input type="checkbox" id="fxsync-collection-history" ></input>
|
||||
<label for="fxsync-collection-history"></label>
|
||||
<span data-l10n-id="fxsync-collection-history"></span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
1
gaia/tv_apps/browser/test/unit/sync/fixtures/toolbar.html
Executable file
1
gaia/tv_apps/browser/test/unit/sync/fixtures/toolbar.html
Executable file
|
|
@ -0,0 +1 @@
|
|||
<li id="fxsync-block"><a id="fxsync-tab" href="#" data-l10n-id="fxsync-sign-in-to-sync"></a></li>
|
||||
217
gaia/tv_apps/browser/test/unit/sync/manager_bridge_test.js
Executable file
217
gaia/tv_apps/browser/test/unit/sync/manager_bridge_test.js
Executable file
|
|
@ -0,0 +1,217 @@
|
|||
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /
|
||||
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
||||
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
/* global SyncManagerBridge */
|
||||
|
||||
'use strict';
|
||||
|
||||
requireApp('browser/js/sync/manager_bridge.js');
|
||||
|
||||
suite('SyncManagerBridge >', () => {
|
||||
var subject;
|
||||
var realMozApps;
|
||||
var port;
|
||||
var app;
|
||||
var onmessageData;
|
||||
|
||||
suiteSetup(() => {
|
||||
subject = SyncManagerBridge;
|
||||
|
||||
realMozApps = navigator.mozApps;
|
||||
port = {
|
||||
postMessage: function() {},
|
||||
set onmessage(callback) {
|
||||
setTimeout(() => {
|
||||
callback({ data: onmessageData });
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
app = {
|
||||
connect: function() {
|
||||
return Promise.resolve([port]);
|
||||
}
|
||||
};
|
||||
|
||||
var onsuccess = {
|
||||
set onsuccess(callback) {
|
||||
setTimeout(() => {
|
||||
callback({ target: { result: app } });
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
navigator.mozApps = {
|
||||
getSelf: function() {
|
||||
return onsuccess;
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
suiteTeardown(() => {
|
||||
subject = null;
|
||||
navigator.mozApps = realMozApps;
|
||||
});
|
||||
|
||||
suite('Initial state', () => {
|
||||
test('Integrity', () => {
|
||||
assert.ok(subject != null);
|
||||
assert.isNull(subject._port);
|
||||
assert.equal(subject._requests.size, 0);
|
||||
});
|
||||
});
|
||||
|
||||
['enable',
|
||||
'disable',
|
||||
'sync'].forEach(method => {
|
||||
suite(method, () => {
|
||||
var getSelfSpy;
|
||||
var connectSpy;
|
||||
var postMessageSpy;
|
||||
|
||||
setup(() => {
|
||||
getSelfSpy = this.sinon.spy(navigator.mozApps, 'getSelf');
|
||||
connectSpy = this.sinon.spy(app, 'connect');
|
||||
postMessageSpy = this.sinon.spy(port, 'postMessage');
|
||||
});
|
||||
|
||||
teardown(() => {
|
||||
getSelfSpy.restore();
|
||||
connectSpy.restore();
|
||||
postMessageSpy.restore();
|
||||
});
|
||||
|
||||
suiteTeardown(() => {
|
||||
subject._port = null;
|
||||
});
|
||||
|
||||
test(method + ' - no previous connection', done => {
|
||||
subject[method]();
|
||||
setTimeout(() => {
|
||||
this.sinon.assert.calledOnce(getSelfSpy);
|
||||
this.sinon.assert.calledOnce(connectSpy);
|
||||
this.sinon.assert.calledOnce(postMessageSpy);
|
||||
assert.equal(postMessageSpy.getCall(0).args[0].name, method);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
test(method + ' - previous connection', done => {
|
||||
subject[method]();
|
||||
setTimeout(() => {
|
||||
this.sinon.assert.notCalled(getSelfSpy);
|
||||
this.sinon.assert.notCalled(connectSpy);
|
||||
this.sinon.assert.calledOnce(postMessageSpy);
|
||||
assert.equal(postMessageSpy.getCall(0).args[0].name, method);
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
suite('listeners', () => {
|
||||
suiteTeardown(() => {
|
||||
subject._listeners.clear();
|
||||
});
|
||||
|
||||
test('addListener', () => {
|
||||
assert.equal(subject._listeners.size, 0);
|
||||
this.listener = () => {};
|
||||
subject.addListener(this.listener);
|
||||
assert.equal(subject._listeners.size, 1);
|
||||
assert.ok(subject._listeners.has(this.listener));
|
||||
});
|
||||
|
||||
test('removeListener', () => {
|
||||
assert.equal(subject._listeners.size, 1);
|
||||
assert.ok(subject._listeners.has(this.listener));
|
||||
subject.removeListener(this.listener);
|
||||
assert.equal(subject._listeners.size, 0);
|
||||
});
|
||||
});
|
||||
|
||||
suite('getInfo', () => {
|
||||
var postMessageSpy;
|
||||
var dateNowStub;
|
||||
var now;
|
||||
var listenerCalled;
|
||||
|
||||
setup(() => {
|
||||
postMessageSpy = this.sinon.spy(port, 'postMessage');
|
||||
dateNowStub = this.sinon.stub(Date, 'now', () => {
|
||||
return now;
|
||||
});
|
||||
subject.addListener(() => {
|
||||
listenerCalled = true;
|
||||
});
|
||||
});
|
||||
|
||||
teardown(() => {
|
||||
postMessageSpy.restore();
|
||||
dateNowStub.restore();
|
||||
});
|
||||
|
||||
test('getInfo', done => {
|
||||
now = 'now';
|
||||
var expectedMessage = {
|
||||
data: {
|
||||
id: now,
|
||||
result: 'whatever'
|
||||
}
|
||||
};
|
||||
subject.getInfo().then(message => {
|
||||
assert.equal(message.id, expectedMessage.data.id);
|
||||
assert.equal(message.result, expectedMessage.data.result);
|
||||
assert.ok(!listenerCalled);
|
||||
done();
|
||||
});
|
||||
setTimeout(() => {
|
||||
this.sinon.assert.calledOnce(postMessageSpy);
|
||||
assert.equal(postMessageSpy.getCall(0).args[0].name, 'getInfo');
|
||||
assert.equal(postMessageSpy.getCall(0).args[0].id, now);
|
||||
assert.ok(subject._requests.has(now));
|
||||
subject.onmessage(expectedMessage);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
suite('onsyncchange', () => {
|
||||
var postMessageSpy;
|
||||
var observedMessage;
|
||||
var now;
|
||||
|
||||
setup(() => {
|
||||
postMessageSpy = this.sinon.spy(port, 'postMessage');
|
||||
var listener = (message) => {
|
||||
console.log('mes', JSON.stringify(message));
|
||||
observedMessage = message;
|
||||
};
|
||||
subject.addListener(listener);
|
||||
});
|
||||
|
||||
teardown(() => {
|
||||
postMessageSpy.restore();
|
||||
});
|
||||
|
||||
test('getInfo', done => {
|
||||
var expectedMessage = {
|
||||
data: {
|
||||
name: 'onsyncchange',
|
||||
result: 'whatever'
|
||||
}
|
||||
};
|
||||
|
||||
subject.onmessage(expectedMessage);
|
||||
setTimeout(() => {
|
||||
this.sinon.assert.notCalled(postMessageSpy);
|
||||
assert.ok(!(subject._requests.has(now)));
|
||||
assert.deepEqual(observedMessage, expectedMessage.data);
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
36
gaia/tv_apps/browser/test/unit/sync/mocks/mock_manager_bridge.js
Executable file
36
gaia/tv_apps/browser/test/unit/sync/mocks/mock_manager_bridge.js
Executable file
|
|
@ -0,0 +1,36 @@
|
|||
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /
|
||||
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
||||
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
'use strict';
|
||||
|
||||
(function(exports) {
|
||||
|
||||
var MockSyncManagerBridge = {
|
||||
_syncInfo: null,
|
||||
|
||||
addListener() {},
|
||||
|
||||
removeListener() {},
|
||||
|
||||
enable() {
|
||||
return Promise.resolve();
|
||||
},
|
||||
|
||||
disable() {
|
||||
return Promise.resolve();
|
||||
},
|
||||
|
||||
sync() {
|
||||
return Promise.resolve();
|
||||
},
|
||||
|
||||
getInfo() {
|
||||
return Promise.resolve(this._syncInfo);
|
||||
}
|
||||
};
|
||||
|
||||
exports.MockSyncManagerBridge = MockSyncManagerBridge;
|
||||
}(window));
|
||||
525
gaia/tv_apps/browser/test/unit/sync/settings_test.js
Executable file
525
gaia/tv_apps/browser/test/unit/sync/settings_test.js
Executable file
|
|
@ -0,0 +1,525 @@
|
|||
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /
|
||||
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
||||
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
/* global ERROR_DIALOG_CLOSED_BY_USER */
|
||||
/* global ERROR_INVALID_SYNC_ACCOUNT */
|
||||
/* global ERROR_OFFLINE */
|
||||
/* global expect */
|
||||
/* global FirefoxSyncSettings */
|
||||
/* global MocksHelper */
|
||||
/* global MockL10n */
|
||||
/* global NavigatorSettings */
|
||||
/* global Settings */
|
||||
/* global SettingsListener */
|
||||
/* global SyncManagerBridge */
|
||||
|
||||
'use strict';
|
||||
|
||||
require('/shared/test/unit/load_body_html_helper.js');
|
||||
require('/shared/test/unit/mocks/mock_lazy_loader.js');
|
||||
require('/shared/test/unit/mocks/mock_l10n.js');
|
||||
require('/shared/test/unit/mocks/mock_navigator_moz_settings.js');
|
||||
require('/shared/test/unit/mocks/mock_settings_listener.js');
|
||||
require('/shared/js/sync/errors.js');
|
||||
requireApp('browser/test/unit/sync/mocks/mock_manager_bridge.js');
|
||||
requireApp('browser/js/settings.js');
|
||||
requireApp('browser/js/browser_dialog.js');
|
||||
|
||||
var mocksForSettings = new MocksHelper([
|
||||
'LazyLoader',
|
||||
'NavigatorSettings',
|
||||
'SettingsListener',
|
||||
'SyncManagerBridge'
|
||||
]).init();
|
||||
|
||||
suite('Sync settings >', function() {
|
||||
|
||||
const BOOKMARKS_SETTING = 'sync.collections.bookmarks.enabled';
|
||||
const HISTORY_SETTING = 'sync.collections.history.enabled';
|
||||
|
||||
var subject;
|
||||
var realL10n;
|
||||
var realMozSettings;
|
||||
|
||||
var observeStub;
|
||||
var addListenerStub;
|
||||
var addEventListenerStub;
|
||||
var getInfoSpy;
|
||||
var showScreenSpy;
|
||||
|
||||
var observers = {};
|
||||
var onsyncchange;
|
||||
var visibilityListener;
|
||||
|
||||
mocksForSettings.attachTestHelpers();
|
||||
|
||||
suiteSetup(function(done) {
|
||||
realL10n = navigator.mozL10n;
|
||||
navigator.mozL10n = MockL10n;
|
||||
realMozSettings = navigator.mozSettings;
|
||||
navigator.mozSettings = NavigatorSettings;
|
||||
|
||||
loadBodyHTML('sync/fixtures/settings.html');
|
||||
|
||||
getInfoSpy = sinon.spy(SyncManagerBridge, 'getInfo');
|
||||
observeStub = sinon.stub(SettingsListener, 'observe',
|
||||
(setting, unused, observer) => {
|
||||
observers[setting] = observer;
|
||||
});
|
||||
addListenerStub = sinon.stub(SyncManagerBridge, 'addListener',
|
||||
listener => {
|
||||
onsyncchange = listener;
|
||||
});
|
||||
addEventListenerStub = sinon.stub(document, 'addEventListener',
|
||||
(event, listener) => {
|
||||
visibilityListener = listener;
|
||||
});
|
||||
sinon.stub(Settings, 'hide');
|
||||
|
||||
require('/tv_apps/browser/js/sync/settings.js').then(() => {
|
||||
subject = FirefoxSyncSettings;
|
||||
showScreenSpy = sinon.spy(subject, 'showScreen');
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
suiteTeardown(function() {
|
||||
navigator.mozL10n = realL10n;
|
||||
navigator.mozSettings = realMozSettings;
|
||||
observeStub.restore();
|
||||
addListenerStub.restore();
|
||||
addEventListenerStub.restore();
|
||||
getInfoSpy.restore();
|
||||
showScreenSpy.restore();
|
||||
});
|
||||
|
||||
suite('Initial state', function() {
|
||||
test('Integrity', function() {
|
||||
expect(subject).to.be.an('object');
|
||||
});
|
||||
|
||||
test('Initialization', function() {
|
||||
expect(getInfoSpy.calledOnce).to.equal(true);
|
||||
expect(addListenerStub.calledOnce).to.equal(true);
|
||||
expect(addListenerStub.args[0][0]).to.be.a('function');
|
||||
expect(addEventListenerStub.calledOnce).to.equal(true);
|
||||
expect(onsyncchange).to.be.a('function');
|
||||
expect(visibilityListener).to.be.a('function');
|
||||
});
|
||||
|
||||
test('should observe settings', function() {
|
||||
expect(observeStub.calledTwice).to.be.equal(true);
|
||||
expect(observers[HISTORY_SETTING]).to.be.a('function');
|
||||
expect(observers[BOOKMARKS_SETTING]).to.be.a('function');
|
||||
});
|
||||
|
||||
test('DOM initial state', function() {
|
||||
expect(subject.area).to.be.an('object');
|
||||
expect(subject.elements.enabled).to.be.an('object');
|
||||
expect(subject.elements.disabled).to.be.an('object');
|
||||
expect(subject.listeners).to.be.an('object');
|
||||
expect(subject.listeners.size).to.be.equals(8);
|
||||
expect(subject.collections).to.be.an('object');
|
||||
expect(subject.collections.size).to.be.equals(0);
|
||||
expect(subject.screen).to.be.equals('disabled');
|
||||
expect(subject.state).to.be.equals('disabled');
|
||||
});
|
||||
});
|
||||
|
||||
suite('visibilitychange', function() {
|
||||
setup(function() {
|
||||
getInfoSpy.reset();
|
||||
});
|
||||
|
||||
teardown(function() {
|
||||
getInfoSpy.reset();
|
||||
});
|
||||
|
||||
test('should refresh on visibity change', function() {
|
||||
expect(getInfoSpy.called).to.be.equal(false);
|
||||
visibilityListener();
|
||||
expect(getInfoSpy.called).to.be.equal(true);
|
||||
});
|
||||
});
|
||||
|
||||
suite('Disabled', function() {
|
||||
suiteSetup(function() {
|
||||
onsyncchange({
|
||||
state: 'disabled'
|
||||
});
|
||||
});
|
||||
|
||||
suiteTeardown(function() {
|
||||
showScreenSpy.reset();
|
||||
});
|
||||
|
||||
test('should show disabled screen', function() {
|
||||
expect(showScreenSpy.calledOnce).to.be.equal(true);
|
||||
expect(showScreenSpy.args[0][0]).to.equal('disabled');
|
||||
expect(subject.elements.enabled.hidden).to.be.equal(true);
|
||||
expect(subject.elements.disabled.hidden).to.be.equal(false);
|
||||
});
|
||||
|
||||
test('should have signin button', function() {
|
||||
expect(subject.elements.signInButton).to.be.an('object');
|
||||
expect(subject.elements.signInButton.getAttribute('data-l10n-id'))
|
||||
.to.equals('fxsync-sign-in');
|
||||
expect(subject.elements.signInButton.classList.contains('disabled'))
|
||||
.to.equals(false);
|
||||
});
|
||||
});
|
||||
|
||||
suite('Disabled from disabling', function() {
|
||||
var alertStub;
|
||||
var formatValueStub;
|
||||
suiteSetup(function() {
|
||||
formatValueStub = sinon.stub(navigator.mozL10n, 'formatValue', key => {
|
||||
return Promise.resolve(key);
|
||||
});
|
||||
|
||||
alertStub = sinon.stub(window, 'alert');
|
||||
});
|
||||
|
||||
suiteTeardown(function() {
|
||||
showScreenSpy.reset();
|
||||
formatValueStub.restore();
|
||||
alertStub.restore();
|
||||
});
|
||||
|
||||
teardown(function() {
|
||||
alertStub.reset();
|
||||
});
|
||||
|
||||
['enabled', 'syncing'].forEach(previousState => {
|
||||
test('should show disabled dialog',
|
||||
function(done) {
|
||||
subject.previousState = previousState;
|
||||
subject.state = 'disabling';
|
||||
onsyncchange({
|
||||
state: 'disabled',
|
||||
user: 'pepito'
|
||||
});
|
||||
setTimeout(function() {
|
||||
expect(alertStub.calledOnce).to.equal(true);
|
||||
expect(alertStub.args[0][0]).to.equal('fxsync-disabled');
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
suite('Enabled', function() {
|
||||
suiteSetup(function() {
|
||||
onsyncchange({
|
||||
state: 'enabled',
|
||||
user: 'pepito'
|
||||
});
|
||||
});
|
||||
|
||||
suiteTeardown(function() {
|
||||
showScreenSpy.reset();
|
||||
});
|
||||
|
||||
test('should show enabled screen', function() {
|
||||
expect(showScreenSpy.calledOnce).to.be.equal(true);
|
||||
expect(showScreenSpy.args[0][0]).to.equal('enabled');
|
||||
expect(subject.elements.enabled.hidden).to.be.equal(false);
|
||||
expect(subject.elements.disabled.hidden).to.be.equal(true);
|
||||
});
|
||||
|
||||
test('should show user', function() {
|
||||
expect(subject.elements.signedInAs).to.be.an('object');
|
||||
expect(subject.elements.signedInAs.getAttribute('data-l10n-id'))
|
||||
.to.equals('fxsync-signed-in-as');
|
||||
expect(subject.elements.signedInAs.getAttribute('data-l10n-args'))
|
||||
.to.equals('{"email":"pepito"}');
|
||||
});
|
||||
|
||||
test('should show sync now button', function() {
|
||||
expect(subject.elements.syncNowButton).to.be.an('object');
|
||||
expect(subject.elements.syncNowButton.getAttribute('data-l10n-id'))
|
||||
.to.equals('fxsync-sync-now');
|
||||
});
|
||||
|
||||
test('should show signout button', function() {
|
||||
expect(subject.elements.signOutButton).to.be.an('object');
|
||||
expect(subject.elements.signOutButton.getAttribute('data-l10n-id'))
|
||||
.to.equals('fxsync-sign-out');
|
||||
});
|
||||
|
||||
test('should show collection switches', function() {
|
||||
expect(subject.elements.collectionBookmarks).to.be.an('object');
|
||||
expect(subject.elements.collectionHistory).to.be.an('object');
|
||||
});
|
||||
});
|
||||
|
||||
suite('Enabled from enabling', function() {
|
||||
var alertStub;
|
||||
var formatValueStub;
|
||||
suiteSetup(function() {
|
||||
formatValueStub = sinon.stub(navigator.mozL10n, 'formatValue', key => {
|
||||
return Promise.resolve(key);
|
||||
});
|
||||
|
||||
alertStub = sinon.stub(window, 'alert');
|
||||
|
||||
subject.state = 'enabling';
|
||||
onsyncchange({
|
||||
state: 'enabled',
|
||||
user: 'pepito'
|
||||
});
|
||||
});
|
||||
|
||||
suiteTeardown(function() {
|
||||
showScreenSpy.reset();
|
||||
formatValueStub.restore();
|
||||
alertStub.restore();
|
||||
});
|
||||
|
||||
test('should show enabled dialog', function() {
|
||||
expect(alertStub.calledOnce).to.equal(true);
|
||||
expect(alertStub.args[0][0]).to.equal('fxsync-enabled');
|
||||
});
|
||||
});
|
||||
|
||||
suite('Enabling', function() {
|
||||
suiteSetup(function() {
|
||||
onsyncchange({
|
||||
state: 'enabling'
|
||||
});
|
||||
});
|
||||
|
||||
test('should show signing in button', function() {
|
||||
expect(subject.elements.signInButton.dataset.l10nId)
|
||||
.to.equals('fxsync-signing');
|
||||
});
|
||||
|
||||
test('should disable signin button', function() {
|
||||
expect(subject.elements.signInButton.classList.contains('disabled'))
|
||||
.to.equals(true);
|
||||
});
|
||||
});
|
||||
|
||||
suite('Syncing', function() {
|
||||
suiteSetup(function() {
|
||||
onsyncchange({
|
||||
state: 'syncing',
|
||||
user: 'pepito'
|
||||
});
|
||||
});
|
||||
|
||||
test('should show syncing button', function() {
|
||||
expect(subject.elements.syncNowButton.dataset.l10nId)
|
||||
.to.equals('fxsync-syncing');
|
||||
});
|
||||
|
||||
test('should show user', function() {
|
||||
expect(subject.elements.signedInAs).to.be.an('object');
|
||||
expect(subject.elements.signedInAs.getAttribute('data-l10n-id'))
|
||||
.to.equals('fxsync-signed-in-as');
|
||||
expect(subject.elements.signedInAs.getAttribute('data-l10n-args'))
|
||||
.to.equals('{"email":"pepito"}');
|
||||
});
|
||||
|
||||
test('should disable sync button and collection switches', function() {
|
||||
expect(subject.elements.syncNowButton.classList.contains('disabled'))
|
||||
.to.equals(true);
|
||||
expect(subject.elements.collectionBookmarks.disabled).to.equal(true);
|
||||
expect(subject.elements.collectionHistory.disabled).to.equal(true);
|
||||
});
|
||||
});
|
||||
|
||||
suite('Errored', function() {
|
||||
var alertStub;
|
||||
var formatValueStub;
|
||||
|
||||
suiteSetup(function() {
|
||||
alertStub = sinon.stub(window, 'alert');
|
||||
formatValueStub = sinon.stub(navigator.mozL10n, 'formatValue', key => {
|
||||
return Promise.resolve(key);
|
||||
});
|
||||
});
|
||||
|
||||
suiteTeardown(function() {
|
||||
alertStub.restore();
|
||||
formatValueStub.restore();
|
||||
});
|
||||
|
||||
teardown(function() {
|
||||
alertStub.reset();
|
||||
});
|
||||
|
||||
test('should ignore ERROR_DIALOG_CLOSED_BY_USER error', function() {
|
||||
onsyncchange({
|
||||
state: 'errored',
|
||||
error: ERROR_DIALOG_CLOSED_BY_USER
|
||||
});
|
||||
expect(alertStub.calledOnce).to.equal(false);
|
||||
});
|
||||
|
||||
test('should show ERROR_INVALID_SYNC_ACCOUNT error', function(done) {
|
||||
onsyncchange({
|
||||
state: 'errored',
|
||||
error: ERROR_INVALID_SYNC_ACCOUNT
|
||||
});
|
||||
setTimeout(() => {
|
||||
expect(alertStub.calledOnce).to.equal(true);
|
||||
expect(alertStub.args[0][0]).to.equal(ERROR_INVALID_SYNC_ACCOUNT +
|
||||
'\n' +
|
||||
ERROR_INVALID_SYNC_ACCOUNT +
|
||||
'-explanation');
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
test('should show ERROR_OFFLINE error', function(done) {
|
||||
onsyncchange({
|
||||
state: 'errored',
|
||||
error: ERROR_OFFLINE
|
||||
});
|
||||
setTimeout(() => {
|
||||
expect(alertStub.calledOnce).to.equal(true);
|
||||
expect(alertStub.args[0][0]).to.equal(ERROR_OFFLINE +
|
||||
'\n' +
|
||||
ERROR_OFFLINE +
|
||||
'-explanation');
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
suite('Collections', function() {
|
||||
var realMozId;
|
||||
var mozIdError = null;
|
||||
|
||||
suiteSetup(function() {
|
||||
onsyncchange({
|
||||
state: 'enabled',
|
||||
user: 'pepito'
|
||||
});
|
||||
|
||||
realMozId = navigator.mozId;
|
||||
navigator.mozId = {
|
||||
watch(options) {
|
||||
this._onlogin = options.onlogin;
|
||||
this._onerror = options.onerror;
|
||||
},
|
||||
request() {
|
||||
mozIdError ? this._onerror() : this._onlogin();
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
[{
|
||||
test: 'should check bookmarks on setting enabled',
|
||||
collection: 'collectionBookmarks',
|
||||
setting: BOOKMARKS_SETTING,
|
||||
enabled: true
|
||||
}, {
|
||||
test: 'should uncheck bookmarks on setting disabled',
|
||||
collection: 'collectionBookmarks',
|
||||
setting: BOOKMARKS_SETTING,
|
||||
enabled: false
|
||||
}, {
|
||||
test: 'should check history on setting enabled',
|
||||
collection: 'collectionHistory',
|
||||
setting: HISTORY_SETTING,
|
||||
enabled: true
|
||||
}, {
|
||||
test: 'should uncheck history on setting disabled',
|
||||
collection: 'collectionHistory',
|
||||
setting: HISTORY_SETTING,
|
||||
enabled: false
|
||||
}].forEach(config => {
|
||||
test(config.test, function() {
|
||||
expect(subject.elements[config.collection].checked)
|
||||
.to.be.equal(!config.enabled);
|
||||
observers[config.setting](config.enabled);
|
||||
expect(subject.elements[config.collection].checked)
|
||||
.to.be.equal(config.enabled);
|
||||
});
|
||||
});
|
||||
|
||||
[{
|
||||
test: 'bookmark checked',
|
||||
setting: BOOKMARKS_SETTING,
|
||||
checked: true,
|
||||
collection: 'collectionBookmarks',
|
||||
oncheckedFunction: 'onbookmarkschecked'
|
||||
}, {
|
||||
test: 'bookmark unchecked',
|
||||
setting: BOOKMARKS_SETTING,
|
||||
checked: false,
|
||||
collection: 'collectionBookmarks',
|
||||
oncheckedFunction: 'onbookmarkschecked'
|
||||
}, {
|
||||
test: 'history checked',
|
||||
setting: HISTORY_SETTING,
|
||||
checked: true,
|
||||
collection: 'collectionHistory',
|
||||
oncheckedFunction: 'onhistorychecked'
|
||||
}, {
|
||||
test: 'history unchecked',
|
||||
setting: HISTORY_SETTING,
|
||||
checked: false,
|
||||
collection: 'collectionHistory',
|
||||
oncheckedFunction: 'onhistorychecked'
|
||||
}].forEach(config => {
|
||||
test('should enable setting on ' + config.test, function() {
|
||||
expect(subject.collections.has(config.setting))
|
||||
.to.be.equal(!config.checked);
|
||||
subject.elements[config.collection].checked = config.checked;
|
||||
subject[config.oncheckedFunction]();
|
||||
expect(subject.collections.has(config.setting))
|
||||
.to.be.equal(config.checked);
|
||||
});
|
||||
});
|
||||
|
||||
test('should enable/disable Sync Now button on setting enabled/disabled',
|
||||
function() {
|
||||
[{
|
||||
setting: HISTORY_SETTING,
|
||||
enabled: true
|
||||
}, {
|
||||
setting: HISTORY_SETTING,
|
||||
enabled: false
|
||||
}, {
|
||||
setting: BOOKMARKS_SETTING,
|
||||
enabled: true
|
||||
}, {
|
||||
setting: BOOKMARKS_SETTING,
|
||||
enabled: false
|
||||
}].forEach(config => {
|
||||
observers[config.setting](config.enabled);
|
||||
expect(subject.elements.syncNowButton.classList.contains('disabled'))
|
||||
.to.equals(!config.enabled);
|
||||
});
|
||||
});
|
||||
|
||||
test(`should not enable collections checkboxes if refresh auth failed`,
|
||||
function() {
|
||||
[{
|
||||
setting: HISTORY_SETTING,
|
||||
element: 'collectionHistory',
|
||||
onchecked: 'onhistorychecked'
|
||||
}, {
|
||||
setting: BOOKMARKS_SETTING,
|
||||
element: 'collectionBookmarks',
|
||||
onchecked: 'onbookmarkschecked'
|
||||
}].forEach(config => {
|
||||
mozIdError = true;
|
||||
expect(subject.collections.has(config.setting))
|
||||
.to.be.equal(false);
|
||||
subject.elements[config.element].checked = true;
|
||||
subject[config.onchecked]();
|
||||
expect(subject.collections.has(config.setting))
|
||||
.to.be.equal(false);
|
||||
expect(subject.elements[config.element].checked)
|
||||
.to.be.equal(false);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
167
gaia/tv_apps/browser/test/unit/sync/toolbar_test.js
Executable file
167
gaia/tv_apps/browser/test/unit/sync/toolbar_test.js
Executable file
|
|
@ -0,0 +1,167 @@
|
|||
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /
|
||||
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
||||
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
/* global expect */
|
||||
/* global FirefoxSyncToolbar */
|
||||
/* global loadBodyHTML */
|
||||
/* global MocksHelper */
|
||||
/* global MockL10n */
|
||||
/* global MockSyncManagerBridge */
|
||||
/* global Settings */
|
||||
/* global SyncManagerBridge */
|
||||
|
||||
'use strict';
|
||||
|
||||
require('/shared/test/unit/load_body_html_helper.js');
|
||||
require('/shared/test/unit/mocks/mock_lazy_loader.js');
|
||||
require('/shared/test/unit/mocks/mock_l10n.js');
|
||||
requireApp('browser/test/unit/mocks/mock_settings.js');
|
||||
requireApp('browser/test/unit/sync/mocks/mock_manager_bridge.js');
|
||||
|
||||
var mocksForToolbar = new MocksHelper([
|
||||
'LazyLoader',
|
||||
'Settings',
|
||||
'SyncManagerBridge'
|
||||
]).init();
|
||||
|
||||
suite('Sync toolbar >', function() {
|
||||
var subject;
|
||||
var realL10n;
|
||||
|
||||
var initialSyncInfo = {
|
||||
state: 'disabled'
|
||||
};
|
||||
|
||||
var getInfoSpy;
|
||||
var settingsShowSpy;
|
||||
var addListenerStub;
|
||||
var addEventListenerStub;
|
||||
|
||||
var onsyncchange;
|
||||
var visibilityListener;
|
||||
|
||||
mocksForToolbar.attachTestHelpers();
|
||||
|
||||
suiteSetup(function(done) {
|
||||
realL10n = navigator.mozL10n;
|
||||
navigator.mozL10n = MockL10n;
|
||||
|
||||
loadBodyHTML('sync/fixtures/toolbar.html');
|
||||
|
||||
getInfoSpy = sinon.spy(SyncManagerBridge, 'getInfo');
|
||||
settingsShowSpy = sinon.spy(Settings, 'show');
|
||||
addListenerStub = sinon.stub(SyncManagerBridge, 'addListener',
|
||||
listener => {
|
||||
onsyncchange = listener;
|
||||
});
|
||||
addEventListenerStub = sinon.stub(document, 'addEventListener',
|
||||
(event, listener) => {
|
||||
visibilityListener = listener;
|
||||
});
|
||||
MockSyncManagerBridge._syncInfo = initialSyncInfo;
|
||||
|
||||
require('/tv_apps/browser/js/sync/toolbar.js').then(() => {
|
||||
subject = FirefoxSyncToolbar;
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
suiteTeardown(function() {
|
||||
getInfoSpy.restore();
|
||||
settingsShowSpy.restore();
|
||||
addListenerStub.restore();
|
||||
addEventListenerStub.restore();
|
||||
navigator.mozL10n = realL10n;
|
||||
});
|
||||
|
||||
suite('Initial state', function() {
|
||||
test('Integrity', function() {
|
||||
expect(subject).to.be.an('object');
|
||||
});
|
||||
|
||||
test('Initialization', function() {
|
||||
expect(getInfoSpy.calledOnce).to.equal(true);
|
||||
expect(addListenerStub.calledOnce).to.equal(true);
|
||||
expect(addListenerStub.args[0][0]).to.be.a('function');
|
||||
expect(addEventListenerStub.calledOnce).to.equal(true);
|
||||
expect(onsyncchange).to.be.a('function');
|
||||
expect(visibilityListener).to.be.a('function');
|
||||
});
|
||||
|
||||
test('DOM initial state', function() {
|
||||
expect(subject.syncBlock).to.be.an('object');
|
||||
expect(subject.syncTab).to.be.an('object');
|
||||
expect(subject.syncTab.getAttribute('data-l10n-id'))
|
||||
.to.equal('fxsync-sign-in-to-sync');
|
||||
expect(subject.syncTab.getAttribute('data-l10n-args'))
|
||||
.to.equal(null);
|
||||
});
|
||||
});
|
||||
|
||||
suite('visibilitychange', function() {
|
||||
setup(function() {
|
||||
getInfoSpy.reset();
|
||||
});
|
||||
|
||||
teardown(function() {
|
||||
getInfoSpy.reset();
|
||||
});
|
||||
|
||||
test('visibity change to not hidden should refresh', function() {
|
||||
expect(getInfoSpy.called).to.be.equal(false);
|
||||
visibilityListener();
|
||||
expect(getInfoSpy.called).to.be.equal(true);
|
||||
});
|
||||
});
|
||||
|
||||
['enabled',
|
||||
'syncing'].forEach(event => {
|
||||
suite(event, function() {
|
||||
suiteSetup(function() {
|
||||
onsyncchange({
|
||||
state: event,
|
||||
user: 'pepito'
|
||||
});
|
||||
});
|
||||
|
||||
test('Tab name should change', function() {
|
||||
expect(subject.syncTab.getAttribute('data-l10n-id'))
|
||||
.to.equal('fxsync-signed-in-as');
|
||||
expect(subject.syncTab.getAttribute('data-l10n-args'))
|
||||
.to.equal('{"email":"pepito"}');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
suite('enabling', function() {
|
||||
suiteSetup(function() {
|
||||
onsyncchange({
|
||||
state: 'enabling'
|
||||
});
|
||||
});
|
||||
|
||||
test('Tab name should change', function() {
|
||||
expect(settingsShowSpy.calledOnce).to.equal(true);
|
||||
expect(subject.syncTab.getAttribute('data-l10n-id'))
|
||||
.to.equal('fxsync-signing');
|
||||
});
|
||||
});
|
||||
|
||||
suite('disabled', function() {
|
||||
suiteSetup(function() {
|
||||
onsyncchange({
|
||||
state: 'disabled'
|
||||
});
|
||||
});
|
||||
|
||||
test('Tab name should change', function() {
|
||||
expect(subject.syncTab.getAttribute('data-l10n-id'))
|
||||
.to.equal('fxsync-sign-in-to-sync');
|
||||
expect(subject.syncTab.getAttribute('data-l10n-args'))
|
||||
.to.equal(null);
|
||||
});
|
||||
});
|
||||
});
|
||||
Loading…
Reference in a new issue