diff options
Diffstat (limited to 'addon-sdk/source/test/addons/places/lib/test-places-favicon.js')
-rw-r--r-- | addon-sdk/source/test/addons/places/lib/test-places-favicon.js | 242 |
1 files changed, 242 insertions, 0 deletions
diff --git a/addon-sdk/source/test/addons/places/lib/test-places-favicon.js b/addon-sdk/source/test/addons/places/lib/test-places-favicon.js new file mode 100644 index 000000000..669c66e64 --- /dev/null +++ b/addon-sdk/source/test/addons/places/lib/test-places-favicon.js @@ -0,0 +1,242 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +'use strict'; + +module.metadata = { + 'engines': { + 'Firefox': '*' + } +}; + +const { Cc, Ci, Cu } = require('chrome'); +const { getFavicon } = require('sdk/places/favicon'); +const tabs = require('sdk/tabs'); +const open = tabs.open; +const port = 8099; +const host = 'http://localhost:' + port; +const { onFaviconChange, serve, binFavicon } = require('./favicon-helpers'); +const { once } = require('sdk/system/events'); +const { resetPlaces } = require('./places-helper'); +const faviconService = Cc["@mozilla.org/browser/favicon-service;1"]. + getService(Ci.nsIFaviconService); + +exports.testStringGetFaviconCallbackSuccess = function*(assert) { + let name = 'callbacksuccess' + let srv = yield makeServer(name); + let url = host + '/' + name + '.html'; + let favicon = host + '/' + name + '.ico'; + let tab; + + let wait = new Promise(resolve => { + onFaviconChange(url).then((faviconUrl) => { + getFavicon(url, (url) => { + assert.equal(favicon, url, 'Callback returns correct favicon url'); + resolve(); + }); + }); + }); + + assert.pass("Opening tab"); + + open({ + url: url, + onOpen: (newTab) => tab = newTab, + inBackground: true + }); + + yield wait; + + assert.pass("Complete"); + + yield complete(tab, srv); +}; + +exports.testStringGetFaviconCallbackFailure = function*(assert) { + let name = 'callbackfailure'; + let srv = yield makeServer(name); + let url = host + '/' + name + '.html'; + let tab; + + let wait = waitAndExpire(url); + + assert.pass("Opening tab"); + + open({ + url: url, + onOpen: (newTab) => tab = newTab, + inBackground: true + }); + + yield wait; + + assert.pass("Getting favicon"); + + yield new Promise(resolve => { + getFavicon(url, (url) => { + assert.equal(url, null, 'Callback returns null'); + resolve(); + }); + }); + + assert.pass("Complete"); + + yield complete(tab, srv); +}; + +exports.testStringGetFaviconPromiseSuccess = function*(assert) { + let name = 'promisesuccess' + let srv = yield makeServer(name); + let url = host + '/' + name + '.html'; + let favicon = host + '/' + name + '.ico'; + let tab; + + let wait = onFaviconChange(url); + + assert.pass("Opening tab"); + + open({ + url: url, + onOpen: (newTab) => tab = newTab, + inBackground: true + }); + + yield wait; + + assert.pass("Getting favicon"); + + yield getFavicon(url).then((url) => { + assert.equal(url, favicon, 'Callback returns null'); + }, () => { + assert.fail('Reject should not be called'); + }); + + assert.pass("Complete"); + + yield complete(tab, srv); +}; + +exports.testStringGetFaviconPromiseFailure = function*(assert) { + let name = 'promisefailure' + let srv = yield makeServer(name); + let url = host + '/' + name + '.html'; + let tab; + + let wait = waitAndExpire(url); + + assert.pass("Opening tab"); + + open({ + url: url, + onOpen: (newTab) => tab = newTab, + inBackground: true + }); + + yield wait; + + assert.pass("Getting favicon"); + + yield getFavicon(url).then(invalidResolve(assert), validReject(assert, 'expired url')); + + assert.pass("Complete"); + + yield complete(tab, srv); +}; + +exports.testTabsGetFaviconPromiseSuccess = function*(assert) { + let name = 'tabs-success' + let srv = yield makeServer(name); + let url = host + '/' + name + '.html'; + let favicon = host + '/' + name + '.ico'; + let tab; + + let iconPromise = onFaviconChange(url); + + assert.pass("Opening tab"); + + open({ + url: url, + onOpen: (newTab) => tab = newTab, + inBackground: true + }); + + yield iconPromise; + + assert.pass("Getting favicon"); + + yield getFavicon(tab).then((url) => { + assert.equal(url, favicon, "getFavicon should return url for tab"); + }); + + assert.pass("Complete"); + + yield complete(tab, srv); +}; + + +exports.testTabsGetFaviconPromiseFailure = function*(assert) { + let name = 'tabs-failure' + let srv = yield makeServer(name); + let url = host + '/' + name + '.html'; + let tab; + + let wait = waitAndExpire(url); + + assert.pass("Opening tab"); + + open({ + url: url, + onOpen: (newTab) => tab = newTab, + inBackground: true + }); + + yield wait; + + assert.pass("Getting favicon"); + + yield getFavicon(tab).then(invalidResolve(assert), validReject(assert, 'expired tab')); + + assert.pass("Complete"); + + yield complete(tab, srv); +}; + +exports.testRejects = function*(assert) { + yield getFavicon({}) + .then(invalidResolve(assert), validReject(assert, 'Object')); + + yield getFavicon(null) + .then(invalidResolve(assert), validReject(assert, 'null')); + + yield getFavicon(undefined) + .then(invalidResolve(assert), validReject(assert, 'undefined')); + + yield getFavicon([]) + .then(invalidResolve(assert), validReject(assert, 'Array')); +}; + +var invalidResolve = (assert) => () => assert.fail('Promise should not be resolved successfully'); +var validReject = (assert, name) => () => assert.pass(name + ' correctly rejected'); + +var makeServer = (name) => serve({ + name: name, + favicon: binFavicon, + port: port, + host: host +}); + +var waitAndExpire = (url) => new Promise(resolve => { + onFaviconChange(url).then(() => { + once('places-favicons-expired', resolve); + faviconService.expireAllFavicons(); + }); +}); + +var complete = (tab, srv) => new Promise(resolve => { + tab.close(() => { + resetPlaces(() => { + srv.stop(resolve); + }); + }); +}); |