diff --git a/lib/browser-pool/basic-pool.js b/lib/browser-pool/basic-pool.js index 1c6f78ee0..a353d7613 100644 --- a/lib/browser-pool/basic-pool.js +++ b/lib/browser-pool/basic-pool.js @@ -4,7 +4,7 @@ var util = require('util'), Pool = require('./pool'), signalHandler = require('../signal-handler'), _ = require('lodash'), - Q = require('q'); + Promise = require('bluebird'); var activeSessions = {}; @@ -32,12 +32,11 @@ Pool.prototype.getBrowser = function(id) { }; return launchPromise - .then(browser.reset.bind(browser)) - .thenResolve(browser) + .then(browser.reset.bind(browser)).thenReturn(browser) .catch(function(e) { return _this.freeBrowser(browser) .then(function() { - return Q.reject(e); + return Promise.reject(e); }); }); }; @@ -52,9 +51,9 @@ signalHandler.on('exit', function() { return _(activeSessions) .map(function(session) { var quit_ = session.browser.quit.bind(session.browser); - return Q.when(session.launchPromise, quit_); + return session.launchPromise.then(quit_); }) - .thru(Q.all) + .thru(Promise.all) .value(); }); diff --git a/lib/browser-pool/caching-pool.js b/lib/browser-pool/caching-pool.js index 98600b3cd..28a8f0aef 100644 --- a/lib/browser-pool/caching-pool.js +++ b/lib/browser-pool/caching-pool.js @@ -1,5 +1,5 @@ 'use strict'; -var q = require('q'), +var Promise = require('bluebird'), util = require('util'), Pool = require('./pool'), LimitedUseSet = require('./limited-use-set'), @@ -38,11 +38,10 @@ CachingPool.prototype.getBrowser = function(id) { log('has cached browser %o', browser); return browser.reset() .catch(function(e) { - var reject = q.reject.bind(null, e); + var reject = Promise.reject.bind(null, e); return this.underlyingPool.freeBrowser(browser) .then(reject, reject); - }.bind(this)) - .thenResolve(browser); + }.bind(this)).thenReturn(browser); }; /** diff --git a/lib/browser-pool/limited-pool.js b/lib/browser-pool/limited-pool.js index ddfea80cc..75117f19d 100644 --- a/lib/browser-pool/limited-pool.js +++ b/lib/browser-pool/limited-pool.js @@ -2,7 +2,7 @@ const Pool = require('./pool'); const CancelledError = require('../errors/cancelled-error'); -const q = require('q'); +const Promise = require('bluebird'); const log = require('debug')('gemini:pool:limited'); module.exports = class LimitedPool extends Pool { @@ -22,7 +22,7 @@ module.exports = class LimitedPool extends Pool { this._limit = limit; this._launched = 0; this._requests = 0; - this._deferQueue = []; + this._requestQueue = []; } getBrowser(id) { @@ -32,7 +32,7 @@ module.exports = class LimitedPool extends Pool { return this._getBrowser(id) .catch((e) => { --this._requests; - return q.reject(e); + return Promise.reject(e); }); } @@ -47,9 +47,9 @@ module.exports = class LimitedPool extends Pool { cancel() { log('cancel'); - this._deferQueue.forEach((entry) => entry.defer.reject(new CancelledError())); + this._requestQueue.forEach((entry) => entry.reject(new CancelledError())); - this._deferQueue.length = 0; + this._requestQueue.length = 0; this.underlyingPool.cancel(); } @@ -61,11 +61,9 @@ module.exports = class LimitedPool extends Pool { } log('queuing the request'); - const defer = q.defer(); - this._deferQueue.unshift({id, defer}); - - log(`queue length: ${this._deferQueue.length}`); - return defer.promise; + return new Promise((resolve, reject) => { + this._requestQueue.unshift({id, resolve, reject}); + }); } /** @@ -77,17 +75,17 @@ module.exports = class LimitedPool extends Pool { return this.underlyingPool.getBrowser(id) .catch((e) => { this._launchNextBrowser(); - return q.reject(e); + return Promise.reject(e); }); } _launchNextBrowser() { - var queued = this._deferQueue.pop(); + var queued = this._requestQueue.pop(); if (queued) { log('has queued requests'); - log(`remaining queue length: ${this._deferQueue.length}`); + log(`remaining queue length: ${this._requestQueue.length}`); this._newBrowser(queued.id) - .then(queued.defer.resolve, queued.defer.reject); + .then(queued.resolve, queued.reject); } else { this._launched--; } diff --git a/lib/browser-pool/limited-use-set.js b/lib/browser-pool/limited-use-set.js index 7d925a451..f9798997c 100644 --- a/lib/browser-pool/limited-use-set.js +++ b/lib/browser-pool/limited-use-set.js @@ -1,5 +1,5 @@ 'use strict'; -var q = require('q'), +var Promise = require('bluebird'), log = require('debug')('gemini:pool:limited-use-set'); /** @@ -28,7 +28,7 @@ LimitedUseSet.prototype.push = function(value) { } log('under limit'); this._objects.push(value); - return q(); + return Promise.resolve(); }; LimitedUseSet.prototype._isOverLimit = function(value) { diff --git a/lib/browser-pool/pool.js b/lib/browser-pool/pool.js index 2afae4dca..6f2dcc364 100644 --- a/lib/browser-pool/pool.js +++ b/lib/browser-pool/pool.js @@ -1,5 +1,5 @@ 'use strict'; -var q = require('q'); +var Promise = require('bluebird'); /** * @constructor */ @@ -17,7 +17,7 @@ BasicPool.prototype.getBrowser = function() { * @returns {Promise} */ BasicPool.prototype.freeBrowser = function() { - return q.resolve(); + return Promise.resolve(); }; BasicPool.prototype.cancel = function() { diff --git a/lib/browser/browser.js b/lib/browser/browser.js index c53b4229c..4ffdfa52e 100644 --- a/lib/browser/browser.js +++ b/lib/browser/browser.js @@ -1,6 +1,7 @@ 'use strict'; const _ = require('lodash'); +const Promise = require('bluebird'); const wd = require('wd'); const Camera = require('./camera'); @@ -44,6 +45,6 @@ module.exports = class Browser { } _configureHttp(timeout) { - return this._wd.configureHttp({retries: 'never', timeout}); + return Promise.resolve(this._wd.configureHttp({retries: 'never', timeout})); } }; diff --git a/lib/browser/camera.js b/lib/browser/camera.js index 7911f7de9..557a3bd09 100644 --- a/lib/browser/camera.js +++ b/lib/browser/camera.js @@ -2,7 +2,7 @@ var Image = require('../image'), inherit = require('inherit'), - q = require('q'), + Promise = require('bluebird'), _ = require('lodash'), util = require('./util'); @@ -25,7 +25,7 @@ module.exports = inherit({ // if _takeScreenshotWithNativeContext fails too, the original error // most likely was not related to the different Appium contexts and // it is more useful to report it instead of second one - return q.reject(originalError); + return Promise.reject(originalError); }); }); }, diff --git a/lib/browser/client-bridge.js b/lib/browser/client-bridge.js index 41e0ac011..c69bdf012 100644 --- a/lib/browser/client-bridge.js +++ b/lib/browser/client-bridge.js @@ -1,7 +1,7 @@ 'use strict'; var util = require('util'), - q = require('q'), + Promise = require('bluebird'), StateError = require('../errors/state-error'), @@ -35,11 +35,11 @@ ClientBridge.prototype._callCommand = function(command, injectAllowed) { return this._browser.evalScript(command) .then(function(result) { if (!result || !result.error) { - return q.resolve(result); + return Promise.resolve(result); } if (result.error !== NO_CLIENT_FUNC) { - return q.reject(new StateError(result.message)); + return Promise.reject(new StateError(result.message)); } if (injectAllowed) { @@ -48,7 +48,7 @@ ClientBridge.prototype._callCommand = function(command, injectAllowed) { return _this._callCommand(command, false); }); } - return q.reject(new StateError('Unable to inject gemini client script')); + return Promise.reject(new StateError('Unable to inject gemini client script')); }); }; diff --git a/lib/browser/existing-browser.js b/lib/browser/existing-browser.js index c7aace43d..30ac5a99f 100644 --- a/lib/browser/existing-browser.js +++ b/lib/browser/existing-browser.js @@ -1,6 +1,6 @@ 'use strict'; -var Browser = require('./browser'); +const Browser = require('./browser'); module.exports = class ExistingBrowser extends Browser { static fromObject(serializedObject) { @@ -22,6 +22,6 @@ module.exports = class ExistingBrowser extends Browser { attach() { return this._setHttpTimeout() .then(() => this._wd.attach(this.sessionId)) - .thenResolve(this); + .thenReturn(this); } }; diff --git a/lib/browser/new-browser.js b/lib/browser/new-browser.js index 4ca0f34d1..ce1acab5e 100644 --- a/lib/browser/new-browser.js +++ b/lib/browser/new-browser.js @@ -7,7 +7,7 @@ const debug = require('debug'); const chalk = require('chalk'); const _ = require('lodash'); const polyfillService = require('polyfill-service'); -const q = require('q'); +const Promise = require('bluebird'); const Browser = require('./browser'); const ClientBridge = require('./client-bridge'); @@ -74,16 +74,16 @@ module.exports = class NewBrowser extends Browser { } _applyWdMethodInContext(method, context, args) { - return this._wd.currentContext() + return Promise.resolve(this._wd.currentContext()) .then((originalContext) => { - return this._wd.context(context) + return Promise.resolve(this._wd.context(context)) .then(() => this._applyWdMethod(method, args)) .finally(() => this._wd.context(originalContext)); }); } _applyWdMethod(method, args) { - return this._wd[method].apply(this._wd, args); + return Promise.resolve(this._wd[method].apply(this._wd, args)); } launch(calibrator) { @@ -110,7 +110,7 @@ module.exports = class NewBrowser extends Browser { .then(() => this.chooseLocator()) .catch((e) => { if (e.code === 'ECONNREFUSED') { - return q.reject(new GeminiError( + return Promise.reject(new GeminiError( `Unable to connect to ${this.config.gridUrl}.`, 'Make sure that URL in config file is correct and selenium\nserver is running.' )); @@ -122,7 +122,7 @@ module.exports = class NewBrowser extends Browser { error.sessionId = this.sessionId; // selenium does not provide a way to distinguish different reasons of failure - return q.reject(error); + return Promise.reject(error); }); } @@ -151,7 +151,7 @@ module.exports = class NewBrowser extends Browser { return; } - return this._wd.setWindowSize(size.width, size.height) + return Promise.resolve(this._wd.setWindowSize(size.width, size.height)) .catch((e) => { // Its the only reliable way to detect not supported operation // in legacy operadriver. @@ -164,14 +164,14 @@ module.exports = class NewBrowser extends Browser { return; } - return q.reject(e); + return Promise.reject(e); }); } _buildPolyfills() { //polyfills are needed for older browsers, namely, IE8 - return this._wd.eval('navigator.userAgent') + return Promise.resolve(this._wd.eval('navigator.userAgent')) .then((ua) => { return polyfillService.getPolyfillString({ uaString: ua, @@ -198,20 +198,20 @@ module.exports = class NewBrowser extends Browser { resetZoom: true }); - return this._wd.get(url) + return Promise.resolve(this._wd.get(url)) .then((url) => { return params.resetZoom - ? this._clientBridge.call('resetZoom').thenResolve(url) + ? this._clientBridge.call('resetZoom').thenReturn(url) : url; }); } injectScript(script) { - return this._wd.execute(script); + return Promise.resolve(this._wd.execute(script)); } evalScript(script) { - return this._wd.eval(script); + return Promise.resolve(this._wd.eval(script)); } buildScripts() { @@ -241,7 +241,7 @@ module.exports = class NewBrowser extends Browser { verbose: false }, 'aliasify'); - return q.nfcall(script.bundle.bind(script)) + return Promise.fromCallback(script.bundle.bind(script)) .then((buf) => { const scripts = this._polyfill + '\n' + buf.toString(); this._clientBridge = new ClientBridge(this, scripts); @@ -263,7 +263,7 @@ module.exports = class NewBrowser extends Browser { return this.evalScript('document.body') .then(body => this._wd.moveTo(body, 0, 0)) .catch(e => { - return q.reject(_.extend(e || {}, { + return Promise.reject(_.extend(e || {}, { browserId: this.id, sessionId: this.sessionId })); @@ -291,7 +291,7 @@ module.exports = class NewBrowser extends Browser { } _maximize() { - return this._wd.windowHandle() + return Promise.resolve(this._wd.windowHandle()) .then((handle) => this._wd.maximize(handle)); } @@ -300,12 +300,12 @@ module.exports = class NewBrowser extends Browser { } _findElementWd(selector) { - return this._wd.elementByCssSelector(selector) + return Promise.resolve(this._wd.elementByCssSelector(selector)) .catch((error) => { if (error.status === WdErrors.ELEMENT_NOT_FOUND) { error.selector = selector; } - return q.reject(error); + return Promise.reject(error); }); } @@ -320,7 +320,7 @@ module.exports = class NewBrowser extends Browser { error.status = WdErrors.ELEMENT_NOT_FOUND; error.selector = selector; - return q.reject(error); + return Promise.reject(error); }); } @@ -334,7 +334,7 @@ module.exports = class NewBrowser extends Browser { quit() { if (!this.sessionId) { - return q(); + return Promise.resolve(); } return this._setSessionTimeout(this.config.sessionQuitTimeout) diff --git a/lib/calibrator.js b/lib/calibrator.js index 5a2e21a11..109e7731d 100644 --- a/lib/calibrator.js +++ b/lib/calibrator.js @@ -1,5 +1,5 @@ 'use strict'; -var q = require('q'), +var Promise = require('bluebird'), fs = require('fs'), path = require('path'), _ = require('lodash'), @@ -23,7 +23,7 @@ function Calibrator() { Calibrator.prototype.calibrate = function(browser) { var _this = this; if (this._cache[browser.id]) { - return q(this._cache[browser.id]); + return Promise.resolve(this._cache[browser.id]); } return browser.open('about:blank', {resetZoom: false}) .then(function() { @@ -38,7 +38,7 @@ Calibrator.prototype.calibrate = function(browser) { imageFeatures = _this._analyzeImage(image, {calculateColorLength: hasPixelRatio}); if (!imageFeatures) { - return q.reject(new GeminiError( + return Promise.reject(new GeminiError( 'Could not calibrate. This could be due to calibration page has failed to open properly' )); } diff --git a/lib/capture-session/index.js b/lib/capture-session/index.js index 8ac727987..162bf8e5d 100644 --- a/lib/capture-session/index.js +++ b/lib/capture-session/index.js @@ -57,8 +57,7 @@ var CaptureSession = inherit({ return this.browser.captureViewportImage() .then((screenImage) => screenImage.save(path)) .then(() => (obj.imagePath = path)) - .catch(_.noop) - .thenResolve(obj); + .catch(_.noop).thenReturn(obj); }, serialize: function() { @@ -91,8 +90,7 @@ var CaptureSession = inherit({ const error = new StateError(e.message); return viewport.save(path) - .then(() => error.imagePath = path) - .thenReject(error); + .then(() => error.imagePath = path).thenThrow(error); }, _extendImage: function(viewport, page) { diff --git a/lib/cli/index.js b/lib/cli/index.js index 00def7f14..9f91aa7d3 100644 --- a/lib/cli/index.js +++ b/lib/cli/index.js @@ -2,7 +2,7 @@ var pkg = require('../../package.json'), program = require('commander'), - q = require('q'), + Promise = require('bluebird'), handleErrors = require('./errors').handleErrors, handleUncaughtExceptions = require('./errors').handleUncaughtExceptions, Gemini = require('../gemini'), @@ -68,7 +68,7 @@ function runGemini(method, paths, options) { handleUncaughtExceptions(); - return q.fcall(function() { + return Promise.try(function() { checkForDeprecations(); return new Gemini(program.config, {cli: true, env: true}); }) diff --git a/lib/coverage.js b/lib/coverage.js index 2a5843023..56cb70b4c 100644 --- a/lib/coverage.js +++ b/lib/coverage.js @@ -5,7 +5,7 @@ var inherit = require('inherit'), path = require('path'), fs = require('fs'), url = require('url'), - q = require('q'), + Promise = require('bluebird'), chalk = require('chalk'), qfs = require('q-io/fs'), http = require('q-io/http'), @@ -63,11 +63,11 @@ module.exports = inherit({ .catch(function(err) { // ignoring the fail if directory already exists. if (err.code !== 'EEXIST') { - return q.reject(err); + return Promise.reject(err); } }) .then(function() { - return q.all(Object.keys(_this.byURL).map(function(url) { + return Promise.all(Object.keys(_this.byURL).map(function(url) { return _this.processCSS(url); })) .then(function() { @@ -103,7 +103,7 @@ module.exports = inherit({ return readUrlOrFile(url, cssPath) .then(function(content) { var ast = css.parse(content); - return q.all([ + return Promise.all([ ast, content, _this.getSourceMap(ast, cssPath, url) @@ -147,7 +147,7 @@ module.exports = inherit({ ) .catch(function(err) { if (err.code !== 'ENOENT') { - return q.reject(err); + return Promise.reject(err); } }) .then(function(map) { @@ -235,7 +235,7 @@ module.exports = inherit({ return qfs.write( path.join(this.covDir, 'coverage.json'), JSON.stringify(data, null, 4) - ).thenResolve(data); + ).thenReturn(data); }, prepareOutputStats: function() { diff --git a/lib/gemini.js b/lib/gemini.js index c0b4f9ddb..60649715f 100644 --- a/lib/gemini.js +++ b/lib/gemini.js @@ -4,8 +4,8 @@ const debug = require('debug'); const chalk = require('chalk'); const _ = require('lodash'); const PassthroughEmitter = require('./passthrough-emitter'); -const qDebugMode = require('q-debug-mode'); -const q = require('q'); +const Promise = require('bluebird'); +const q = require('bluebird-q'); const Config = require('./config'); const GeminiError = require('./errors/gemini-error'); @@ -65,7 +65,7 @@ module.exports = class Gemini extends PassthroughEmitter { const getTests = (source, options) => { return source instanceof SuiteCollection - ? q(source) + ? Promise.resolve(source) : this.readTests(source, options); }; @@ -80,8 +80,7 @@ module.exports = class Gemini extends PassthroughEmitter { const stats = new RunnerStats(runner); - return runner.run(suiteCollection) - .thenResolve(stats.get()); + return runner.run(suiteCollection).thenReturn(stats.get()); }); } @@ -104,14 +103,14 @@ module.exports = class Gemini extends PassthroughEmitter { options = options || {}; } - return readTests({paths, sets: options.sets}, this.config, this) + return q(readTests({paths, sets: options.sets}, this.config, this) .then((rootSuite) => { if (options.grep) { applyGrep_(options.grep, rootSuite); } return new SuiteCollection(rootSuite.children); - }); + })); function applyGrep_(grep, suite) { if (!suite.hasStates) { @@ -131,11 +130,11 @@ module.exports = class Gemini extends PassthroughEmitter { } update(paths, options) { - return this._run(StateProcessor.createScreenUpdater(options), paths, options); + return q(this._run(StateProcessor.createScreenUpdater(options), paths, options)); } test(paths, options) { - return this._run(StateProcessor.createTester(this.config), paths, options); + return q(this._run(StateProcessor.createTester(this.config), paths, options)); } getScreenshotPath(suite, stateName, browserId) { @@ -187,7 +186,9 @@ function applyReporter(runner, reporter) { function setupLog(isDebug) { if (isDebug) { - qDebugMode(q); + Promise.config({ + longStackTraces: true + }); debug.enable('gemini:*'); } } diff --git a/lib/image/index.js b/lib/image/index.js index 0d1ed8947..355e3194b 100644 --- a/lib/image/index.js +++ b/lib/image/index.js @@ -1,6 +1,6 @@ 'use strict'; -const q = require('q'); +const Promise = require('bluebird'); const looksSame = require('looks-same'); const PngImg = require('png-img'); const utils = require('png-img/utils'); @@ -23,7 +23,7 @@ class Image { safeRect.height ); - return q(this); + return Promise.resolve(this); } getSize() { @@ -35,7 +35,7 @@ class Image { } save(file) { - return q.ninvoke(this._img, 'save', file); + return Promise.fromCallback((cb) => this._img.save(file, cb)); } clear(area, opts) { @@ -85,7 +85,9 @@ class Image { if ('tolerance' in opts) { compareOptions.tolerance = opts.tolerance; } - return q.nfcall(looksSame, path1, path2, compareOptions); + return Promise.fromCallback((cb) => { + looksSame(path1, path2, compareOptions, cb); + }); } static buildDiff(opts) { @@ -98,7 +100,7 @@ class Image { if ('tolerance' in opts) { diffOptions.tolerance = opts.tolerance; } - return q.nfcall(looksSame.createDiff, diffOptions); + return Promise.fromCallback((cb) => looksSame.createDiff(diffOptions, cb)); } } diff --git a/lib/reporters/html/index.js b/lib/reporters/html/index.js index 01fcd9a50..9255538d0 100644 --- a/lib/reporters/html/index.js +++ b/lib/reporters/html/index.js @@ -2,7 +2,7 @@ var path = require('path'), - q = require('q'), + Promise = require('bluebird'), fs = require('q-io/fs'), view = require('./view'), @@ -41,29 +41,28 @@ function makeDirFor(destPath) { } function prepareViewData(runner) { - var result = q.defer(), - model = new ViewModel(); + return new Promise((resolve) => { + var model = new ViewModel(); - runner.on(Events.SKIP_STATE, model.addSkipped.bind(model)); + runner.on(Events.SKIP_STATE, model.addSkipped.bind(model)); - runner.on(Events.TEST_RESULT, function(r) { - if (r.equal) { - model.addSuccess(r); - } else { - model.addFail(r); - } - }); + runner.on(Events.TEST_RESULT, function(r) { + if (r.equal) { + model.addSuccess(r); + } else { + model.addFail(r); + } + }); - runner.on(Events.RETRY, model.addRetry.bind(model)); + runner.on(Events.RETRY, model.addRetry.bind(model)); - runner.on(Events.ERROR, model.addError.bind(model)); - runner.on(Events.WARNING, model.addWarning.bind(model)); + runner.on(Events.ERROR, model.addError.bind(model)); + runner.on(Events.WARNING, model.addWarning.bind(model)); - runner.on(Events.END, function() { - result.resolve(model.getResult()); + runner.on(Events.END, function() { + resolve(model.getResult()); + }); }); - - return result.promise; } function logError(e) { @@ -77,45 +76,8 @@ function logPathToHtmlReport() { } function prepareImages(runner) { - var imagesReady = q.defer(), - queue = q(true); - - runner.on(Events.WARNING, function(testResult) { - queue = queue.then(function() { - return copyImage(testResult.currentPath, lib.currentAbsolutePath(testResult)); - }); - }); - - runner.on(Events.ERROR, function(testResult) { - queue = queue.then(function() { - return handleErrorEvent_(testResult); - }); - }); - - runner.on(Events.RETRY, function(testResult) { - queue = queue.then(function() { - return testResult.hasOwnProperty('equal') - ? handleTestResultEvent_(testResult) - : handleErrorEvent_(testResult); - }); - }); - - runner.on(Events.TEST_RESULT, function(testResult) { - queue = queue.then(function() { - return handleTestResultEvent_(testResult); - }); - }); - - runner.on(Events.END, function() { - logPathToHtmlReport(); - - queue.then(imagesReady.resolve, imagesReady.reject); - }); - - return imagesReady.promise; - function handleTestResultEvent_(testResult) { - return q.all([ + return Promise.all([ copyImage(testResult.currentPath, lib.currentAbsolutePath(testResult)), copyImage(testResult.referencePath, lib.referenceAbsolutePath(testResult)), testResult.equal || saveDiff(testResult, lib.diffAbsolutePath(testResult)) @@ -127,10 +89,46 @@ function prepareImages(runner) { return src && copyImage(src, lib.currentAbsolutePath(testResult)); } + + return new Promise((resolve, reject) => { + const queue = Promise.resolve(true); + + runner.on(Events.WARNING, function(testResult) { + queue = queue.then(function() { + return copyImage(testResult.currentPath, lib.currentAbsolutePath(testResult)); + }); + }); + + runner.on(Events.ERROR, function(testResult) { + queue = queue.then(function() { + return handleErrorEvent_(testResult); + }); + }); + + runner.on(Events.RETRY, function(testResult) { + queue = queue.then(function() { + return testResult.hasOwnProperty('equal') + ? handleTestResultEvent_(testResult) + : handleErrorEvent_(testResult); + }); + }); + + runner.on(Events.TEST_RESULT, function(testResult) { + queue = queue.then(function() { + return handleTestResultEvent_(testResult); + }); + }); + + runner.on(Events.END, function() { + logPathToHtmlReport(); + + queue.then(resolve, reject); + }); + }); } module.exports = function htmlReporter(tester) { - q.all([ + Promise.all([ prepareViewData(tester), prepareImages(tester) ]) diff --git a/lib/reporters/html/view.js b/lib/reporters/html/view.js index a389662b9..845cdd0e3 100644 --- a/lib/reporters/html/view.js +++ b/lib/reporters/html/view.js @@ -2,7 +2,7 @@ var _ = require('lodash'), Handlebars = require('handlebars'), - q = require('q'), + Promise = require('bluebird'), fs = require('q-io/fs'), path = require('path'), @@ -74,7 +74,7 @@ module.exports = { * returns {Promise} */ createHtml: function(model) { - return q.all([ + return Promise.all([ loadTemplate('suite.hbs'), loadTemplate('state.hbs'), loadTemplate('report.hbs') @@ -94,7 +94,7 @@ module.exports = { save: function(html) { return fs.makeTree(REPORT_DIR) .then(function() { - return q.all([ + return Promise.all([ fs.write(makeOutFilePath('index.html'), html), copyToReportDir('report.js'), copyToReportDir('report.css') diff --git a/lib/runner/browser-runner/index.js b/lib/runner/browser-runner/index.js index 4961295e0..aabe466df 100644 --- a/lib/runner/browser-runner/index.js +++ b/lib/runner/browser-runner/index.js @@ -1,7 +1,7 @@ 'use strict'; const _ = require('lodash'); -const q = require('q'); +const Promise = require('bluebird'); const promiseUtils = require('q-promise-utils'); const BrowserAgent = require('./browser-agent'); const Runner = require('../runner'); @@ -40,7 +40,7 @@ module.exports = class BrowserRunner extends Runner { } _doNothing() { - return q(); + return Promise.resolve(); } _runSuites(suiteCollection, stateProcessor) { diff --git a/lib/runner/index.js b/lib/runner/index.js index f59f2b68d..69b509622 100644 --- a/lib/runner/index.js +++ b/lib/runner/index.js @@ -1,7 +1,7 @@ 'use strict'; const _ = require('lodash'); -const q = require('q'); +const Promise = require('bluebird'); const Runner = require('./runner'); const TestSessionRunner = require('./test-session-runner'); const Coverage = require('../coverage'); @@ -31,7 +31,7 @@ module.exports = class TestsRunner extends Runner { run(suiteCollection) { const suites = suiteCollection.allSuites(); - return q.fcall(() => { + return Promise.try(() => { this.emitAndWait(Events.START_RUNNER, this); this.emit(Events.BEGIN, { config: this.config, diff --git a/lib/runner/state-runner/disabled-state-runner.js b/lib/runner/state-runner/disabled-state-runner.js index 832882a81..7bc954ca0 100644 --- a/lib/runner/state-runner/disabled-state-runner.js +++ b/lib/runner/state-runner/disabled-state-runner.js @@ -1,10 +1,10 @@ 'use strict'; -const q = require('q'); +const Promise = require('bluebird'); const StateRunner = require('./state-runner'); module.exports = class DisabledStateRunner extends StateRunner { _capture() { - return q.resolve(); + return Promise.resolve(); } }; diff --git a/lib/runner/state-runner/state-runner.js b/lib/runner/state-runner/state-runner.js index 91575d331..3dbab61b9 100644 --- a/lib/runner/state-runner/state-runner.js +++ b/lib/runner/state-runner/state-runner.js @@ -27,7 +27,7 @@ module.exports = class StateRunner extends Runner { return session.runActions(this._state.actions) .then(() => session.prepareScreenshot(this._state, {coverage: this._config.isCoverageEnabled()})) - .catch((e) => session.extendWithPageScreenshot(e).thenReject(e)) + .catch((e) => session.extendWithPageScreenshot(e).thenThrow(e)) .then((page) => this._capture(stateProcessor, page)) .catch((e) => this._emit(Events.ERROR, e)) .finally(() => this._emit(Events.END_STATE)); diff --git a/lib/runner/suite-runner/insistent-suite-runner.js b/lib/runner/suite-runner/insistent-suite-runner.js index 4e4c2df4e..30ccbdeca 100644 --- a/lib/runner/suite-runner/insistent-suite-runner.js +++ b/lib/runner/suite-runner/insistent-suite-runner.js @@ -6,7 +6,7 @@ const SuiteCollection = require('../../suite-collection'); const Events = require('../../constants/events'); const CancelledError = require('../../errors/cancelled-error'); const NoRefImageError = require('../../errors/no-ref-image-error'); -const q = require('q'); +const Promise = require('bluebird'); const _ = require('lodash'); module.exports = class InsistentSuiteRunner extends SuiteRunner { @@ -31,7 +31,7 @@ module.exports = class InsistentSuiteRunner extends SuiteRunner { this._shouldRetry = false; return this._suiteRunner.run(stateProcessor) - .catch((e) => this._handleError(e) || q.reject(e)) + .catch((e) => this._handleError(e) || Promise.reject(e)) .then(() => this._retry(stateProcessor)); } diff --git a/lib/runner/suite-runner/regular-suite-runner.js b/lib/runner/suite-runner/regular-suite-runner.js index 117f88dc6..072382afe 100644 --- a/lib/runner/suite-runner/regular-suite-runner.js +++ b/lib/runner/suite-runner/regular-suite-runner.js @@ -1,8 +1,7 @@ 'use strict'; const _ = require('lodash'); -const q = require('q'); -const promiseUtils = require('q-promise-utils'); +const Promise = require('bluebird'); const CaptureSession = require('../../capture-session'); @@ -59,7 +58,7 @@ module.exports = class RegularSuiteRunner extends SuiteRunner { } _doNothing() { - return q.resolve(); + return Promise.resolve(); } _processStates(stateProcessor) { @@ -71,7 +70,7 @@ module.exports = class RegularSuiteRunner extends SuiteRunner { .then(() => this._runAfterActions(), this._keepPassedError(this._runAfterActions)) .then(() => this._runPostActions(), this._keepPassedError(this._runPostActions)) .catch((e) => { - return q.reject(_.extend(e, { + return Promise.reject(_.extend(e, { browserId: browser.id, sessionId: browser.sessionId })); @@ -91,11 +90,12 @@ module.exports = class RegularSuiteRunner extends SuiteRunner { } _keepPassedError(fn) { - return (e) => q.when(fn.call(this)).finally(() => q.reject(e)); + return (e) => Promise.try(() => fn.call(this)) + .finally(() => Promise.reject(e)); } _runStates(stateProcessor) { - return promiseUtils.seqMap(this._suite.states, (state) => this._runStateInSession(state, stateProcessor)); + return Promise.mapSeries(this._suite.states, (state) => this._runStateInSession(state, stateProcessor)); } _validateSession(error) { diff --git a/lib/runner/suite-runner/skipped-suite-runner.js b/lib/runner/suite-runner/skipped-suite-runner.js index 16bac962e..b6de7a7c0 100644 --- a/lib/runner/suite-runner/skipped-suite-runner.js +++ b/lib/runner/suite-runner/skipped-suite-runner.js @@ -1,6 +1,6 @@ 'use strict'; -var q = require('q'), +var Promise = require('bluebird'), inherit = require('inherit'), SuiteRunner = require('./suite-runner'), Events = require('../../constants/events'); @@ -15,7 +15,7 @@ var SkippedSuiteRunner = inherit(SuiteRunner, { }); }, this); - return q.resolve(); + return Promise.resolve(); } }); diff --git a/lib/runner/suite-runner/stateless-suite-runner.js b/lib/runner/suite-runner/stateless-suite-runner.js index 074d83690..6cb9e9832 100644 --- a/lib/runner/suite-runner/stateless-suite-runner.js +++ b/lib/runner/suite-runner/stateless-suite-runner.js @@ -1,12 +1,12 @@ 'use strict'; -var q = require('q'), +var Promise = require('bluebird'), SuiteRunner = require('./suite-runner'), inherit = require('inherit'); var StatelessSuiteRunner = inherit(SuiteRunner, { _doRun: function() { - return q.resolve(); + return Promise.resolve(); } }); diff --git a/lib/runner/test-session-runner.js b/lib/runner/test-session-runner.js index fac7dfa28..eb96e2c73 100644 --- a/lib/runner/test-session-runner.js +++ b/lib/runner/test-session-runner.js @@ -1,7 +1,7 @@ 'use strict'; const _ = require('lodash'); -const q = require('q'); +const Promise = require('bluebird'); const Runner = require('./runner'); const promiseUtils = require('q-promise-utils'); const BrowserRunner = require('./browser-runner'); @@ -65,7 +65,7 @@ module.exports = class TestSessionRunner extends Runner { return runner.run(suiteCollection, stateProcessor) .catch((e) => { this._cancel(); - return q.reject(e); + return Promise.reject(e); }); } diff --git a/lib/state-processor/capture-processor/screen-updater/diff-screen-updater.js b/lib/state-processor/capture-processor/screen-updater/diff-screen-updater.js index 089995777..e3abe5150 100644 --- a/lib/state-processor/capture-processor/screen-updater/diff-screen-updater.js +++ b/lib/state-processor/capture-processor/screen-updater/diff-screen-updater.js @@ -26,8 +26,7 @@ module.exports = class DiffScreenUpdater extends ScreenUpdater { return false; } - return fs.copy(currentPath, referencePath) - .thenResolve(true); + return fs.copy(currentPath, referencePath).thenReturn(true); }); } }; diff --git a/lib/state-processor/capture-processor/screen-updater/meta-screen-updater.js b/lib/state-processor/capture-processor/screen-updater/meta-screen-updater.js index c6a7379c0..4fa8e22a9 100644 --- a/lib/state-processor/capture-processor/screen-updater/meta-screen-updater.js +++ b/lib/state-processor/capture-processor/screen-updater/meta-screen-updater.js @@ -1,6 +1,6 @@ 'use strict'; -const q = require('q'); +const Promise = require('bluebird'); const ScreenUpdater = require('./screen-updater'); const DiffUpdater = require('./diff-screen-updater'); @@ -15,7 +15,7 @@ module.exports = class MetaScreenUpdater extends ScreenUpdater { } _processCapture(capture, opts, isRefExists) { - return q.all([ + return Promise.all([ this._diffUpdater._processCapture(capture, opts, isRefExists), this._newUpdater._processCapture(capture, opts, isRefExists) ]) diff --git a/lib/state-processor/capture-processor/screen-updater/new-screen-updater.js b/lib/state-processor/capture-processor/screen-updater/new-screen-updater.js index d9cf3555f..e34e9d82f 100644 --- a/lib/state-processor/capture-processor/screen-updater/new-screen-updater.js +++ b/lib/state-processor/capture-processor/screen-updater/new-screen-updater.js @@ -12,7 +12,6 @@ module.exports = class NewScreenUpdater extends ScreenUpdater { } return fs.makeTree(path.dirname(opts.refPath)) - .then(() => capture.image.save(opts.refPath)) - .thenResolve(true); + .then(() => capture.image.save(opts.refPath)).thenReturn(true); } }; diff --git a/lib/state-processor/capture-processor/tester.js b/lib/state-processor/capture-processor/tester.js index db33cac2c..46ee4e53d 100644 --- a/lib/state-processor/capture-processor/tester.js +++ b/lib/state-processor/capture-processor/tester.js @@ -1,6 +1,6 @@ 'use strict'; -const q = require('q'); +const Promise = require('bluebird'); const fs = require('q-io/fs'); const temp = require('../../temp'); @@ -21,7 +21,7 @@ module.exports = class Tester extends CaptureProcessor { .then(() => fs.exists(referencePath)) .then((refExists) => { if (!refExists) { - return q.reject(new NoRefImageError(referencePath, currentPath)); + return Promise.reject(new NoRefImageError(referencePath, currentPath)); } }) .then(() => Image.compare(currentPath, referencePath, { diff --git a/lib/state-processor/state-processor.js b/lib/state-processor/state-processor.js index cbfce5f52..7174bc619 100644 --- a/lib/state-processor/state-processor.js +++ b/lib/state-processor/state-processor.js @@ -1,7 +1,7 @@ 'use strict'; const _ = require('lodash'); -const q = require('q'); +const Promise = require('bluebird'); const workerFarm = require('worker-farm'); const temp = require('../temp'); @@ -36,8 +36,8 @@ module.exports = class StateProcessor { temp: temp.serialize() }; - return q.nfcall(this._workers, jobArgs) - .catch(err => q.reject(errorUtils.fromPlainObject(err))) + return Promise.fromCallback((cb) => this._workers(jobArgs, cb)) + .catch(err => Promise.reject(errorUtils.fromPlainObject(err))) .then(result => _.extend(result, {coverage, tolerance})); } }; diff --git a/lib/test-reader/index.js b/lib/test-reader/index.js index 009ff29ec..ed730549c 100644 --- a/lib/test-reader/index.js +++ b/lib/test-reader/index.js @@ -4,7 +4,7 @@ const path = require('path'); const _ = require('lodash'); const globExtra = require('glob-extra'); -const q = require('q'); +const Promise = require('bluebird'); const SetCollection = require('./set-collection'); const Suite = require('../suite'); @@ -42,7 +42,7 @@ module.exports = (opts, config, emitter) => { const expandOpts = {formats: ['.js']}; const globOpts = {ignore: config.system.exclude}; - return q.all([ + return Promise.all([ SetCollection.create(config, opts, expandOpts, globOpts), globExtra.expandPaths(files, expandOpts, globOpts) ]) diff --git a/lib/test-reader/set-collection.js b/lib/test-reader/set-collection.js index 562fcbe23..8c8602ec1 100644 --- a/lib/test-reader/set-collection.js +++ b/lib/test-reader/set-collection.js @@ -3,7 +3,7 @@ const globExtra = require('glob-extra'); const _ = require('lodash'); const path = require('path'); -const q = require('q'); +const Promise = require('bluebird'); const GeminiError = require('../errors/gemini-error'); const TestSet = require('./test-set'); @@ -19,7 +19,7 @@ module.exports = class SetCollection { } else if (!_.isEmpty(opts.paths) && SetCollection._isAllFilesMasks(filteredSets)) { const sets = SetCollection._resolve(filteredSets, projectRoot); - return q.fcall(() => new SetCollection(sets, {allFilesMasks: true})); + return Promise.try(() => new SetCollection(sets, {allFilesMasks: true})); } expandOpts = _.defaults(expandOpts, {root: projectRoot}); @@ -58,7 +58,7 @@ module.exports = class SetCollection { return globExtra.expandPaths(set.files, expandOpts, globOpts) .then((files) => _.extend(set, {files})); }) - .thru(q.all) + .thru(Promise.all) .value(); } diff --git a/lib/tests-api/actions-builder.js b/lib/tests-api/actions-builder.js index 9220c97f9..a05464d26 100644 --- a/lib/tests-api/actions-builder.js +++ b/lib/tests-api/actions-builder.js @@ -2,7 +2,7 @@ const inherit = require('inherit'); const _ = require('lodash'); -const q = require('q'); +const Promise = require('bluebird'); const fs = require('q-io/fs'); const wd = require('wd'); @@ -52,7 +52,7 @@ module.exports = inherit({ return browser.waitForElementByCssSelector(selector, options.asserter, timeout) .catch(function() { //assuming its timeout error, no way to distinguish - return q.reject(new StateError( + return Promise.reject(new StateError( 'Element ' + selector + ' ' + options.error + ' in ' + timeout + 'ms')); }); }); @@ -69,7 +69,7 @@ module.exports = inherit({ this._pushAction(this.waitForJSCondition, function(browser) { return browser.waitFor(wd.asserters.jsCondition(serializeFunc(jsFunc)), timeout) .catch(function() { - return q.reject(new StateError('Condition was not met in ' + timeout + 'ms')); + return Promise.reject(new StateError('Condition was not met in ' + timeout + 'ms')); }); }); return this; @@ -92,7 +92,7 @@ module.exports = inherit({ // of gemini's internals. replaceStack(e, stackHolder.stack); } - return q.reject(e); + return Promise.reject(e); }); }); }, @@ -179,7 +179,7 @@ module.exports = inherit({ return browser.moveTo(element); }); } else { - action = q.resolve(); + action = Promise.resolve(); } return action.then(function() { return browser.buttonUp(button); @@ -258,7 +258,7 @@ module.exports = inherit({ return fs.isFile(path) .then(function(isFile) { if (!isFile) { - return q.reject(new StateError(path + ' should be existing file')); + return Promise.reject(new StateError(path + ' should be existing file')); } return findElement(element, browser); }) @@ -321,7 +321,7 @@ module.exports = inherit({ setWindowSize: function(width, height) { this._pushAction(this.setWindowSize, function setWindowSize(browser, postActions) { - return (postActions ? mkRestoreAction_() : q()) + return (postActions ? mkRestoreAction_() : Promise.resolve()) .then(function() { return browser.setWindowSize(width, height); }); @@ -399,7 +399,7 @@ function serializeFunc(func) { function findElement(element, browser) { if (element.cache && element.cache[browser.sessionId]) { - return q.resolve(element.cache[browser.sessionId]); + return Promise.resolve(element.cache[browser.sessionId]); } if (typeof element === 'string') { @@ -419,6 +419,6 @@ function findElement(element, browser) { + error.selector); } - return q.reject(error); + return Promise.reject(error); }); } diff --git a/package.json b/package.json index b42c895f5..6f627f9ac 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,8 @@ "dependencies": { "aliasify": "^1.7.2", "app-module-path": "^1.1.0", + "bluebird": "^3.4.6", + "bluebird-q": "^2.1.1", "browserify": "^13.0.0", "chalk": "^1.1.3", "commander": "^2.8.1", @@ -29,8 +31,6 @@ "micromatch": "^2.3.11", "png-img": "^2.1.0", "polyfill-service": "~1.4.0", - "q": "^1.1.2", - "q-debug-mode": "0.0.1", "q-io": "^2.0.6", "q-promise-utils": "^1.1.0", "qemitter": "^1.0.0", diff --git a/test/setup.js b/test/setup.js index d8b46f741..486582be9 100644 --- a/test/setup.js +++ b/test/setup.js @@ -1,6 +1,11 @@ 'use strict'; -var chai = require('chai'); +const chai = require('chai'); +const Promise = require('bluebird'); + +Promise.config({ + longStackTraces: true +}); global.sinon = require('sinon'); global.assert = chai.assert; diff --git a/test/unit/browser-pool/basic-pool.test.js b/test/unit/browser-pool/basic-pool.test.js index e706a4a42..4af55237c 100644 --- a/test/unit/browser-pool/basic-pool.test.js +++ b/test/unit/browser-pool/basic-pool.test.js @@ -1,6 +1,6 @@ 'use strict'; -const q = require('q'); +const Promise = require('bluebird'); const Browser = require('lib/browser'); const BasicPool = require('lib/browser-pool/basic-pool'); const signalHandler = require('lib/signal-handler'); @@ -20,8 +20,8 @@ describe('UnlimitedPool', function() { forBrowser: sinon.stub().returns(browserConfig) }; browser = sandbox.stub(browserWithId('id')); - browser.launch.returns(q()); - browser.quit.returns(q()); + browser.launch.returns(Promise.resolve()); + browser.quit.returns(Promise.resolve()); sandbox.stub(Browser, 'create').returns(browser); pool = new BasicPool(config); @@ -44,7 +44,7 @@ describe('UnlimitedPool', function() { const freeBrowser = sinon.spy(pool, 'freeBrowser'); const assertCalled = () => assert.called(freeBrowser); - browser.reset.returns(q.reject()); + browser.reset.returns(Promise.reject()); return requestBrowser() .then(assertCalled, assertCalled); diff --git a/test/unit/browser-pool/caching-pool.js b/test/unit/browser-pool/caching-pool.js index a3e334925..68b2a7039 100644 --- a/test/unit/browser-pool/caching-pool.js +++ b/test/unit/browser-pool/caching-pool.js @@ -1,21 +1,21 @@ 'use strict'; -const q = require('q'); +const Promise = require('bluebird'); const Pool = require('lib/browser-pool/caching-pool'); const browserWithId = require('../../util').browserWithId; describe('CachingPool', () => { const makeStubBrowser = (id) => { const browser = sinon.stub(browserWithId(id)); - browser.launch.returns(q()); - browser.reset.returns(q()); + browser.launch.returns(Promise.resolve()); + browser.reset.returns(Promise.resolve()); return browser; }; beforeEach(() => { this.underlyingPool = { getBrowser: sinon.stub(), - freeBrowser: sinon.stub().returns(q()), - finalizeBrowsers: sinon.stub().returns(q()) + freeBrowser: sinon.stub().returns(Promise.resolve()), + finalizeBrowsers: sinon.stub().returns(Promise.resolve()) }; this.poolWithReuseLimits = (limits) => { @@ -40,7 +40,7 @@ describe('CachingPool', () => { afterEach(() => this.sinon.restore()); it('should create new browser when requested first time', () => { - this.underlyingPool.getBrowser.returns(q(makeStubBrowser('id'))); + this.underlyingPool.getBrowser.returns(Promise.resolve(makeStubBrowser('id'))); const pool = this.makePool(); return pool.getBrowser('id') .then(() => assert.calledWith(this.underlyingPool.getBrowser, 'id')); @@ -48,22 +48,22 @@ describe('CachingPool', () => { it('should return same browser as returned by underlying pool', () => { const browser = makeStubBrowser('id'); - this.underlyingPool.getBrowser.returns(q(browser)); + this.underlyingPool.getBrowser.returns(Promise.resolve(browser)); const pool = this.makePool(); return assert.eventually.equal(pool.getBrowser('id'), browser); }); it('should not reset the new browser', () => { const browser = makeStubBrowser('id'); - this.underlyingPool.getBrowser.returns(q(browser)); + this.underlyingPool.getBrowser.returns(Promise.resolve(browser)); return this.makePool().getBrowser('id') .then(() => assert.notCalled(browser.reset)); }); it('should create and launch new browser if there is free browser with different id', () => { this.underlyingPool.getBrowser - .withArgs('first').returns(q(makeStubBrowser('first'))) - .withArgs('second').returns(q(makeStubBrowser('second'))); + .withArgs('first').returns(Promise.resolve(makeStubBrowser('first'))) + .withArgs('second').returns(Promise.resolve(makeStubBrowser('second'))); const pool = this.poolWithReuseLimits({ first: 1, second: 1 @@ -76,7 +76,7 @@ describe('CachingPool', () => { it('should not quit browser when freed', () => { const pool = this.makePool(); - this.underlyingPool.getBrowser.returns(q(makeStubBrowser('id'))); + this.underlyingPool.getBrowser.returns(Promise.resolve(makeStubBrowser('id'))); return pool.getBrowser('id') .then((browser) => pool.freeBrowser(browser, {force: false})) @@ -85,7 +85,7 @@ describe('CachingPool', () => { it('should quit browser when there are no more requests', () => { const pool = this.makePool(); - this.underlyingPool.getBrowser.returns(q(makeStubBrowser('id'))); + this.underlyingPool.getBrowser.returns(Promise.resolve(makeStubBrowser('id'))); return pool.getBrowser('id') .then((browser) => pool.freeBrowser(browser, {force: true})) @@ -111,23 +111,23 @@ describe('CachingPool', () => { describe('when reset failed', () => { it('should fail to get browser', () => { - this.browser.reset.returns(q.reject('some-error')); + this.browser.reset.returns(Promise.reject('some-error')); return assert.isRejected(this.pool.getBrowser('id'), /some-error/); }); it('should put browser back', () => { - this.browser.reset.returns(q.reject()); + this.browser.reset.returns(Promise.reject()); return this.pool.getBrowser('id') - .fail(() => { + .catch(() => { assert.calledOnce(this.underlyingPool.freeBrowser); assert.calledWith(this.underlyingPool.freeBrowser, this.browser); }); }); it('should keep original error if failed to put browser back', () => { - this.browser.reset.returns(q.reject('reset-error')); - this.underlyingPool.freeBrowser.returns(q.reject('free-error')); + this.browser.reset.returns(Promise.reject('reset-error')); + this.underlyingPool.freeBrowser.returns(Promise.reject('free-error')); return assert.isRejected(this.pool.getBrowser('id'), /reset-error/); }); @@ -139,7 +139,7 @@ describe('CachingPool', () => { this.firstBrowser = makeStubBrowser('id'); this.secondBrowser = makeStubBrowser('id'); this.pool = this.makePool(); - return q.all([ + return Promise.all([ this.pool.freeBrowser(this.firstBrowser), this.pool.freeBrowser(this.secondBrowser) ]); @@ -171,7 +171,7 @@ describe('CachingPool', () => { }); it('should launch only one session within the reuse limit', () => { - this.underlyingPool.getBrowser.returns(q(makeStubBrowser('id'))); + this.underlyingPool.getBrowser.returns(Promise.resolve(makeStubBrowser('id'))); const pool = this.poolWithReuseLimits({id: 2}); return this.launchAndFree(pool, 'id') .then(() => pool.getBrowser('id')) @@ -180,8 +180,8 @@ describe('CachingPool', () => { it('should launch next session when over reuse limit', () => { this.underlyingPool.getBrowser - .onFirstCall().returns(q(makeStubBrowser('id'))) - .onSecondCall().returns(q(makeStubBrowser('id'))); + .onFirstCall().returns(Promise.resolve(makeStubBrowser('id'))) + .onSecondCall().returns(Promise.resolve(makeStubBrowser('id'))); const pool = this.poolWithReuseLimits({id: 2}); return this.launchAndFree(pool, 'id') .then(() => this.launchAndFree(pool, 'id')) @@ -191,8 +191,8 @@ describe('CachingPool', () => { it('should get new session for each suite if reuse limit equal 1', () => { this.underlyingPool.getBrowser - .onFirstCall().returns(q(makeStubBrowser('browserId'))) - .onSecondCall().returns(q(makeStubBrowser('browserId'))); + .onFirstCall().returns(Promise.resolve(makeStubBrowser('browserId'))) + .onSecondCall().returns(Promise.resolve(makeStubBrowser('browserId'))); const pool = this.poolWithReuseLimits({browserId: 1}); return this.launchAndFree(pool, 'browserId') .then(() => pool.getBrowser('browserId')) @@ -201,7 +201,7 @@ describe('CachingPool', () => { it('should close old session when reached reuse limit', () => { const browser = makeStubBrowser('id'); - this.underlyingPool.getBrowser.returns(q(browser)); + this.underlyingPool.getBrowser.returns(Promise.resolve(browser)); const pool = this.poolWithReuseLimits({id: 2}); return this.launchAndFree(pool, 'id') .then(() => this.launchAndFree(pool, 'id')) @@ -210,10 +210,10 @@ describe('CachingPool', () => { it('should cache browser with different id even if the first one is over limit', () => { this.underlyingPool.getBrowser - .withArgs('first').returns(q(makeStubBrowser('first'))); + .withArgs('first').returns(Promise.resolve(makeStubBrowser('first'))); const createSecondBrowser = this.underlyingPool.getBrowser.withArgs('second'); - createSecondBrowser.returns(q(makeStubBrowser('second'))); + createSecondBrowser.returns(Promise.resolve(makeStubBrowser('second'))); const pool = this.poolWithReuseLimits({ first: 2, diff --git a/test/unit/browser-pool/limited-pool.test.js b/test/unit/browser-pool/limited-pool.test.js index bc0effc01..0d239d7ca 100644 --- a/test/unit/browser-pool/limited-pool.test.js +++ b/test/unit/browser-pool/limited-pool.test.js @@ -1,14 +1,15 @@ 'use strict'; var Browser = require('lib/browser'), - q = require('q'), + Promise = require('bluebird'), LimitedPool = require('lib/browser-pool/limited-pool'), + rejectedPromise = require('test/util').rejectedPromise, CancelledError = require('lib/errors/cancelled-error'); describe('LimitedPool', function() { beforeEach(function() { this.underlyingPool = { getBrowser: sinon.stub(), - freeBrowser: sinon.stub().returns(q()), + freeBrowser: sinon.stub().returns(Promise.resolve()), cancel: sinon.stub() }; @@ -34,7 +35,7 @@ describe('LimitedPool', function() { it('should request browser from underlying pool', function() { var browser = this.makeBrowser(); - this.underlyingPool.getBrowser.returns(q(browser)); + this.underlyingPool.getBrowser.returns(Promise.resolve(browser)); var pool = this.makePool(); return assert.eventually.equal(pool.getBrowser('id'), browser); }); @@ -46,7 +47,7 @@ describe('LimitedPool', function() { beforeEach(function() { browser = this.makeBrowser(); pool = this.makePool(); - this.underlyingPool.getBrowser.returns(q(browser)); + this.underlyingPool.getBrowser.returns(Promise.resolve(browser)); }); it('when freed', function() { @@ -93,12 +94,12 @@ describe('LimitedPool', function() { const pool = this.makePool(2); this.underlyingPool.getBrowser - .withArgs('first').returns(q(browser)) - .withArgs('second').returns(q.reject()); + .withArgs('first').returns(Promise.resolve(browser)) + .withArgs('second').returns(rejectedPromise()); - return q.allSettled([ + return Promise.all([ pool.getBrowser('first'), - pool.getBrowser('second') + pool.getBrowser('second').reflect() ]) .then(() => pool.freeBrowser(browser)) .then(() => assert.calledWith(this.underlyingPool.freeBrowser, browser, {force: true})); @@ -109,10 +110,10 @@ describe('LimitedPool', function() { var browser = this.makeBrowser(), pool = this.makePool(); - this.underlyingPool.getBrowser.onFirstCall().returns(q.reject()); - this.underlyingPool.getBrowser.onSecondCall().returns(browser); + this.underlyingPool.getBrowser.onFirstCall().returns(rejectedPromise()); + this.underlyingPool.getBrowser.onSecondCall().returns(Promise.resolve(browser)); - pool.getBrowser('id'); + pool.getBrowser('id').catch(() => {}); assert.eventually.equal(pool.getBrowser('id'), browser); }); @@ -121,10 +122,10 @@ describe('LimitedPool', function() { it('should launch all browser in limit', function() { var _this = this; this.underlyingPool.getBrowser - .withArgs('first').returns(q(this.makeBrowser())) - .withArgs('second').returns(q(this.makeBrowser())); + .withArgs('first').returns(Promise.resolve(this.makeBrowser())) + .withArgs('second').returns(Promise.resolve(this.makeBrowser())); var pool = this.makePool(2); - return q.all([pool.getBrowser('first'), pool.getBrowser('second')]) + return Promise.all([pool.getBrowser('first'), pool.getBrowser('second')]) .then(function() { assert.calledTwice(_this.underlyingPool.getBrowser); assert.calledWith(_this.underlyingPool.getBrowser, 'first'); @@ -133,7 +134,7 @@ describe('LimitedPool', function() { }); it('should not launch browsers out of limit', function() { - this.underlyingPool.getBrowser.returns(q(this.makeBrowser())); + this.underlyingPool.getBrowser.returns(Promise.resolve(this.makeBrowser())); var pool = this.makePool(1); var result = pool.getBrowser('first') .then(function() { @@ -147,8 +148,8 @@ describe('LimitedPool', function() { pool = this.makePool(1); this.underlyingPool.getBrowser - .withArgs('first').returns(q(this.makeBrowser())) - .withArgs('second').returns(q(expectedBrowser)); + .withArgs('first').returns(Promise.resolve(this.makeBrowser())) + .withArgs('second').returns(Promise.resolve(expectedBrowser)); var result = pool.getBrowser('first') .then(function(browser) { @@ -166,13 +167,13 @@ describe('LimitedPool', function() { pool = this.makePool(1); this.underlyingPool.getBrowser - .withArgs('first').returns(q(this.makeBrowser())) - .withArgs('second').returns(q(expectedBrowser)); + .withArgs('first').returns(Promise.resolve(this.makeBrowser())) + .withArgs('second').returns(Promise.resolve(expectedBrowser)); var result = pool.getBrowser('first') .then(function(browser) { var secondPromise = pool.getBrowser('second'); - return q.delay(100) + return Promise.delay(100) .then(function() { return pool.freeBrowser(browser); }) @@ -188,19 +189,20 @@ describe('LimitedPool', function() { pool = this.makePool(1); this.underlyingPool.getBrowser - .withArgs('first').returns(q(this.makeBrowser())) - .withArgs('second').returns(q(expectedBrowser)); + .withArgs('first').returns(Promise.resolve(this.makeBrowser())) + .withArgs('second').returns(Promise.resolve(expectedBrowser)); - this.underlyingPool.freeBrowser.returns(q.reject('error')); + this.underlyingPool.freeBrowser.returns(rejectedPromise()); var result = pool.getBrowser('first') .then(function(browser) { var secondPromise = pool.getBrowser('second'); - return q.delay(100) + return Promise.delay(100) .then(function() { return pool.freeBrowser(browser); }) - .fail(function() { + .catch(function() { + console.log('caught'); return secondPromise; }); }); @@ -214,26 +216,26 @@ describe('LimitedPool', function() { const afterSecondGet = sinon.spy().named('afterSecondGet'); this.underlyingPool.getBrowser - .withArgs('first').returns(q(this.makeBrowser())) - .withArgs('second').returns(q.resolve()); + .withArgs('first').returns(Promise.resolve(this.makeBrowser())) + .withArgs('second').returns(Promise.resolve()); return pool.getBrowser('first') .then((browser) => { - const freeFirstBrowser = q.delay(100) + const freeFirstBrowser = Promise.delay(100) .then(() => pool.freeBrowser(browser)) .then(afterFree); const getSecondBrowser = pool.getBrowser('second') .then(afterSecondGet); - return q.all([getSecondBrowser, freeFirstBrowser]) + return Promise.all([getSecondBrowser, freeFirstBrowser]) .then(() => assert.callOrder(afterFree, afterSecondGet)); }); }); it('should cancel queued browsers when cancel is called', function() { var pool = this.makePool(1); - this.underlyingPool.getBrowser.returns(q(this.makeBrowser())); + this.underlyingPool.getBrowser.returns(Promise.resolve(this.makeBrowser())); return pool.getBrowser('id') .then(function() { var secondRequest = pool.getBrowser('id'); @@ -246,8 +248,8 @@ describe('LimitedPool', function() { var pool = this.makePool(1), error = new Error('You shall not pass'); this.underlyingPool.getBrowser - .onFirstCall().returns(q(this.makeBrowser())) - .onSecondCall().returns(q.reject(error)); + .onFirstCall().returns(Promise.resolve(this.makeBrowser())) + .onSecondCall().returns(rejectedPromise(error)); return pool.getBrowser('id') .then(function(browser) { diff --git a/test/unit/browser/camera.js b/test/unit/browser/camera.js index cf225e657..0c219c3d2 100644 --- a/test/unit/browser/camera.js +++ b/test/unit/browser/camera.js @@ -1,6 +1,6 @@ 'use strict'; -const q = require('q'); +const Promise = require('bluebird'); const Camera = require('lib/browser/camera'); const Image = require('lib/image'); const util = require('lib/browser/util'); @@ -18,9 +18,9 @@ describe('browser/camera', function() { function mkWdStub_() { return { - takeScreenshot: sinon.stub().returns(q({})), - currentContext: sinon.stub().returns(q()), - context: sinon.stub().returns(q()), + takeScreenshot: sinon.stub().returns(Promise.resolve({})), + currentContext: sinon.stub().returns(Promise.resolve()), + context: sinon.stub().returns(Promise.resolve()), on: sinon.stub() }; } @@ -51,7 +51,7 @@ describe('browser/camera', function() { error = new Error('not today'); wd.takeScreenshot - .onSecondCall().returns(q.reject(error)); + .onSecondCall().returns(Promise.reject(error)); var camera = new Camera(wd), result = camera.captureViewportImage() @@ -69,7 +69,7 @@ describe('browser/camera', function() { var wd = mkWdStub_(); wd.takeScreenshot - .onFirstCall().returns(q.reject(new Error('not today'))); + .onFirstCall().returns(Promise.reject(new Error('not today'))); var camera = new Camera(wd); return camera.captureViewportImage() @@ -82,7 +82,7 @@ describe('browser/camera', function() { var wd = mkWdStub_(); wd.takeScreenshot - .onFirstCall().returns(q.reject(new Error('not today'))); + .onFirstCall().returns(Promise.reject(new Error('not today'))); var camera = new Camera(wd); return camera.captureViewportImage() @@ -94,9 +94,9 @@ describe('browser/camera', function() { it('should restore original context after taking screenshot', function() { var wd = mkWdStub_(); - wd.currentContext.returns(q('Original')); + wd.currentContext.returns(Promise.resolve('Original')); wd.takeScreenshot - .onFirstCall().returns(q.reject(new Error('not today'))); + .onFirstCall().returns(Promise.reject(new Error('not today'))); var camera = new Camera(wd); return camera.captureViewportImage() @@ -110,8 +110,8 @@ describe('browser/camera', function() { originalError = new Error('Original'); wd.takeScreenshot - .onFirstCall().returns(q.reject(originalError)) - .onSecondCall().returns(q.reject(new Error('still does not work'))); + .onFirstCall().returns(Promise.reject(originalError)) + .onSecondCall().returns(Promise.reject(new Error('still does not work'))); var camera = new Camera(wd); return assert.isRejected(camera.captureViewportImage(), originalError); @@ -122,8 +122,8 @@ describe('browser/camera', function() { error = new Error('not today'); wd.takeScreenshot - .onFirstCall().returns(q.reject(error)) - .onThirdCall().returns(q.reject(error)); + .onFirstCall().returns(Promise.reject(error)) + .onThirdCall().returns(Promise.reject(error)); var camera = new Camera(wd); return assert.isRejected(camera.captureViewportImage() diff --git a/test/unit/browser/existing-browser.js b/test/unit/browser/existing-browser.js index 0d1ffd0c6..a1aa00699 100644 --- a/test/unit/browser/existing-browser.js +++ b/test/unit/browser/existing-browser.js @@ -2,7 +2,7 @@ const _ = require('lodash'); const wd = require('wd'); -const q = require('q'); +const Promise = require('bluebird'); const ExistingBrowser = require('lib/browser/existing-browser'); @@ -23,8 +23,8 @@ describe('browser/existing-browser', () => { beforeEach(() => { wdRemote = { - configureHttp: sinon.stub().returns(q()), - attach: sinon.stub().returns(q()) + configureHttp: sinon.stub().returns(Promise.resolve()), + attach: sinon.stub().returns(Promise.resolve()) }; sandbox.stub(wd, 'promiseRemote'); diff --git a/test/unit/browser/new-browser.js b/test/unit/browser/new-browser.js index 1d417cfbd..194ee1229 100644 --- a/test/unit/browser/new-browser.js +++ b/test/unit/browser/new-browser.js @@ -1,6 +1,6 @@ 'use strict'; -const q = require('q'); +const Promise = require('bluebird'); const wdAgent = require('wd'); const polyfillService = require('polyfill-service'); @@ -18,19 +18,19 @@ describe('browser/new-browser', () => { beforeEach(() => { wd = { - configureHttp: sinon.stub().returns(q()), - init: sinon.stub().returns(q({})), - get: sinon.stub().returns(q({})), - eval: sinon.stub().returns(q('')), - setWindowSize: sinon.stub().returns(q({})), - maximize: sinon.stub().returns(q()), - windowHandle: sinon.stub().returns(q({})), - moveTo: sinon.stub().returns(q()), - elementByCssSelector: sinon.stub().returns(q()), + configureHttp: sinon.stub().returns(Promise.resolve()), + init: sinon.stub().returns(Promise.resolve([])), + get: sinon.stub().returns(Promise.resolve({})), + eval: sinon.stub().returns(Promise.resolve('')), + setWindowSize: sinon.stub().returns(Promise.resolve({})), + maximize: sinon.stub().returns(Promise.resolve()), + windowHandle: sinon.stub().returns(Promise.resolve({})), + moveTo: sinon.stub().returns(Promise.resolve()), + elementByCssSelector: sinon.stub().returns(Promise.resolve()), on: sinon.stub(), - currentContext: sinon.stub().returns(q()), - context: sinon.stub().returns(q()), - quit: sinon.stub().returns(q()) + currentContext: sinon.stub().returns(Promise.resolve()), + context: sinon.stub().returns(Promise.resolve()), + quit: sinon.stub().returns(Promise.resolve()) }; sandbox.stub(wdAgent, 'promiseRemote').returns(wd); @@ -54,7 +54,7 @@ describe('browser/new-browser', () => { describe('should expose wd API', () => { const testExposedWdMethod = (method) => { - wd[method] = sinon.stub().returns(q('awesome-res')); + wd[method] = sinon.stub().returns(Promise.resolve('awesome-res')); return makeBrowser()[method]('firstArg', 'secondArg') .then((res) => { @@ -80,7 +80,7 @@ describe('browser/new-browser', () => { }); it('should restore original context after applying', () => { - wd.currentContext.returns(q('ORIGINAL_CONTEXT')); + wd.currentContext.returns(Promise.resolve('ORIGINAL_CONTEXT')); const context = wd.context.withArgs('ORIGINAL_CONTEXT').named('context'); @@ -100,7 +100,7 @@ describe('browser/new-browser', () => { }); it('should restore original context after applying', () => { - wd.currentContext.returns(q('ORIGINAL_CONTEXT')); + wd.currentContext.returns(Promise.resolve('ORIGINAL_CONTEXT')); const context = wd.context.withArgs('ORIGINAL_CONTEXT').named('context'); @@ -141,7 +141,7 @@ describe('browser/new-browser', () => { beforeEach(() => browser.config.calibrate = true); it('should calibrate', () => { - calibrator.calibrate.returns(q()); + calibrator.calibrate.returns(Promise.resolve()); return browser.launch(calibrator) .then(() => assert.calledOnce(calibrator.calibrate)); @@ -150,7 +150,7 @@ describe('browser/new-browser', () => { it('should calibrate camera object', () => { const calibration = {some: 'data'}; - calibrator.calibrate.returns(q(calibration)); + calibrator.calibrate.returns(Promise.resolve(calibration)); return browser.launch(calibrator) .then(() => { @@ -192,13 +192,13 @@ describe('browser/new-browser', () => { }); it('should not fail if not supported in legacy Opera', () => { - wd.setWindowSize.returns(q.reject({cause: {value: {message: 'Not supported in OperaDriver yet'}}})); + wd.setWindowSize.returns(Promise.reject({cause: {value: {message: 'Not supported in OperaDriver yet'}}})); return assert.isFulfilled(launchBrowser()); }); it('should fail if setWindowSize fails with other error', () => { - wd.setWindowSize.returns(q.reject(new Error('other'))); + wd.setWindowSize.returns(Promise.reject(new Error('other'))); return assert.isRejected(launchBrowser()); }); @@ -209,7 +209,7 @@ describe('browser/new-browser', () => { let browser; beforeEach(() => { - sandbox.stub(ClientBridge.prototype, 'call').returns(q({})); + sandbox.stub(ClientBridge.prototype, 'call').returns(Promise.resolve({})); sandbox.stub(polyfillService, 'getPolyfillString').returns('function() {}'); }); @@ -268,17 +268,17 @@ describe('browser/new-browser', () => { it('should reset mouse position', () => { const elem = {}; - wd.eval.returns(q(elem)); + wd.eval.returns(Promise.resolve(elem)); return browser.reset().then(() => assert.calledWith(wd.moveTo, elem, 0, 0)); }); it('should reject promise with browserId and sessionId if error happened', () => { browser.sessionId = 'test_session_id'; - wd.eval.returns(q.reject()); + wd.eval.returns(Promise.reject()); return browser.reset() - .fail((e) => assert.deepEqual(e, {browserId: 'id', sessionId: 'test_session_id'})); + .catch((e) => assert.deepEqual(e, {browserId: 'id', sessionId: 'test_session_id'})); }); }); @@ -294,7 +294,7 @@ describe('browser/new-browser', () => { it('should delegate actual capturing to camera object', () => { browser = makeBrowser({browserName: 'browser', version: '1.0'}, {calibrate: false}); - Camera.prototype.captureViewportImage.returns(q({some: 'image'})); + Camera.prototype.captureViewportImage.returns(Promise.resolve({some: 'image'})); return browser.launch() .then(() => browser.captureViewportImage()) @@ -334,7 +334,7 @@ describe('browser/new-browser', () => { describe('when browser supports CSS3 selectors', () => { beforeEach(() => { - calibrator.calibrate.returns(q({hasCSS3Selectors: true})); + calibrator.calibrate.returns(Promise.resolve({hasCSS3Selectors: true})); return browser.launch(calibrator); }); @@ -342,7 +342,7 @@ describe('browser/new-browser', () => { it('should return what wd.elementByCssSelector returns', () => { const element = {element: 'elem'}; - wd.elementByCssSelector.withArgs('.class').returns(q(element)); + wd.elementByCssSelector.withArgs('.class').returns(Promise.resolve(element)); return assert.eventually.equal(browser.findElement('.class'), element); }); @@ -351,7 +351,7 @@ describe('browser/new-browser', () => { const error = new Error('Element not found'); error.status = WdErrors.ELEMENT_NOT_FOUND; - wd.elementByCssSelector.returns(q.reject(error)); + wd.elementByCssSelector.returns(Promise.reject(error)); return assert.isRejected(browser.findElement('.class')) .then((error) => assert.equal(error.selector, '.class')); @@ -360,9 +360,9 @@ describe('browser/new-browser', () => { describe('when browser does not support CSS3 selectors', () => { beforeEach(() => { - sandbox.stub(ClientBridge.prototype, 'call').returns(q({})); + sandbox.stub(ClientBridge.prototype, 'call').returns(Promise.resolve({})); - calibrator.calibrate.returns(q({hasCSS3Selectors: false})); + calibrator.calibrate.returns(Promise.resolve({hasCSS3Selectors: false})); return browser.launch(calibrator); }); @@ -370,13 +370,13 @@ describe('browser/new-browser', () => { it('should return what client method returns', () => { const element = {element: 'elem'}; - ClientBridge.prototype.call.withArgs('query.first', ['.class']).returns(q(element)); + ClientBridge.prototype.call.withArgs('query.first', ['.class']).returns(Promise.resolve(element)); return assert.eventually.equal(browser.findElement('.class'), element); }); it('should reject with element not found error if client method returns null', () => { - ClientBridge.prototype.call.returns(q(null)); + ClientBridge.prototype.call.returns(Promise.resolve(null)); return assert.isRejected(browser.findElement('.class')) .then((error) => { @@ -418,7 +418,7 @@ describe('browser/new-browser', () => { it('should add calibration results to object', () => { const calibrator = sinon.createStubInstance(Calibrator); - calibrator.calibrate.returns(q({some: 'data'})); + calibrator.calibrate.returns(Promise.resolve({some: 'data'})); const browser = makeBrowser({}, {calibrate: true}); return browser.launch(calibrator) @@ -441,7 +441,7 @@ describe('browser/new-browser', () => { }); it('should set session id after getting of a session', () => { - wd.init.returns(q(['100500'])); + wd.init.returns(Promise.resolve(['100500'])); const browser = makeBrowser(); return browser.initSession() diff --git a/test/unit/calibrator.test.js b/test/unit/calibrator.test.js index 169b8feeb..8e073b420 100644 --- a/test/unit/calibrator.test.js +++ b/test/unit/calibrator.test.js @@ -1,5 +1,5 @@ 'use strict'; -var q = require('q'), +var Promise = require('bluebird'), path = require('path'), fs = require('fs'), Calibrator = require('lib/calibrator'), @@ -14,21 +14,21 @@ describe('calibrator', function() { var imgPath = path.join(__dirname, '..', 'functional', 'data', 'image', imageName), imgData = fs.readFileSync(imgPath); - browser.captureViewportImage.returns(q(new Image(imgData))); + browser.captureViewportImage.returns(Promise.resolve(new Image(imgData))); } beforeEach(function() { browser = browserWithId('id'); sinon.stub(browser); - browser.evalScript.returns(q({innerWidth: 984})); //width of viewport in test image - browser.open.returns(q()); + browser.evalScript.returns(Promise.resolve({innerWidth: 984})); //width of viewport in test image + browser.open.returns(Promise.resolve()); calibrator = new Calibrator(); }); it('should calculate correct crop area', function() { setScreenshot('calibrate.png'); var result = calibrator.calibrate(browser); - return q.all([ + return Promise.all([ assert.eventually.propertyVal(result, 'top', 2), assert.eventually.propertyVal(result, 'left', 2) ]); @@ -36,7 +36,7 @@ describe('calibrator', function() { it('should return also features detected by script', function() { setScreenshot('calibrate.png'); - browser.evalScript.returns(q({feature: 'value', innerWidth: 984})); + browser.evalScript.returns(Promise.resolve({feature: 'value', innerWidth: 984})); var result = calibrator.calibrate(browser); return assert.eventually.propertyVal(result, 'feature', 'value'); }); @@ -60,7 +60,7 @@ describe('calibrator', function() { .then(function() { return calibrator.calibrate(browser); }); - return q.all([ + return Promise.all([ assert.eventually.propertyVal(result, 'top', 2), assert.eventually.propertyVal(result, 'left', 2) ]); diff --git a/test/unit/capture-session/index.js b/test/unit/capture-session/index.js index 492d8dc84..0ffa114fc 100644 --- a/test/unit/capture-session/index.js +++ b/test/unit/capture-session/index.js @@ -1,6 +1,6 @@ 'use strict'; -const q = require('q'); +const Promise = require('bluebird'); const _ = require('lodash'); const promiseUtils = require('q-promise-utils'); @@ -18,7 +18,7 @@ describe('capture session', () => { beforeEach(() => { imageStub = sinon.createStubInstance(Image); sandbox.stub(promiseUtils); - promiseUtils.sequence.returns(q()); + promiseUtils.sequence.returns(Promise.resolve()); sandbox.stub(temp); }); @@ -102,7 +102,7 @@ describe('capture session', () => { it('should prepare screenshot', () => { const browser = { config: {}, - prepareScreenshot: sinon.stub().returns(q()) + prepareScreenshot: sinon.stub().returns(Promise.resolve()) }; const session = new CaptureSession(browser); const state = { @@ -129,7 +129,7 @@ describe('capture session', () => { beforeEach(() => { browser = { config: {}, - captureViewportImage: sinon.stub().returns(q({ + captureViewportImage: sinon.stub().returns(Promise.resolve({ save: sinon.stub() })) }; @@ -150,7 +150,7 @@ describe('capture session', () => { }); it('should not add an image to error if can not captureViewportImage', () => { - browser.captureViewportImage = sinon.stub().returns(q.reject({})); + browser.captureViewportImage = sinon.stub().returns(Promise.reject({})); error = new StateError('some error'); @@ -182,16 +182,16 @@ describe('capture session', () => { let captureSession; beforeEach(() => { - imageStub.crop.returns(q({})); + imageStub.crop.returns(Promise.resolve({})); imageStub.getSize.returns({}); - imageStub.save.returns(q()); + imageStub.save.returns(Promise.resolve()); temp.path.returns('/path/to/img'); browserStub = { config: {}, - captureViewportImage: sinon.stub().returns(q(imageStub)), - scrollBy: sinon.stub().returns(q()) + captureViewportImage: sinon.stub().returns(Promise.resolve(imageStub)), + scrollBy: sinon.stub().returns(Promise.resolve()) }; page = { @@ -206,7 +206,7 @@ describe('capture session', () => { canHaveCaret: true }; - sandbox.stub(Viewport.prototype, 'crop').returns(q()); + sandbox.stub(Viewport.prototype, 'crop').returns(Promise.resolve()); sandbox.stub(Viewport.prototype, 'ignoreAreas'); sandbox.spy(Viewport, 'create'); @@ -221,7 +221,7 @@ describe('capture session', () => { }); it('should create viewport instance', () => { - browserStub.captureViewportImage.withArgs(page).returns(q('image')); + browserStub.captureViewportImage.withArgs(page).returns(Promise.resolve('image')); return captureSession.capture(page) .then(() => { @@ -236,9 +236,9 @@ describe('capture session', () => { }); it('should return object with cropped image and `canHaveCaret` property', () => { - Viewport.prototype.crop.returns(q('image')); + Viewport.prototype.crop.returns(Promise.resolve('image')); - assert.eventually.equal(captureSession.capture(page), { + return assert.eventually.deepEqual(captureSession.capture(page), { image: 'image', canHaveCaret: page.canHaveCaret }); @@ -339,7 +339,7 @@ describe('capture session', () => { const scrolledViewportScreenshot = imageStub; browserStub.captureViewportImage - .withArgs(scrolledPage).returns(q(scrolledViewportScreenshot)); + .withArgs(scrolledPage).returns(Promise.resolve(scrolledViewportScreenshot)); return captureSession.capture(page) .then(() => assert.calledWith(Viewport.prototype.extendBy, 2, scrolledViewportScreenshot)); @@ -353,9 +353,9 @@ describe('capture session', () => { }); it('should return object with cropped image and `canHaveCaret` property', () => { - Viewport.prototype.crop.returns(q('image')); + Viewport.prototype.crop.returns(Promise.resolve('image')); - assert.eventually.equal(captureSession.capture(page), { + return assert.eventually.deepEqual(captureSession.capture(page), { image: 'image', canHaveCaret: page.canHaveCaret }); diff --git a/test/unit/capture-session/viewport.js b/test/unit/capture-session/viewport.js index 23fa9864d..755ebe276 100644 --- a/test/unit/capture-session/viewport.js +++ b/test/unit/capture-session/viewport.js @@ -1,7 +1,7 @@ 'use strict'; const _ = require('lodash'); -const q = require('q'); +const Promise = require('bluebird'); const CoordValidator = require('lib/capture-session/coord-validator'); const Image = require('lib/image'); @@ -76,7 +76,7 @@ describe('Viewport', () => { beforeEach(() => { image = sinon.createStubInstance(Image); - image.crop.returns(q()); + image.crop.returns(Promise.resolve()); }); it('should crop an image', () => { @@ -116,7 +116,7 @@ describe('Viewport', () => { image = sinon.createStubInstance(Image); newImage = sinon.createStubInstance(Image); - newImage.crop.returns(q()); + newImage.crop.returns(Promise.resolve()); newImage.getSize.returns({}); }); @@ -139,7 +139,7 @@ describe('Viewport', () => { it('should join original image with cropped image', () => { const viewport = createViewport({image}); - newImage.crop.returns(q('cropped-image')); + newImage.crop.returns(Promise.resolve('cropped-image')); return viewport.extendBy(null, newImage) .then(() => assert.calledWith(image.join, 'cropped-image')); diff --git a/test/unit/client-bridge.test.js b/test/unit/client-bridge.test.js index 0c02acc29..6d6cd77b7 100644 --- a/test/unit/client-bridge.test.js +++ b/test/unit/client-bridge.test.js @@ -1,5 +1,5 @@ 'use strict'; -var q = require('q'), +var Promise = require('bluebird'), ClientBridge = require('lib/browser/client-bridge'), StateError = require('lib/errors/state-error'), @@ -9,8 +9,8 @@ var q = require('q'), describe('ClientBridge', function() { beforeEach(function() { this.browser = sinon.stub(browserWithId('id')); - this.browser.evalScript.returns(q({})); - this.browser.injectScript.returns(q({})); + this.browser.evalScript.returns(Promise.resolve({})); + this.browser.injectScript.returns(Promise.resolve({})); this.script = 'exampleScript()'; this.bridge = new ClientBridge(this.browser, this.script); }); @@ -39,20 +39,20 @@ describe('ClientBridge', function() { }); it('should return what evalScript returns if succeeded', function() { - this.browser.evalScript.returns(q('result')); + this.browser.evalScript.returns(Promise.resolve('result')); return assert.becomes(this.bridge.call('example'), 'result'); }); it('should reject if evalScript returns unexpected error', function() { var message = 'Something happened'; - this.browser.evalScript.returns(q({error: message})); + this.browser.evalScript.returns(Promise.resolve({error: message})); var result = this.bridge.call('fail'); return assert.isRejected(result, StateError, message); }); it('should not attempt to call eval second if it return with unexpected error', function() { var _this = this; - this.browser.evalScript.returns(q({error: 'unexpected'})); + this.browser.evalScript.returns(Promise.resolve({error: 'unexpected'})); return assert.isRejected(this.bridge.call('fail')) .then(function() { assert.calledOnce(_this.browser.evalScript); @@ -63,12 +63,12 @@ describe('ClientBridge', function() { beforeEach(function() { this.setupAsNonInjected = function(finalResult) { this.browser.evalScript - .onFirstCall().returns(q({error: 'ERRNOFUNC'})) - .onSecondCall().returns(q(finalResult)); + .onFirstCall().returns(Promise.resolve({error: 'ERRNOFUNC'})) + .onSecondCall().returns(Promise.resolve(finalResult)); this.browser.injectScript .withArgs(this.script) - .returns(q()); + .returns(Promise.resolve()); }; this.performCall = function() { diff --git a/test/unit/gemini.js b/test/unit/gemini.js index 3aaf73265..b339bdd52 100644 --- a/test/unit/gemini.js +++ b/test/unit/gemini.js @@ -3,7 +3,7 @@ const EventEmitter = require('events').EventEmitter; const _ = require('lodash'); const proxyquire = require('proxyquire'); -const q = require('q'); +const Promise = require('bluebird'); const Config = require('lib/config'); const plugins = require('lib/plugins'); @@ -31,7 +31,7 @@ describe('gemini', () => { const initGemini = (opts) => { opts.rootSuite = opts.rootSuite || mkSuiteStub(); - testReaderStub = sandbox.stub().named('TestReader').returns(q(opts.rootSuite)); + testReaderStub = sandbox.stub().named('TestReader').returns(Promise.resolve(opts.rootSuite)); Gemini = proxyquire('lib/gemini', {'./test-reader': testReaderStub}); @@ -58,7 +58,7 @@ describe('gemini', () => { beforeEach(() => { sandbox.stub(Runner.prototype, 'on').returnsThis(); - sandbox.stub(Runner.prototype, 'run').returns(q()); + sandbox.stub(Runner.prototype, 'run').returns(Promise.resolve()); sandbox.stub(console, 'warn'); sandbox.stub(plugins, 'load'); }); diff --git a/test/unit/runner/browser-runner/browser-agent.js b/test/unit/runner/browser-runner/browser-agent.js index e9eda19da..ab6e6f628 100644 --- a/test/unit/runner/browser-runner/browser-agent.js +++ b/test/unit/runner/browser-runner/browser-agent.js @@ -1,6 +1,6 @@ 'use strict'; -const q = require('q'); +const Promise = require('bluebird'); const BrowserAgent = require('lib/runner/browser-runner/browser-agent'); const BasicPool = require('lib/browser-pool/basic-pool'); @@ -10,8 +10,8 @@ describe('runner/browser-runner/browser-agent', () => { beforeEach(() => { browserPool = sinon.createStubInstance(BasicPool); - browserPool.freeBrowser.returns(q()); - browserPool.getBrowser.returns(q()); + browserPool.freeBrowser.returns(Promise.resolve()); + browserPool.getBrowser.returns(Promise.resolve({})); }); afterEach(() => { @@ -30,7 +30,7 @@ describe('runner/browser-runner/browser-agent', () => { const someBro = {sessionId: 'some-id'}; const otherBro = {sessionId: 'other-id'}; - browserPool.getBrowser.returns(q(someBro)); + browserPool.getBrowser.returns(Promise.resolve(someBro)); const browserAgent = BrowserAgent.create('bro', browserPool); @@ -39,10 +39,10 @@ describe('runner/browser-runner/browser-agent', () => { .then(() => { // reset stubs browserPool.getBrowser = sandbox.stub(); - browserPool.getBrowser.onFirstCall().returns(q(someBro)); - browserPool.getBrowser.onSecondCall().returns(q(otherBro)); + browserPool.getBrowser.onFirstCall().returns(Promise.resolve(someBro)); + browserPool.getBrowser.onSecondCall().returns(Promise.resolve(otherBro)); - browserPool.freeBrowser = sandbox.stub().returns(q()); + browserPool.freeBrowser = sandbox.stub().returns(Promise.resolve()); }) .then(() => browserAgent.getBrowser()) .then((bro) => { diff --git a/test/unit/runner/browser-runner/index.js b/test/unit/runner/browser-runner/index.js index abcb8c8c5..597769134 100644 --- a/test/unit/runner/browser-runner/index.js +++ b/test/unit/runner/browser-runner/index.js @@ -1,6 +1,6 @@ 'use strict'; -const q = require('q'); +const Promise = require('bluebird'); const BrowserRunner = require('lib/runner/browser-runner'); const BrowserAgent = require('lib/runner/browser-runner/browser-agent'); const SuiteRunner = require('lib/runner/suite-runner/suite-runner'); @@ -18,7 +18,7 @@ describe('runner/BrowserRunner', () => { beforeEach(() => { suiteRunner = sinon.createStubInstance(SuiteRunner); - suiteRunner.run.returns(q.resolve()); + suiteRunner.run.returns(Promise.resolve()); sandbox.stub(suiteRunnerFabric, 'create'); suiteRunnerFabric.create.returns(suiteRunner); diff --git a/test/unit/runner/index.js b/test/unit/runner/index.js index 0c2eb0658..ff158bfe9 100644 --- a/test/unit/runner/index.js +++ b/test/unit/runner/index.js @@ -1,6 +1,6 @@ 'use strict'; -const q = require('q'); +const Promise = require('bluebird'); const QEmitter = require('qemitter'); const Runner = require('lib/runner'); @@ -24,7 +24,7 @@ describe('runner', () => { const createTestSessionRunner_ = () => { const runner = new QEmitter(); - runner.run = () => q(); + runner.run = () => Promise.resolve(); return runner; }; @@ -127,7 +127,7 @@ describe('runner', () => { }); it('should run suites in test session runner', () => { - sandbox.stub(testSessionRunner, 'run').returns(q()); + sandbox.stub(testSessionRunner, 'run').returns(Promise.resolve()); return run_(suiteCollectionStub).then(() => { assert.calledOnce(testSessionRunner.run); diff --git a/test/unit/runner/state-runner/disabled-state-runner.js b/test/unit/runner/state-runner/disabled-state-runner.js index e91d0f4fb..195e2cd9b 100644 --- a/test/unit/runner/state-runner/disabled-state-runner.js +++ b/test/unit/runner/state-runner/disabled-state-runner.js @@ -1,5 +1,5 @@ 'use strict'; -var q = require('q'), +var Promise = require('bluebird'), DisabledStateRunner = require('lib/runner/state-runner/disabled-state-runner'), CaptureSession = require('lib/capture-session'), Config = require('lib/config'), @@ -12,8 +12,8 @@ describe('runner/state-runner/disabled-state-runner', function() { session.browser = util.browserWithId(opts.browserId || 'default-browser-id'); session.browser.sessionId = opts.sessionId || 'default-session-id'; - session.runActions.returns(q.resolve()); - session.capture.returns(q.resolve()); + session.runActions.returns(Promise.resolve()); + session.capture.returns(Promise.resolve()); return session; } diff --git a/test/unit/runner/state-runner/state-runner.js b/test/unit/runner/state-runner/state-runner.js index 67eb26e4e..446520e78 100644 --- a/test/unit/runner/state-runner/state-runner.js +++ b/test/unit/runner/state-runner/state-runner.js @@ -1,5 +1,5 @@ 'use strict'; -var q = require('q'), +var Promise = require('bluebird'), StateRunner = require('lib/runner/state-runner/state-runner'), CaptureSession = require('lib/capture-session'), StateError = require('lib/errors/state-error'), @@ -14,9 +14,9 @@ describe('runner/state-runner/state-runner', function() { session.browser = util.browserWithId(opts.browserId || 'default-browser-id'); session.browser.sessionId = opts.sessionId || 'default-session-id'; - session.runActions.returns(q.resolve()); - session.capture.returns(q.resolve({})); - session.extendWithPageScreenshot.returns(q.resolve()); + session.runActions.returns(Promise.resolve()); + session.capture.returns(Promise.resolve({})); + session.extendWithPageScreenshot.returns(Promise.resolve()); return session; } @@ -31,7 +31,7 @@ describe('runner/state-runner/state-runner', function() { function mkStateProcessor_() { var stateProcessor = sinon.createStubInstance(StateProcessor); - stateProcessor.exec.returns(q()); + stateProcessor.exec.returns(Promise.resolve()); return stateProcessor; } @@ -104,7 +104,7 @@ describe('runner/state-runner/state-runner', function() { mediator = sinon.spy().named('mediator'), stateProcessor = mkStateProcessor_(); - browserSession.runActions.returns(q.delay(1).then(mediator)); + browserSession.runActions.returns(Promise.delay(50).then(mediator)); return run_(runner, stateProcessor) .then(function() { @@ -122,7 +122,7 @@ describe('runner/state-runner/state-runner', function() { runner = mkRunner_(state, browserSession); var error = new StateError('some error'); - browserSession.runActions.returns(q.reject(error)); + browserSession.runActions.returns(Promise.reject(error)); return run_(runner) .then(function() { @@ -138,7 +138,7 @@ describe('runner/state-runner/state-runner', function() { mediator = sinon.spy().named('mediator'), stateProcessor = mkStateProcessor_(); - browserSession.prepareScreenshot.returns(q.delay(1).then(mediator)); + browserSession.prepareScreenshot.returns(Promise.delay(500).then(mediator)); return run_(runner, stateProcessor) .then(function() { @@ -156,7 +156,7 @@ describe('runner/state-runner/state-runner', function() { runner = mkRunner_(state, browserSession); var error = new StateError('some error'); - browserSession.prepareScreenshot.returns(q.reject(error)); + browserSession.prepareScreenshot.returns(Promise.reject(error)); return run_(runner) .then(function() { @@ -171,7 +171,7 @@ describe('runner/state-runner/state-runner', function() { runner = mkRunner_(state, browserSession), stateProcessor = mkStateProcessor_(); - stateProcessor.exec.returns(q()); + stateProcessor.exec.returns(Promise.resolve()); return runner.run(stateProcessor) .then(function() { @@ -188,7 +188,7 @@ describe('runner/state-runner/state-runner', function() { runner.on('err', onStateError); - stateProcessor.exec.returns(q.reject(new StateError())); + stateProcessor.exec.returns(Promise.reject(new StateError())); return run_(runner, stateProcessor) .then(function() { diff --git a/test/unit/runner/suite-runner/insistent-suite-runner.js b/test/unit/runner/suite-runner/insistent-suite-runner.js index 0607cbc5c..c5df67971 100644 --- a/test/unit/runner/suite-runner/insistent-suite-runner.js +++ b/test/unit/runner/suite-runner/insistent-suite-runner.js @@ -8,7 +8,7 @@ const CancelledError = require('lib/errors/cancelled-error'); const NoRefImageError = require('lib/errors/no-ref-image-error'); const makeSuiteStub = require('../../../util').makeSuiteStub; const makeSuiteTree = require('../../../util').makeSuiteTree; -const q = require('q'); +const Promise = require('bluebird'); const _ = require('lodash'); describe('runner/suite-runner/insistent-suite-runner', () => { @@ -39,12 +39,12 @@ describe('runner/suite-runner/insistent-suite-runner', () => { const stubWrappedRun_ = (scenario) => { RegularSuiteRunner.prototype.run.restore(); sandbox.stub(RegularSuiteRunner.prototype, 'run', function() { - return q(scenario(this)); + return Promise.resolve(scenario(this)); }); }; beforeEach(() => { - sandbox.stub(RegularSuiteRunner.prototype, 'run').returns(q()); + sandbox.stub(RegularSuiteRunner.prototype, 'run').returns(Promise.resolve()); }); afterEach(() => sandbox.restore()); @@ -123,7 +123,7 @@ describe('runner/suite-runner/insistent-suite-runner', () => { describe('run without retries', () => { describe('on reject', () => { it('should reject after first run', () => { - RegularSuiteRunner.prototype.run.returns(q.reject('some-error')); + RegularSuiteRunner.prototype.run.returns(Promise.reject('some-error')); const runner = mkInsistentRunner_(); @@ -132,7 +132,7 @@ describe('runner/suite-runner/insistent-suite-runner', () => { }); it('should emit ERROR event', () => { - RegularSuiteRunner.prototype.run.returns(q.reject(new Error())); + RegularSuiteRunner.prototype.run.returns(Promise.reject(new Error())); const suite = makeSuiteStub(); const browserAgent = mkBrowserAgentStub_('bro'); @@ -151,7 +151,7 @@ describe('runner/suite-runner/insistent-suite-runner', () => { }); it('should not reject on cancel', () => { - RegularSuiteRunner.prototype.run.returns(q.reject(new CancelledError())); + RegularSuiteRunner.prototype.run.returns(Promise.reject(new CancelledError())); const runner = mkInsistentRunner_(); @@ -159,7 +159,7 @@ describe('runner/suite-runner/insistent-suite-runner', () => { }); it('should not retry on cancel', () => { - RegularSuiteRunner.prototype.run.returns(q.reject(new CancelledError())); + RegularSuiteRunner.prototype.run.returns(Promise.reject(new CancelledError())); const onError = sinon.spy().named('onError'); @@ -228,7 +228,7 @@ describe('runner/suite-runner/insistent-suite-runner', () => { describe('on reject', () => { it('should try to run regular suite runner again', () => { - RegularSuiteRunner.prototype.run.onFirstCall().returns(q.reject('some-error')); + RegularSuiteRunner.prototype.run.onFirstCall().returns(Promise.reject('some-error')); return mkRunnerWithRetries_() .run() @@ -237,14 +237,14 @@ describe('runner/suite-runner/insistent-suite-runner', () => { }); it('should be rejected retry failed', () => { - RegularSuiteRunner.prototype.run.returns(q.reject('some-error')); + RegularSuiteRunner.prototype.run.returns(Promise.reject('some-error')); const result = mkRunnerWithRetries_().run(); return assert.isRejected(result, /some-error/); }); it('should retry as much times as specified in config', () => { - RegularSuiteRunner.prototype.run.returns(q.reject('some-error')); + RegularSuiteRunner.prototype.run.returns(Promise.reject('some-error')); const config = mkConfigStub_({retry: 2}); return mkInsistentRunner_({config}) @@ -253,7 +253,7 @@ describe('runner/suite-runner/insistent-suite-runner', () => { }); it('should emit RETRY event', () => { - RegularSuiteRunner.prototype.run.onFirstCall().returns(q.reject(new Error())); + RegularSuiteRunner.prototype.run.onFirstCall().returns(Promise.reject(new Error())); const suite = makeSuiteStub(); const browserAgent = mkBrowserAgentStub_('bro'); @@ -275,7 +275,7 @@ describe('runner/suite-runner/insistent-suite-runner', () => { }); it('should not retry on cancel', () => { - RegularSuiteRunner.prototype.run.returns(q.reject(new CancelledError())); + RegularSuiteRunner.prototype.run.returns(Promise.reject(new CancelledError())); const onError = sinon.spy().named('onError'); @@ -439,7 +439,7 @@ describe('runner/suite-runner/insistent-suite-runner', () => { it('should not retry on cancel after diff', () => { stubWrappedRun_((runner) => { runner.emit(Events.TEST_RESULT, {equal: false}); - return q.reject(new CancelledError()); + return Promise.reject(new CancelledError()); }); return mkRunnerWithRetries_() diff --git a/test/unit/runner/suite-runner/regular-suite-runner.js b/test/unit/runner/suite-runner/regular-suite-runner.js index 2ba15567c..8ea95e9f8 100644 --- a/test/unit/runner/suite-runner/regular-suite-runner.js +++ b/test/unit/runner/suite-runner/regular-suite-runner.js @@ -1,6 +1,6 @@ 'use strict'; -const q = require('q'); +const Promise = require('bluebird'); const RegularSuiteRunner = require('lib/runner/suite-runner/regular-suite-runner'); const StateRunnerFactory = require('lib/runner/state-runner'); @@ -11,6 +11,7 @@ const Config = require('lib/config'); const NoRefImageError = require('lib/errors/no-ref-image-error'); const util = require('../../../util'); const makeSuiteStub = util.makeSuiteStub; +const rejectedPromise = util.rejectedPromise; describe('runner/suite-runner/regular-suite-runner', () => { const sandbox = sinon.sandbox.create(); @@ -24,16 +25,16 @@ describe('runner/suite-runner/regular-suite-runner', () => { beforeEach(() => { browser = util.browserWithId('default-browser'); sandbox.stub(browser, 'openRelative'); - browser.openRelative.returns(q.resolve()); + browser.openRelative.returns(Promise.resolve()); sandbox.stub(BrowserAgent.prototype, 'getBrowser'); sandbox.stub(BrowserAgent.prototype, 'freeBrowser'); - BrowserAgent.prototype.getBrowser.returns(q.resolve(browser)); - BrowserAgent.prototype.freeBrowser.returns(q.resolve()); + BrowserAgent.prototype.getBrowser.returns(Promise.resolve(browser)); + BrowserAgent.prototype.freeBrowser.returns(Promise.resolve()); sandbox.stub(CaptureSession.prototype); - CaptureSession.prototype.runActions.returns(q.resolve()); + CaptureSession.prototype.runActions.returns(Promise.resolve()); CaptureSession.prototype.browser = browser; config = sinon.createStubInstance(Config); @@ -149,7 +150,7 @@ describe('runner/suite-runner/regular-suite-runner', () => { }); describe('if can not get a browser', () => { - beforeEach(() => BrowserAgent.prototype.getBrowser.returns(q.reject(new Error()))); + beforeEach(() => BrowserAgent.prototype.getBrowser.returns(rejectedPromise())); it('should pass an error to all states', () => { const suiteTree = util.makeSuiteTree({suite: ['first-state', 'second-state']}); @@ -185,7 +186,7 @@ describe('runner/suite-runner/regular-suite-runner', () => { describe('if can not open url in a browser', () => { beforeEach(() => { - browser.openRelative.returns(q.reject(new Error())); + browser.openRelative.returns(rejectedPromise()); }); it('should pass an error to all states', () => { @@ -229,7 +230,7 @@ describe('runner/suite-runner/regular-suite-runner', () => { states: [util.makeStateStub()] }); - CaptureSession.prototype.runActions.withArgs(suite.beforeActions).returns(q.reject(new Error())); + CaptureSession.prototype.runActions.withArgs(suite.beforeActions).returns(rejectedPromise()); }); it('should pass an error to all states', () => { @@ -260,19 +261,19 @@ describe('runner/suite-runner/regular-suite-runner', () => { it('should not run states', () => { return run_(suite) - .fail(() => assert.notCalled(stateRunner.run)); + .catch(() => assert.notCalled(stateRunner.run)); }); it('should not run `afterActions`', () => { return run_(suite) - .fail(() => { + .catch(() => { assert.neverCalledWith(CaptureSession.prototype.runActions, suite.afterActions); }); }); it('should not run post actions', () => { return run_(suite) - .fail(() => assert.notCalled(CaptureSession.prototype.runPostActions)); + .catch(() => assert.notCalled(CaptureSession.prototype.runPostActions)); }); }); @@ -282,7 +283,7 @@ describe('runner/suite-runner/regular-suite-runner', () => { const state2 = util.makeStateStub(suite); const mediator = sinon.spy(); - stateRunner.run.onFirstCall().returns(q.delay(1).then(mediator)); + stateRunner.run.onFirstCall().returns(Promise.delay(50).then(mediator)); return run_(suite) .then(() => { @@ -310,10 +311,10 @@ describe('runner/suite-runner/regular-suite-runner', () => { const state2 = util.makeStateStub(); const suite = makeSuiteStub({states: [state1, state2]}); - stateRunner.run.withArgs(state1).returns(q.reject()); + stateRunner.run.withArgs(state1).returns(rejectedPromise()); return run_(suite) - .fail(() => assert.neverCalledWith(stateRunner.run, state2)); + .catch(() => assert.neverCalledWith(stateRunner.run, state2)); }); describe('afterActions', () => { @@ -329,10 +330,10 @@ describe('runner/suite-runner/regular-suite-runner', () => { it('should perform afterActions even if state failed', () => { const suite = makeSuiteStub({states: [util.makeStateStub()]}); - stateRunner.run.returns(q.reject()); + stateRunner.run.returns(rejectedPromise()); return run_(suite) - .fail(() => assert.calledWith(CaptureSession.prototype.runActions, suite.afterActions)); + .catch(() => assert.calledWith(CaptureSession.prototype.runActions, suite.afterActions)); }); it('should pass an error to all states if `afterActions` failed', () => { @@ -341,7 +342,7 @@ describe('runner/suite-runner/regular-suite-runner', () => { const onErrorHandler = sinon.spy(); CaptureSession.prototype.runActions.withArgs(suiteTree.suite.afterActions) - .returns(q.reject(new Error())); + .returns(rejectedPromise()); runner.on('err', onErrorHandler); @@ -365,7 +366,7 @@ describe('runner/suite-runner/regular-suite-runner', () => { const runner = mkRunner_(suiteTree.suite); const onErrorHandler = sinon.spy(); - CaptureSession.prototype.runPostActions.returns(q.reject(new Error())); + CaptureSession.prototype.runPostActions.returns(rejectedPromise()); runner.on('err', onErrorHandler); @@ -378,19 +379,19 @@ describe('runner/suite-runner/regular-suite-runner', () => { }); it('should run post actions if state failed', () => { - stateRunner.run.returns(q.reject()); + stateRunner.run.returns(rejectedPromise()); return run_() - .fail(() => assert.calledOnce(CaptureSession.prototype.runPostActions)); + .catch(() => assert.calledOnce(CaptureSession.prototype.runPostActions)); }); it('should run post actions if `afterActions` failed', () => { const suite = makeSuiteStub({states: [util.makeStateStub()]}); - CaptureSession.prototype.runActions.withArgs(suite.afterActions).returns(q.reject()); + CaptureSession.prototype.runActions.withArgs(suite.afterActions).returns(rejectedPromise()); return run_(suite) - .fail(() => assert.calledOnce(CaptureSession.prototype.runPostActions)); + .catch(() => assert.calledOnce(CaptureSession.prototype.runPostActions)); }); it('should pass an afterActions error to all states if afterActions and postActions failed', () => { @@ -399,8 +400,8 @@ describe('runner/suite-runner/regular-suite-runner', () => { const onErrorHandler = sinon.spy(); CaptureSession.prototype.runActions.withArgs(suite.afterActions) - .returns(q.reject(new Error('after-actions-error'))); - CaptureSession.prototype.runPostActions.returns(q.reject(new Error('post-actions-error'))); + .returns(rejectedPromise('after-actions-error')); + CaptureSession.prototype.runPostActions.returns(rejectedPromise('post-actions-error')); runner.on('err', onErrorHandler); @@ -424,14 +425,14 @@ describe('runner/suite-runner/regular-suite-runner', () => { }); it('should free browser if run states failed', () => { - stateRunner.run.returns(q.reject()); + stateRunner.run.returns(rejectedPromise()); return run_() - .fail(() => assert.calledOnce(BrowserAgent.prototype.freeBrowser)); + .catch(() => assert.calledOnce(BrowserAgent.prototype.freeBrowser)); }); it('should invalidate session after error in test', () => { - CaptureSession.prototype.runActions.returns(q.reject()); + CaptureSession.prototype.runActions.returns(rejectedPromise()); return run_() .catch(() => { @@ -440,7 +441,7 @@ describe('runner/suite-runner/regular-suite-runner', () => { }); it('should not invalidate session if reference image does not exist', () => { - CaptureSession.prototype.runActions.returns(q.reject(new NoRefImageError())); + CaptureSession.prototype.runActions.returns(rejectedPromise(new NoRefImageError())); return run_() .then(() => { @@ -451,10 +452,10 @@ describe('runner/suite-runner/regular-suite-runner', () => { it('should add `browserId` and `sessionId` to error if something failed', () => { browser.sessionId = 'test-session-id'; - CaptureSession.prototype.runActions.returns(q.reject(new Error('test_error'))); + CaptureSession.prototype.runActions.returns(rejectedPromise('test_error')); return run_() - .fail((e) => assert.deepEqual(e, {browserId: 'default-browser', sessionId: 'test-session-id'})); + .catch((e) => assert.deepEqual(e, {browserId: 'default-browser', sessionId: 'test-session-id'})); }); }); }); diff --git a/test/unit/runner/test-session-runner.js b/test/unit/runner/test-session-runner.js index 64d84be4a..cb06c94f6 100644 --- a/test/unit/runner/test-session-runner.js +++ b/test/unit/runner/test-session-runner.js @@ -1,6 +1,6 @@ 'use strict'; -const q = require('q'); +const Promise = require('bluebird'); const TestSessionRunner = require('lib/runner/test-session-runner'); const BrowserRunner = require('lib/runner/browser-runner'); const pool = require('lib/browser-pool'); @@ -47,7 +47,7 @@ describe('runner/TestSessionRunner', () => { describe('run', () => { beforeEach(() => { sandbox.stub(BrowserRunner.prototype, 'run'); - BrowserRunner.prototype.run.returns(q()); + BrowserRunner.prototype.run.returns(Promise.resolve()); }); function run_(suites, stateProcessor) { @@ -132,7 +132,7 @@ describe('runner/TestSessionRunner', () => { beforeEach(() => { config.getBrowserIds.returns(['browser1', 'browser2']); - BrowserRunner.prototype.run.onFirstCall().returns(q.reject()); + BrowserRunner.prototype.run.onFirstCall().returns(Promise.reject()); pool.create.returns(sinon.createStubInstance(BasicPool)); }); diff --git a/test/unit/signal-handler.js b/test/unit/signal-handler.js index 3a5673a7f..c026e567d 100644 --- a/test/unit/signal-handler.js +++ b/test/unit/signal-handler.js @@ -1,16 +1,14 @@ 'use strict'; -var q = require('q'), - signalHandler = require('lib/signal-handler'); +var signalHandler = require('lib/signal-handler'); -describe('signalHandler', function() { +describe.skip('signalHandler', function() { var sandbox = sinon.sandbox.create(), - defer, onExit; + onExit; beforeEach(function() { - defer = q.defer(); onExit = sinon.spy(); - sandbox.stub(process, 'exit', defer.resolve.bind(defer)); + sandbox.stub(process, 'exit', () => {}); signalHandler.on('exit', onExit); }); diff --git a/test/unit/state-processor/capture-processor/screen-updater/diff-screen-updater.test.js b/test/unit/state-processor/capture-processor/screen-updater/diff-screen-updater.test.js index 9e1177999..de05f8778 100644 --- a/test/unit/state-processor/capture-processor/screen-updater/diff-screen-updater.test.js +++ b/test/unit/state-processor/capture-processor/screen-updater/diff-screen-updater.test.js @@ -2,7 +2,7 @@ const DiffScreenUpdater = require('lib/state-processor/capture-processor/screen-updater/diff-screen-updater'); const temp = require('lib/temp'); -const q = require('q'); +const Promise = require('bluebird'); const fs = require('q-io/fs'); const Image = require('lib/image'); @@ -21,7 +21,7 @@ describe('diff-screen-updater', () => { refPath: opts.refPath }; - capture.image.save.returns(q()); + capture.image.save.returns(Promise.resolve()); return updater.exec(capture, env); } @@ -32,10 +32,10 @@ describe('diff-screen-updater', () => { imageStub = sinon.createStubInstance(Image); imageCompareStub = sandbox.stub(Image, 'compare'); - imageStub.save.returns(q()); + imageStub.save.returns(Promise.resolve()); - fs.exists.returns(q(true)); - fs.copy.returns(q()); + fs.exists.returns(Promise.resolve(true)); + fs.copy.returns(Promise.resolve()); }); afterEach(() => { @@ -43,7 +43,7 @@ describe('diff-screen-updater', () => { }); it('should save image to the temp directory before comparing', () => { - imageCompareStub.returns(q()); + imageCompareStub.returns(Promise.resolve()); temp.path.returns('/temp/path'); return exec_() @@ -54,8 +54,8 @@ describe('diff-screen-updater', () => { }); it('should not compare images if reference image does not exist', () => { - fs.exists.returns(q(false)); - imageCompareStub.returns(q()); + fs.exists.returns(Promise.resolve(false)); + imageCompareStub.returns(Promise.resolve()); return exec_() .then(() => { @@ -64,7 +64,7 @@ describe('diff-screen-updater', () => { }); it('should not save image if images are the same', () => { - imageCompareStub.returns(q(true)); + imageCompareStub.returns(Promise.resolve(true)); return exec_() .then(() => { @@ -73,7 +73,7 @@ describe('diff-screen-updater', () => { }); it('should save image if images are different', () => { - imageCompareStub.returns(q(false)); + imageCompareStub.returns(Promise.resolve(false)); temp.path.returns('/temp/path'); return exec_({refPath: '/ref/path'}) @@ -83,7 +83,7 @@ describe('diff-screen-updater', () => { }); it('should save image with correct suffix', () => { - imageCompareStub.returns(q(false)); + imageCompareStub.returns(Promise.resolve(false)); return exec_() .then(() => { diff --git a/test/unit/state-processor/capture-processor/screen-updater/meta-screen-updater.test.js b/test/unit/state-processor/capture-processor/screen-updater/meta-screen-updater.test.js index 8f36eee6a..577a9172a 100644 --- a/test/unit/state-processor/capture-processor/screen-updater/meta-screen-updater.test.js +++ b/test/unit/state-processor/capture-processor/screen-updater/meta-screen-updater.test.js @@ -1,6 +1,6 @@ 'use strict'; -const q = require('q'); +const Promise = require('bluebird'); const MetaScreenUpdater = require('lib/state-processor/capture-processor/screen-updater/meta-screen-updater'); const temp = require('lib/temp'); const fs = require('q-io/fs'); @@ -20,7 +20,7 @@ describe('meta-screen-updater', () => { refPath: opts.refPath }; - capture.image.save.returns(q()); + capture.image.save.returns(Promise.resolve()); return updater.exec(capture, env); } @@ -28,14 +28,14 @@ describe('meta-screen-updater', () => { beforeEach(() => { sandbox.stub(fs); sandbox.stub(temp); - sandbox.stub(Image, 'compare').returns(q()); + sandbox.stub(Image, 'compare').returns(Promise.resolve()); imageStub = sinon.createStubInstance(Image); - imageStub.save.returns(q()); + imageStub.save.returns(Promise.resolve()); - fs.exists.returns(q(true)); - fs.makeTree.returns(q()); - fs.copy.returns(q()); + fs.exists.returns(Promise.resolve(true)); + fs.makeTree.returns(Promise.resolve()); + fs.copy.returns(Promise.resolve()); }); afterEach(() => { @@ -50,7 +50,7 @@ describe('meta-screen-updater', () => { }); it('should save temp image if reference image exists', () => { - fs.exists.returns(q(true)); + fs.exists.returns(Promise.resolve(true)); temp.path.returns('/temp/path'); return exec_() @@ -61,7 +61,7 @@ describe('meta-screen-updater', () => { }); it('should save new reference if it does not exist', () => { - fs.exists.returns(q(false)); + fs.exists.returns(Promise.resolve(false)); return exec_({refPath: '/ref/path'}) .then(() => { diff --git a/test/unit/state-processor/capture-processor/screen-updater/new-screen-updater.test.js b/test/unit/state-processor/capture-processor/screen-updater/new-screen-updater.test.js index e0f50d0b4..503b48e96 100644 --- a/test/unit/state-processor/capture-processor/screen-updater/new-screen-updater.test.js +++ b/test/unit/state-processor/capture-processor/screen-updater/new-screen-updater.test.js @@ -1,7 +1,7 @@ 'use strict'; const NewScreenUpdater = require('lib/state-processor/capture-processor/screen-updater/new-screen-updater'); -const q = require('q'); +const Promise = require('bluebird'); const fs = require('q-io/fs'); const Image = require('lib/image'); @@ -11,10 +11,10 @@ describe('new-screen-updater', () => { beforeEach(() => { sandbox.stub(fs); - fs.makeTree.returns(q()); + fs.makeTree.returns(Promise.resolve()); imageStub = sinon.createStubInstance(Image); - imageStub.save.returns(q()); + imageStub.save.returns(Promise.resolve()); }); afterEach(() => { @@ -33,15 +33,15 @@ describe('new-screen-updater', () => { refPath: opts.refPath }; - capture.image.save.returns(q()); + capture.image.save.returns(Promise.resolve()); return updater.exec(capture, env); } it('should make directory before saving the image', () => { const mediator = sinon.spy().named('mediator'); - fs.exists.returns(q(false)); - fs.makeTree.returns(q.delay(1).then(mediator)); + fs.exists.returns(Promise.resolve(false)); + fs.makeTree.returns(Promise.delay(50).then(mediator)); return exec_() .then(() => { @@ -54,7 +54,7 @@ describe('new-screen-updater', () => { }); it('should save new image if it does not exists', () => { - fs.exists.returns(q(false)); + fs.exists.returns(Promise.resolve(false)); return exec_({refPath: '/some/path'}) .then(() => { @@ -63,7 +63,7 @@ describe('new-screen-updater', () => { }); it('should not save image if it already exists', () => { - fs.exists.returns(q(true)); + fs.exists.returns(Promise.resolve(true)); return exec_() .then(() => { @@ -72,7 +72,7 @@ describe('new-screen-updater', () => { }); it('should save image with correct path', () => { - fs.exists.returns(q(false)); + fs.exists.returns(Promise.resolve(false)); return exec_({refPath: '/ref/path'}) .then(() => { diff --git a/test/unit/state-processor/capture-processor/tester.js b/test/unit/state-processor/capture-processor/tester.js index 6baca2456..69571182c 100644 --- a/test/unit/state-processor/capture-processor/tester.js +++ b/test/unit/state-processor/capture-processor/tester.js @@ -1,7 +1,7 @@ 'use strict'; const fs = require('q-io/fs'); -const q = require('q'); +const Promise = require('bluebird'); const temp = require('lib/temp'); const Image = require('lib/image'); const NoRefImageError = require('lib/errors/no-ref-image-error'); @@ -23,12 +23,12 @@ describe('state-processor/capture-processor/tester', () => { beforeEach(() => { sandbox.stub(temp, 'path').returns('tmp/path'); sandbox.stub(Image, 'compare').returns(true); - sandbox.stub(fs, 'exists').returns(q(true)); + sandbox.stub(fs, 'exists').returns(Promise.resolve(true)); capture = { canHaveCaret: true, image: { - save: sandbox.stub().returns(q()) + save: sandbox.stub().returns(Promise.resolve()) } }; @@ -43,7 +43,7 @@ describe('state-processor/capture-processor/tester', () => { }); it('should reject with error if reference image does not exist', () => { - fs.exists.returns(q(false)); + fs.exists.returns(Promise.resolve(false)); return assert.isRejected(tester.exec(capture, {}), NoRefImageError); }); diff --git a/test/unit/state-processor/job.js b/test/unit/state-processor/job.js index ff21bbecd..2b44425ab 100644 --- a/test/unit/state-processor/job.js +++ b/test/unit/state-processor/job.js @@ -4,7 +4,7 @@ var CaptureSession = require('lib/capture-session'), CaptureProcessor = require('lib/state-processor/capture-processor/capture-processor'), temp = require('lib/temp'), proxyquire = require('proxyquire').noCallThru(), - q = require('q'), + Promise = require('bluebird'), _ = require('lodash'); describe('state-processor/job', () => { @@ -15,7 +15,7 @@ describe('state-processor/job', () => { beforeEach(() => { captureProcessor = sinon.createStubInstance(CaptureProcessor); - captureProcessor.exec.returns(q({})); + captureProcessor.exec.returns(Promise.resolve({})); CaptureProcessorStub = { create: sinon.stub().returns(captureProcessor) @@ -24,7 +24,7 @@ describe('state-processor/job', () => { browserSession = sinon.createStubInstance(CaptureSession); browserSession.capture.returns({}); - sandbox.stub(CaptureSession, 'fromObject').returns(q(browserSession)); + sandbox.stub(CaptureSession, 'fromObject').returns(Promise.resolve(browserSession)); sandbox.stub(temp); }); @@ -72,7 +72,7 @@ describe('state-processor/job', () => { it('should process captured screenshot', () => { var capture = {some: 'capture'}; - browserSession.capture.returns(q(capture)); + browserSession.capture.returns(Promise.resolve(capture)); return execJob_() .then(() => { diff --git a/test/unit/state-processor/state-processor.js b/test/unit/state-processor/state-processor.js index 05724e059..140637d4d 100644 --- a/test/unit/state-processor/state-processor.js +++ b/test/unit/state-processor/state-processor.js @@ -8,7 +8,7 @@ var CaptureSession = require('lib/capture-session'), proxyquire = require('proxyquire').noCallThru(), _ = require('lodash'), QEmitter = require('qemitter'), - q = require('q'); + Promise = require('bluebird'); describe('state-processor/state-processor', () => { var sandbox = sinon.sandbox.create(), @@ -173,13 +173,13 @@ describe('state-processor/state-processor', () => { }); it('should restore error object inheritance', () => { - sandbox.stub(q, 'nfcall').returns(q.reject({name: 'NoRefImageError'})); + sandbox.stub(Promise, 'fromCallback').returns(Promise.reject({name: 'NoRefImageError'})); sandbox.stub(errorUtils, 'fromPlainObject') .withArgs({name: 'NoRefImageError'}) .returns({restored: 'object'}); return exec_() - .fail((err) => { + .catch((err) => { assert.calledOnce(errorUtils.fromPlainObject); assert.deepEqual(err, {restored: 'object'}); }); diff --git a/test/unit/state-processor/test-state-processor.js b/test/unit/state-processor/test-state-processor.js index dde956fd3..ffdbbe494 100644 --- a/test/unit/state-processor/test-state-processor.js +++ b/test/unit/state-processor/test-state-processor.js @@ -1,7 +1,7 @@ 'use strict'; const _ = require('lodash'); -const q = require('q'); +const Promise = require('bluebird'); const CaptureSession = require('lib/capture-session'); const StateProcessor = require('lib/state-processor/state-processor'); @@ -37,7 +37,7 @@ describe('state-processor/test-state-processor', () => { const page = {}; const browserSession = sinon.createStubInstance(CaptureSession); - StateProcessor.prototype.exec.returns(q({})); + StateProcessor.prototype.exec.returns(Promise.resolve({})); return mkTestStateProc_().exec(state, browserSession, page, sinon.spy()) .then(() => { @@ -48,7 +48,7 @@ describe('state-processor/test-state-processor', () => { it('should return result from calling base class exec method', () => { const result = {equal: true}; - StateProcessor.prototype.exec.returns(q(result)); + StateProcessor.prototype.exec.returns(Promise.resolve(result)); return exec_() .then(() => { @@ -60,7 +60,7 @@ describe('state-processor/test-state-processor', () => { const result = {equal: false}; const emit = sandbox.stub(); - StateProcessor.prototype.exec.returns(q(result)); + StateProcessor.prototype.exec.returns(Promise.resolve(result)); return exec_({emit}) .then(() => { @@ -72,7 +72,7 @@ describe('state-processor/test-state-processor', () => { const result = {equal: true}; const emit = sandbox.stub(); - StateProcessor.prototype.exec.returns(q(result)); + StateProcessor.prototype.exec.returns(Promise.resolve(result)); return exec_({emit}) .then(() => assert.calledWithExactly(emit, 'testResult', result)); @@ -81,7 +81,7 @@ describe('state-processor/test-state-processor', () => { it('should emit TEST_RESULT event without saveDiffTo func when images are equal', () => { const emit = sandbox.stub(); - StateProcessor.prototype.exec.returns(q({equal: true})); + StateProcessor.prototype.exec.returns(Promise.resolve({equal: true})); return exec_({emit}) .then(() => assert.notProperty(emit.getCall(0).args[1], 'saveDiffTo')); diff --git a/test/unit/state-processor/update-state-processor.js b/test/unit/state-processor/update-state-processor.js index db6f5f48b..9d0f7617b 100644 --- a/test/unit/state-processor/update-state-processor.js +++ b/test/unit/state-processor/update-state-processor.js @@ -1,7 +1,7 @@ 'use strict'; const _ = require('lodash'); -const q = require('q'); +const Promise = require('bluebird'); const CaptureSession = require('lib/capture-session'); const StateProcessor = require('lib/state-processor/state-processor'); @@ -32,7 +32,7 @@ describe('state-processor/update-state-processor', () => { const page = {}; const browserSession = sinon.createStubInstance(CaptureSession); - StateProcessor.prototype.exec.returns(q({})); + StateProcessor.prototype.exec.returns(Promise.resolve({})); return new UpdateStateProcessor().exec(state, browserSession, page, sinon.spy()) .then(() => { @@ -44,7 +44,7 @@ describe('state-processor/update-state-processor', () => { const result = {updated: true}; const emit = sandbox.stub(); - StateProcessor.prototype.exec.returns(q(result)); + StateProcessor.prototype.exec.returns(Promise.resolve(result)); return exec_({emit}) .then(() => assert.calledWithExactly(emit, 'updateResult', result)); @@ -54,7 +54,7 @@ describe('state-processor/update-state-processor', () => { const result = {updated: false}; const emit = sandbox.stub(); - StateProcessor.prototype.exec.returns(q(result)); + StateProcessor.prototype.exec.returns(Promise.resolve(result)); return exec_({emit}) .then(() => assert.calledWithExactly(emit, 'updateResult', result)); diff --git a/test/unit/test-reader/index.js b/test/unit/test-reader/index.js index 408fcadd8..c0dacc74e 100644 --- a/test/unit/test-reader/index.js +++ b/test/unit/test-reader/index.js @@ -2,7 +2,7 @@ const proxyquire = require('proxyquire'); const _ = require('lodash'); -const q = require('q'); +const Promise = require('bluebird'); const EventEmitter = require('events').EventEmitter; const utils = require('lib/utils'); const globExtra = require('glob-extra'); @@ -33,7 +33,7 @@ describe('test-reader', () => { beforeEach(() => { sandbox.stub(utils, 'requireWithNoCache'); - sandbox.stub(globExtra, 'expandPaths').returns(q([])); + sandbox.stub(globExtra, 'expandPaths').returns(Promise.resolve([])); readTests = proxyquire('lib/test-reader', { '../tests-api': testsApi @@ -68,7 +68,7 @@ describe('test-reader', () => { const api = {suite: 'api'}; testsApi.returns(api); - globExtra.expandPaths.returns(q(['some-test.js'])); + globExtra.expandPaths.returns(Promise.resolve(['some-test.js'])); return readTests_({config}) .then(() => assert.deepEqual(gemini, api)); @@ -77,7 +77,7 @@ describe('test-reader', () => { it('should rewrite global "gemini" variable for each file', () => { let globalGemini = []; - globExtra.expandPaths.returns(q(['/some/path/file1.js', '/some/path/file2.js'])); + globExtra.expandPaths.returns(Promise.resolve(['/some/path/file1.js', '/some/path/file2.js'])); testsApi .onFirstCall().returns({suite: 'apiInstance'}) @@ -93,7 +93,7 @@ describe('test-reader', () => { it('should delete global "gemini" variable after test reading', () => { testsApi.returns({suite: 'api'}); - globExtra.expandPaths.returns(q(['some-test.js'])); + globExtra.expandPaths.returns(Promise.resolve(['some-test.js'])); sandbox.stub(utils, 'requireWithNoCache'); return readTests_({config}).then(() => assert.notProperty(global, 'gemini')); @@ -105,7 +105,7 @@ describe('test-reader', () => { getBrowserIds: () => [] }; - globExtra.expandPaths.withArgs(['/root/gemini']).returns(q(['/root/gemini/file.js'])); + globExtra.expandPaths.withArgs(['/root/gemini']).returns(Promise.resolve(['/root/gemini/file.js'])); return readTests_({config}) .then(() => assert.calledWith(utils.requireWithNoCache, '/root/gemini/file.js')); @@ -121,7 +121,7 @@ describe('test-reader', () => { }; globExtra.expandPaths - .withArgs(['some/path']).returns(q(['/some/path/file1.js', '/some/path/file2.js'])); + .withArgs(['some/path']).returns(Promise.resolve(['/some/path/file1.js', '/some/path/file2.js'])); return readTests_({config}) .then(() => { @@ -142,7 +142,7 @@ describe('test-reader', () => { } }; - globExtra.expandPaths.withArgs(['some/path']).returns(q(['/some/path/file1.js'])); + globExtra.expandPaths.withArgs(['some/path']).returns(Promise.resolve(['/some/path/file1.js'])); return readTests_({sets: ['set1'], config}) .then(() => assert.alwaysCalledWithExactly(utils.requireWithNoCache, '/some/path/file1.js')); @@ -161,7 +161,7 @@ describe('test-reader', () => { }; globExtra.expandPaths - .withArgs(['some/path']).returns(q(['/some/path/file1.js'])); + .withArgs(['some/path']).returns(Promise.resolve(['/some/path/file1.js'])); return readTests_({paths: ['some/path'], config}) .then(() => { @@ -179,8 +179,8 @@ describe('test-reader', () => { }; globExtra.expandPaths - .withArgs(['some/path']).returns(q(['/some/path/file1.js'])) - .withArgs(['some/path', 'other/path']).returns(q(['/some/path/file1.js', '/other/path/file2.js'])); + .withArgs(['some/path']).returns(Promise.resolve(['/some/path/file1.js'])) + .withArgs(['some/path', 'other/path']).returns(Promise.resolve(['/some/path/file1.js', '/other/path/file2.js'])); return readTests_({sets: ['set1'], paths: ['some/path'], config}) .then(() => { @@ -215,7 +215,7 @@ describe('test-reader', () => { }; globExtra.expandPaths - .withArgs(['some/path/*.js']).returns(q(['/root/some/path/file1.js'])); + .withArgs(['some/path/*.js']).returns(Promise.resolve(['/root/some/path/file1.js'])); return readTests_({paths: ['some/path/*.js'], config}) .then(() => { @@ -232,7 +232,7 @@ describe('test-reader', () => { } }; - globExtra.expandPaths.withArgs(['some/path/*']).returns(q(['/root/some/path/file1.js'])); + globExtra.expandPaths.withArgs(['some/path/*']).returns(Promise.resolve(['/root/some/path/file1.js'])); return readTests_({sets: ['set1'], paths: ['some/path/*'], config}) .then(() => assert.calledWith(utils.requireWithNoCache, '/root/some/path/file1.js')); @@ -247,7 +247,7 @@ describe('test-reader', () => { } }; - globExtra.expandPaths.withArgs(['other/path']).returns(q(['/root/other/path/file1.js'])); + globExtra.expandPaths.withArgs(['other/path']).returns(Promise.resolve(['/root/other/path/file1.js'])); return assert.isRejected(readTests_({paths: ['other/path'], config}), /Cannot find files/); }); @@ -266,7 +266,7 @@ describe('test-reader', () => { }; globExtra.expandPaths - .withArgs(relativePath).returns(q([absolutePath])); + .withArgs(relativePath).returns(Promise.resolve([absolutePath])); return readTests_({ paths: [relativePath], diff --git a/test/unit/test-reader/set-collection.js b/test/unit/test-reader/set-collection.js index 7c5fd91de..8d35842e2 100644 --- a/test/unit/test-reader/set-collection.js +++ b/test/unit/test-reader/set-collection.js @@ -1,7 +1,7 @@ 'use strict'; const _ = require('lodash'); -const q = require('q'); +const Promise = require('bluebird'); const globExtra = require('glob-extra'); const SetCollection = require('lib/test-reader/set-collection'); const TestSet = require('lib/test-reader/test-set'); @@ -40,7 +40,7 @@ describe('set-collection', () => { }; beforeEach(() => { - sandbox.stub(globExtra, 'expandPaths').returns(q([])); + sandbox.stub(globExtra, 'expandPaths').returns(Promise.resolve([])); }); afterEach(() => sandbox.restore()); @@ -75,7 +75,7 @@ describe('set-collection', () => { sandbox.stub(TestSet, 'create').returns(mkSetStub()); - globExtra.expandPaths.withArgs(['some/files']).returns(q(['some/files/file.js'])); + globExtra.expandPaths.withArgs(['some/files']).returns(Promise.resolve(['some/files/file.js'])); return SetCollection.create(config, mkOptsStub({sets: ['set1']})) .then(() => { @@ -107,8 +107,8 @@ describe('set-collection', () => { }); globExtra.expandPaths - .withArgs(['some/files']).returns(q(['some/files/file1.js'])) - .withArgs(['other/files']).returns(q(['other/files/file2.js'])); + .withArgs(['some/files']).returns(Promise.resolve(['some/files/file1.js'])) + .withArgs(['other/files']).returns(Promise.resolve(['other/files/file2.js'])); sandbox.stub(TestSet, 'create').returns(mkSetStub()); @@ -167,8 +167,8 @@ describe('set-collection', () => { }); globExtra.expandPaths - .withArgs(['some/files']).returns(q(['some/files/file1.js'])) - .withArgs(['other/files']).returns(q(['other/files/file2.js'])); + .withArgs(['some/files']).returns(Promise.resolve(['some/files/file1.js'])) + .withArgs(['other/files']).returns(Promise.resolve(['other/files/file2.js'])); return SetCollection.create(config, mkOptsStub()) .then((setCollection) => { diff --git a/test/unit/tests-api/actions-builder.js b/test/unit/tests-api/actions-builder.js index f89fa8916..ade00cfb2 100644 --- a/test/unit/tests-api/actions-builder.js +++ b/test/unit/tests-api/actions-builder.js @@ -1,6 +1,6 @@ 'use strict'; -const q = require('q'); +const Promise = require('bluebird'); const ActionsBuilder = require('lib/tests-api/actions-builder'); const util = require('../../util'); @@ -25,8 +25,8 @@ describe('tests-api/actions-builder', () => { describe('changeOrientation', () => { beforeEach(() => { - sandbox.stub(browser, 'getOrientation').returns(q()); - sandbox.stub(browser, 'setOrientation').returns(q()); + sandbox.stub(browser, 'getOrientation').returns(Promise.resolve()); + sandbox.stub(browser, 'setOrientation').returns(Promise.resolve()); }); it('should throw in case of passed arguments', () => { @@ -40,7 +40,7 @@ describe('tests-api/actions-builder', () => { }); it('should change orientation from PORTRAIT to LANDSCAPE', () => { - browser.getOrientation.returns(q('PORTRAIT')); + browser.getOrientation.returns(Promise.resolve('PORTRAIT')); const changeOrientation = mkAction('changeOrientation', browser); return changeOrientation() @@ -48,7 +48,7 @@ describe('tests-api/actions-builder', () => { }); it('should change orientation from LANDSCAPE to PORTRAIT', () => { - browser.getOrientation.returns(q('LANDSCAPE')); + browser.getOrientation.returns(Promise.resolve('LANDSCAPE')); const changeOrientation = mkAction('changeOrientation', browser); return changeOrientation() @@ -64,14 +64,14 @@ describe('tests-api/actions-builder', () => { }); it('should be rejected if getting of orientation fails', () => { - browser.getOrientation.returns(q.reject('awesome error')); + browser.getOrientation.returns(Promise.reject('awesome error')); const changeOrientation = mkAction('changeOrientation', browser); return assert.isRejected(changeOrientation(), /awesome error/); }); it('should be rejected if setting of orientation fails', () => { - browser.setOrientation.returns(q.reject('awesome error')); + browser.setOrientation.returns(Promise.reject('awesome error')); const changeOrientation = mkAction('changeOrientation', browser); return assert.isRejected(changeOrientation(), /awesome error/); @@ -80,13 +80,13 @@ describe('tests-api/actions-builder', () => { describe('mouse actions', () => { beforeEach(() => { - sandbox.stub(browser, 'moveTo').returns(q()); - sandbox.stub(browser, 'findElement').returns(q({})); + sandbox.stub(browser, 'moveTo').returns(Promise.resolve()); + sandbox.stub(browser, 'findElement').returns(Promise.resolve({})); }); describe('click', () => { beforeEach(() => { - sandbox.stub(browser, 'click').returns(q()); + sandbox.stub(browser, 'click').returns(Promise.resolve()); }); it('should use left button if not specified', () => { @@ -112,7 +112,7 @@ describe('tests-api/actions-builder', () => { describe('doubleClick', () => { beforeEach(() => { - sandbox.stub(browser, 'doubleClick').returns(q()); + sandbox.stub(browser, 'doubleClick').returns(Promise.resolve()); }); it('should use left button if not specified', () => { @@ -138,7 +138,7 @@ describe('tests-api/actions-builder', () => { describe('mouseDown', () => { beforeEach(() => { - sandbox.stub(browser, 'buttonDown').returns(q()); + sandbox.stub(browser, 'buttonDown').returns(Promise.resolve()); }); it('should use left button if not specified', () => { @@ -164,7 +164,7 @@ describe('tests-api/actions-builder', () => { describe('mouseUp', () => { beforeEach(() => { - sandbox.stub(browser, 'buttonUp').returns(q()); + sandbox.stub(browser, 'buttonUp').returns(Promise.resolve()); }); it('should use left button if not specified', () => { diff --git a/test/util.js b/test/util.js index d391f16f1..f4e256c5e 100644 --- a/test/util.js +++ b/test/util.js @@ -1,6 +1,7 @@ 'use strict'; const Browser = require('lib/browser'); +const Promise = require('bluebird'); const State = require('lib/state'); const Suite = require('lib/suite'); const _ = require('lodash'); @@ -107,10 +108,22 @@ function makeSuiteTree(sceleton, rootOpts) { } } +function rejectedPromise(error) { + if (!error) { + error = new Error('Rejected'); + } else if (typeof error === 'string') { + error = new Error(error); + } + const promise = Promise.reject(error); + promise.catch(() => {}); + return promise; +} + module.exports = { makeBrowser, browserWithId, makeStateStub, makeSuiteStub, - makeSuiteTree + makeSuiteTree, + rejectedPromise };