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
99
gaia/apps/search/test/unit/providers/bookmarks_test.js
Executable file
99
gaia/apps/search/test/unit/providers/bookmarks_test.js
Executable file
|
|
@ -0,0 +1,99 @@
|
|||
/* global MockNavigatorDatastore, MockDatastore, Promise */
|
||||
'use strict';
|
||||
|
||||
require('/shared/test/unit/mocks/mock_navigator_datastore.js');
|
||||
require('/shared/js/utilities.js');
|
||||
requireApp('search/test/unit/mock_search.js');
|
||||
requireApp('search/js/providers/provider.js');
|
||||
requireApp('search/js/providers/grid_provider.js');
|
||||
|
||||
// Required files for the grid and a mozapp result
|
||||
require('/shared/js/l10n.js');
|
||||
require('/shared/elements/gaia_grid/js/grid_icon_renderer.js');
|
||||
require('/shared/elements/gaia_grid/js/grid_layout.js');
|
||||
require('/shared/elements/gaia_grid/js/grid_view.js');
|
||||
require('/shared/elements/gaia_grid/script.js');
|
||||
require('/shared/elements/gaia_grid/js/items/grid_item.js');
|
||||
require('/shared/elements/gaia_grid/js/items/bookmark.js');
|
||||
require('/shared/js/sync_datastore.js');
|
||||
|
||||
suite('search/providers/providers', function() {
|
||||
var subject;
|
||||
var realDatastore;
|
||||
var promiseDone = Promise.resolve({ operation: 'done' });
|
||||
|
||||
var ICON = 'https://mozorg.cdn.mozilla.net/media/img/favicon.ico';
|
||||
|
||||
suiteSetup(function() {
|
||||
realDatastore = navigator.getDataStores;
|
||||
navigator.getDataStores = MockNavigatorDatastore.getDataStores;
|
||||
MockNavigatorDatastore._records = {};
|
||||
|
||||
MockDatastore.sync = function() {
|
||||
var cursor = {
|
||||
next: function() {
|
||||
cursor.next = () => promiseDone;
|
||||
|
||||
return Promise.resolve({
|
||||
operation: 'add',
|
||||
data: {
|
||||
url: 'http://mozilla.org',
|
||||
name: 'Homepage',
|
||||
icon: ICON
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
return cursor;
|
||||
};
|
||||
});
|
||||
|
||||
suiteTeardown(function() {
|
||||
navigator.getDataStores = realDatastore;
|
||||
});
|
||||
|
||||
setup(function(done) {
|
||||
requireApp('search/js/providers/bookmarks.js', function() {
|
||||
subject = window.Bookmarks;
|
||||
subject.grid = document.createElement('gaia-grid');
|
||||
promiseDone.then(function() {
|
||||
subject.init().then(done);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
suite('search', function() {
|
||||
test('renders data url', function(done) {
|
||||
subject.search('mozilla').then((results) => {
|
||||
assert.equal(results[0].data.detail.url, 'http://mozilla.org');
|
||||
assert.equal(results[0].data.detail.name, 'Homepage');
|
||||
assert.equal(results[0].data.detail.id, 'http://mozilla.org');
|
||||
assert.equal(results[0].data.detail.icon, ICON);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
test('search name', function(done) {
|
||||
subject.search('homepage').then((results) => {
|
||||
assert.equal(results[0].data.detail.name, 'Homepage');
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
suite('get', function() {
|
||||
test('ok', function() {
|
||||
var bookmark = subject.get('http://mozilla.org');
|
||||
assert.equal(bookmark.data.detail.url, 'http://mozilla.org');
|
||||
assert.equal(bookmark.data.detail.name, 'Homepage');
|
||||
assert.equal(bookmark.data.detail.id, 'http://mozilla.org');
|
||||
assert.equal(bookmark.data.detail.icon, ICON);
|
||||
});
|
||||
|
||||
test('fail', function() {
|
||||
var bookmark = subject.get('http://catanddog.org');
|
||||
assert.isNull(bookmark);
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
94
gaia/apps/search/test/unit/providers/contacts_test.js
Executable file
94
gaia/apps/search/test/unit/providers/contacts_test.js
Executable file
|
|
@ -0,0 +1,94 @@
|
|||
'use strict';
|
||||
/* global MocksHelper, MockMozContacts, MockContactsList, MockMozActivity,
|
||||
Search */
|
||||
|
||||
require('/shared/test/unit/mocks/mock_moz_activity.js');
|
||||
require('/shared/js/url_helper.js');
|
||||
requireApp('search/test/unit/mock_search.js');
|
||||
requireApp('search/js/providers/provider.js');
|
||||
require('/shared/test/unit/mocks/mock_mozContacts.js');
|
||||
require('/apps/communications/contacts/test/unit/mock_contacts_list.js');
|
||||
|
||||
var mocksForMarketplaceProvider = new MocksHelper([
|
||||
'MozActivity'
|
||||
]).init();
|
||||
|
||||
suite('search/providers/contacts', function() {
|
||||
mocksForMarketplaceProvider.attachTestHelpers();
|
||||
|
||||
var fakeElement, stubById, subject;
|
||||
|
||||
suiteSetup(function() {
|
||||
navigator.mozContacts = MockMozContacts;
|
||||
sinon.stub(navigator.mozContacts, 'find', function() {
|
||||
return {
|
||||
set onsuccess(cb) {
|
||||
cb(MockContactsList());
|
||||
},
|
||||
set onerror(cb) {
|
||||
},
|
||||
result: MockContactsList()
|
||||
};
|
||||
});
|
||||
});
|
||||
|
||||
setup(function(done) {
|
||||
fakeElement = document.createElement('div');
|
||||
fakeElement.style.cssText = 'height: 100px; display: block;';
|
||||
stubById = this.sinon.stub(document, 'getElementById')
|
||||
.returns(fakeElement.cloneNode(true));
|
||||
requireApp('search/js/providers/contacts.js', function() {
|
||||
subject = Search.providers.Contacts;
|
||||
subject.init();
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
teardown(function() {
|
||||
stubById.restore();
|
||||
});
|
||||
|
||||
suite('click', function() {
|
||||
test('launches the web activity', function() {
|
||||
var searchCloseStub = this.sinon.stub(Search, 'close');
|
||||
subject.click({
|
||||
target: {
|
||||
dataset: {
|
||||
contactId: 'mozilla'
|
||||
}
|
||||
}
|
||||
});
|
||||
var activityInfo = MockMozActivity.calls[0];
|
||||
assert.equal(activityInfo.name, 'open');
|
||||
assert.equal(activityInfo.data.params.id, 'mozilla');
|
||||
assert.ok(searchCloseStub.calledOnce);
|
||||
});
|
||||
});
|
||||
|
||||
suite('search', function() {
|
||||
|
||||
setup(function() {
|
||||
this.sinon.stub(URL, 'createObjectURL');
|
||||
});
|
||||
|
||||
test('clears results', function() {
|
||||
var stub = this.sinon.stub(subject, 'clear');
|
||||
subject.search(null, function() {});
|
||||
assert.ok(stub.calledOnce);
|
||||
});
|
||||
|
||||
test('contact is rendered', function(done) {
|
||||
subject.search('stub content').then((results) => {
|
||||
Search.collect(subject, results);
|
||||
var contact = subject.container.querySelector('.result');
|
||||
assert.equal(contact.querySelector('.title').innerHTML, 'Pepito A');
|
||||
assert.equal(contact.getAttribute('aria-label'), 'Pepito A');
|
||||
assert.equal(contact.getAttribute('role'), 'link');
|
||||
assert.equal(contact.querySelector('.icon img').getAttribute('role'),
|
||||
'presentation');
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
156
gaia/apps/search/test/unit/providers/local_apps_test.js
Executable file
156
gaia/apps/search/test/unit/providers/local_apps_test.js
Executable file
|
|
@ -0,0 +1,156 @@
|
|||
'use strict';
|
||||
/* global Search, MockNavigatormozApps, MockNavigatorSettings */
|
||||
|
||||
require('/shared/test/unit/mocks/mock_navigator_moz_apps.js');
|
||||
require('/shared/test/unit/mocks/mock_navigator_moz_settings.js');
|
||||
requireApp('search/test/unit/mock_search.js');
|
||||
requireApp('search/js/providers/provider.js');
|
||||
requireApp('search/js/providers/grid_provider.js');
|
||||
|
||||
suite('search/providers/local_apps', function() {
|
||||
|
||||
var realMozApps;
|
||||
var realMozSettings;
|
||||
var _apps, _blValue;
|
||||
|
||||
suiteSetup(function() {
|
||||
_apps = [{
|
||||
manifest: {
|
||||
entry_points: {
|
||||
'fakeapp1-1': {
|
||||
launch_path: '/fakeapp1-1/index.html',
|
||||
name: 'Mozilla Fake App 1 - 1'
|
||||
},
|
||||
'fakeapp1-2': {
|
||||
launch_path: '/fakeapp1-2/index.html',
|
||||
name: 'Mozilla Fake App 1 - 2'
|
||||
}
|
||||
},
|
||||
name: 'Mozilla Fake App 1'
|
||||
},
|
||||
manifestURL: 'http://fakeapp1/manifest.webapp'
|
||||
},{
|
||||
manifest: {
|
||||
launch_path: '/fakeapp2/index.html',
|
||||
name: 'Mozilla Fake App 2'
|
||||
},
|
||||
manifestURL: 'http://fakeapp2/manifest.webapp'
|
||||
},{
|
||||
manifest: {
|
||||
launch_path: '/fakeapp3/index.html',
|
||||
name: 'Mooilla Fake App 3',
|
||||
short_name: 'shorty'
|
||||
}
|
||||
},{
|
||||
manifest: {
|
||||
launch_path: '/fakeapp4/index.html',
|
||||
name: 'Blah blah',
|
||||
locales: {
|
||||
foobar: {
|
||||
name: 'localized app'
|
||||
}
|
||||
}
|
||||
}
|
||||
}];
|
||||
_blValue = ['/fakeapp1-1/index.html'];
|
||||
|
||||
realMozApps = navigator.mozApps;
|
||||
navigator.mozApps = MockNavigatormozApps;
|
||||
realMozSettings = navigator.mozSettings;
|
||||
navigator.mozSettings = MockNavigatorSettings;
|
||||
|
||||
navigator.mozApps.mApps = _apps;
|
||||
navigator.mozSettings.createLock().set({
|
||||
'app.launch_path.blacklist': _blValue
|
||||
});
|
||||
});
|
||||
|
||||
suiteTeardown(function() {
|
||||
navigator.mozApps = realMozApps;
|
||||
navigator.mozSettings = realMozSettings;
|
||||
});
|
||||
|
||||
|
||||
|
||||
suite('Blacklist', function() {
|
||||
|
||||
var subject;
|
||||
|
||||
setup(function(done) {
|
||||
requireApp('search/js/providers/local_apps.js', function() {
|
||||
subject = Search.providers.LocalApps;
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
teardown(function() {
|
||||
MockNavigatormozApps.mTeardown();
|
||||
});
|
||||
|
||||
test('CreateBlacklist returns correct blacklist', function(done) {
|
||||
subject.createBlacklist().then(() => {
|
||||
assert.equal(subject.blacklist, _blValue);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
suite('Search', function() {
|
||||
|
||||
var subject;
|
||||
|
||||
setup(function(done) {
|
||||
requireApp('search/js/providers/local_apps.js', function() {
|
||||
subject = Search.providers.LocalApps;
|
||||
subject.apps = _apps;
|
||||
subject.blacklist = _blValue;
|
||||
subject.createAppListing();
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
teardown(function() {
|
||||
MockNavigatormozApps.mTeardown();
|
||||
});
|
||||
|
||||
test('Search returns correct applications', function() {
|
||||
var results = subject.find('moz');
|
||||
assert.equal(results.length, 2);
|
||||
});
|
||||
|
||||
test('Search returns correct applications', function() {
|
||||
var results = subject.find('mo');
|
||||
assert.equal(results.length, 3);
|
||||
});
|
||||
|
||||
test('Search for localized apps', function() {
|
||||
document.documentElement.lang = 'foobar';
|
||||
var results = subject.find('localized');
|
||||
assert.equal(results.length, 1);
|
||||
});
|
||||
|
||||
test('Search returns correct applications', function() {
|
||||
var results = subject.find('shorty');
|
||||
assert.equal(results.length, 1);
|
||||
});
|
||||
|
||||
test('hidden role which downloads is not listed', function() {
|
||||
var resultLength = subject.appListing.length;
|
||||
var mockApp = {
|
||||
manifestURL: 'marketplace/langpack',
|
||||
downloading: true,
|
||||
manifest: {
|
||||
role: 'langpack'
|
||||
}
|
||||
};
|
||||
navigator.mozApps.mgmt.oninstall({
|
||||
application: mockApp
|
||||
});
|
||||
mockApp.ondownloadapplied();
|
||||
assert.equal(resultLength, subject.appListing.length);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
108
gaia/apps/search/test/unit/providers/marketplace_test.js
Executable file
108
gaia/apps/search/test/unit/providers/marketplace_test.js
Executable file
|
|
@ -0,0 +1,108 @@
|
|||
'use strict';
|
||||
/* global MocksHelper, Search */
|
||||
/* global MockNavigatorSettings */
|
||||
require('/shared/test/unit/mocks/mock_navigator_moz_settings.js');
|
||||
require('/shared/test/unit/mocks/mock_moz_activity.js');
|
||||
require('/shared/test/unit/mocks/mock_l10n.js');
|
||||
|
||||
requireApp('search/test/unit/mock_search.js');
|
||||
requireApp('search/js/providers/provider.js');
|
||||
requireApp('search/js/providers/grid_provider.js');
|
||||
|
||||
// Required files for the grid and a marketplaceapp result
|
||||
require('/shared/js/l10n.js');
|
||||
require('/shared/elements/gaia_grid/js/grid_icon_renderer.js');
|
||||
require('/shared/elements/gaia_grid/js/grid_layout.js');
|
||||
require('/shared/elements/gaia_grid/js/grid_view.js');
|
||||
require('/shared/elements/gaia_grid/script.js');
|
||||
require('/shared/elements/gaia_grid/js/items/grid_item.js');
|
||||
require('/shared/elements/gaia_grid/js/items/bookmark.js');
|
||||
require('/shared/elements/gaia_grid/js/items/marketplace_app.js');
|
||||
|
||||
var mocksForMarketplaceProvider = new MocksHelper([
|
||||
'MozActivity'
|
||||
]).init();
|
||||
|
||||
suite('search/providers/marketplace', function() {
|
||||
mocksForMarketplaceProvider.attachTestHelpers();
|
||||
|
||||
var fakeElement, stubById, subject, realMozSettings;
|
||||
|
||||
setup(function(done) {
|
||||
realMozSettings = navigator.mozSettings;
|
||||
navigator.mozSettings = MockNavigatorSettings;
|
||||
|
||||
navigator.mozSettings.createLock().set({
|
||||
'search.marketplace.url': 'http://localhost?{q}'
|
||||
});
|
||||
|
||||
fakeElement = document.createElement('div');
|
||||
fakeElement.style.cssText = 'height: 100px; display: block;';
|
||||
stubById = this.sinon.stub(document, 'getElementById')
|
||||
.returns(fakeElement.cloneNode(true));
|
||||
requireApp('search/js/providers/marketplace.js', function() {
|
||||
subject = Search.providers.Marketplace;
|
||||
subject.init();
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
teardown(function() {
|
||||
stubById.restore();
|
||||
});
|
||||
|
||||
suite('mock response', function() {
|
||||
|
||||
var marketplaceContent = [{
|
||||
'manifest_url': 'http://fakeapp1.mozilla.org/manifest.webapp',
|
||||
'name': 'FIRST Marketplace App',
|
||||
'icon': ''
|
||||
}, {
|
||||
'manifest_url': 'http://fakeapp2.mozilla.org/manifest.webapp',
|
||||
'name': 'SECOND Marketplace App',
|
||||
'icon': ''
|
||||
}];
|
||||
|
||||
var requests = [];
|
||||
var xhr;
|
||||
|
||||
setup(function() {
|
||||
xhr = sinon.useFakeXMLHttpRequest();
|
||||
requests = [];
|
||||
xhr.onCreate = function(req) {
|
||||
setTimeout(function() {
|
||||
requests.push(req);
|
||||
req.responseText = JSON.stringify(marketplaceContent);
|
||||
req.status = 200;
|
||||
req.onload();
|
||||
});
|
||||
};
|
||||
});
|
||||
|
||||
teardown(function() {
|
||||
subject.request = null;
|
||||
xhr.restore();
|
||||
});
|
||||
|
||||
test('escapes search terms', function(done) {
|
||||
subject.search('foo#').then(function(results) {
|
||||
assert.equal(requests[0].url, 'http://localhost?foo%23');
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
test('renders all results', function(done) {
|
||||
subject.search('fake').then(results => {
|
||||
assert.equal(results.length, 2);
|
||||
done();
|
||||
});
|
||||
|
||||
// setTimeout to ensure that the search microtask fires.
|
||||
setTimeout(function() {
|
||||
var req = requests[0];
|
||||
req.responseText = JSON.stringify(marketplaceContent);
|
||||
req.onload();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
68
gaia/apps/search/test/unit/providers/provider_test.js
Executable file
68
gaia/apps/search/test/unit/providers/provider_test.js
Executable file
|
|
@ -0,0 +1,68 @@
|
|||
'use strict';
|
||||
/* global Provider, MocksHelper */
|
||||
|
||||
requireApp('search/shared/js/everythingme/eme.js');
|
||||
requireApp('search/js/providers/provider.js');
|
||||
require('/shared/test/unit/mocks/mock_icons_helper.js');
|
||||
|
||||
var mocks = new MocksHelper([
|
||||
'IconsHelper'
|
||||
]).init();
|
||||
|
||||
suite('search/providers/provider', function() {
|
||||
|
||||
var fakeElement, stubById, subject;
|
||||
mocks.attachTestHelpers();
|
||||
|
||||
setup(function() {
|
||||
fakeElement = document.createElement('div');
|
||||
fakeElement.style.cssText = 'height: 100px; display: block;';
|
||||
stubById = this.sinon.stub(document, 'getElementById')
|
||||
.returns(fakeElement.cloneNode(true));
|
||||
subject = new Provider();
|
||||
});
|
||||
|
||||
teardown(function() {
|
||||
stubById.restore();
|
||||
});
|
||||
|
||||
suite('constructor', function() {
|
||||
test('everything looks ok', function() {
|
||||
assert.ok(subject.name);
|
||||
});
|
||||
});
|
||||
|
||||
suite('init', function() {
|
||||
test('sets up container', function() {
|
||||
subject.init();
|
||||
assert.ok(subject.container);
|
||||
});
|
||||
});
|
||||
|
||||
suite('render', function() {
|
||||
test('escapes HTML', function() {
|
||||
subject.init();
|
||||
subject.render([{
|
||||
title: '<hello>',
|
||||
meta: '<world>',
|
||||
dataset: {}
|
||||
}]);
|
||||
|
||||
var title = subject.container.querySelector('.title');
|
||||
assert.equal(title.innerHTML, '<hello>');
|
||||
|
||||
var meta = subject.container.querySelector('.meta');
|
||||
assert.equal(meta.innerHTML, '<world>');
|
||||
});
|
||||
});
|
||||
|
||||
suite('clear', function() {
|
||||
test('clears container', function() {
|
||||
subject.init();
|
||||
subject.container.innerHTML = 'not empty';
|
||||
subject.clear();
|
||||
assert.equal(subject.container.innerHTML, '');
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
37
gaia/apps/search/test/unit/providers/suggestions_test.js
Executable file
37
gaia/apps/search/test/unit/providers/suggestions_test.js
Executable file
|
|
@ -0,0 +1,37 @@
|
|||
'use strict';
|
||||
/* global MocksHelper, Search */
|
||||
|
||||
requireApp('search/test/unit/mock_search.js');
|
||||
requireApp('search/js/providers/provider.js');
|
||||
require('/shared/js/metrics_helper.js');
|
||||
requireApp('search/test/unit/mock_provider.js');
|
||||
require('/shared/test/unit/mocks/mock_search_provider.js');
|
||||
|
||||
var mocksForSuggestionsProvider = new MocksHelper([
|
||||
'SearchProvider'
|
||||
]).init();
|
||||
|
||||
suite('search/providers/suggestions', function() {
|
||||
mocksForSuggestionsProvider.attachTestHelpers();
|
||||
var subject;
|
||||
requireApp('search/js/providers/suggestions.js', function(done) {
|
||||
subject = Search.providers.Suggestions;
|
||||
subject.init();
|
||||
done();
|
||||
});
|
||||
|
||||
suite('click', function() {
|
||||
test('should report to metrics', function() {
|
||||
var stub = this.sinon.stub(window.MetricsHelper.prototype, 'report');
|
||||
subject.click({
|
||||
target: {
|
||||
dataset: {
|
||||
suggestions: 'mozilla'
|
||||
}
|
||||
}
|
||||
});
|
||||
assert.ok(stub.calledWith('websearch', 'testProvider'));
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Loading…
Reference in a new issue