12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- var wd = require('wd');
- var http = require("http");
- var https = require("https");
- var url = require("url");
- var path = require("path");
- var Promise = require('bluebird');
- var _ = require('lodash');
- var humanizeDuration = require("humanize-duration");
- var utils = require('../utils');
- var colors = utils.colors;
- var port = 8080;
- function runTestWithRetries(browser, test, retries) {
- retries = retries || 0;
- return runTest(browser, test)
- .timeout(30000)
- .catch(Promise.TimeoutError, function() {
- if (retries < 3) {
- console.log(colors.violet, "Retry", (retries + 1), test);
- return runTestWithRetries(browser, test, retries + 1);
- } else {
- throw new Error("Couldn't run test after 3 retries");
- }
- });
- }
- function getResults(browser) {
- return function() {
- return Promise.props({
- dataUrl: browser.waitForElementByCss("body[data-complete='true']", 90000).then(function() {
- return browser.elementsByCssSelector('.test.fail');
- }).then(function(nodes) {
- return Array.isArray(nodes) ? Promise.map(nodes, function(node) {
- return browser.text(node).then(function(error) {
- return Promise.reject(error);
- });
- }) : Promise.resolve([]);
- })
- });
- };
- }
- function runTest(browser, test) {
- return Promise.resolve(browser
- .then(utils.loadTestPage(browser, test, port))
- .then(getResults(browser))
- ).cancellable();
- }
- exports.tests = function(browsers, singleTest) {
- var path = "tests/mocha";
- return (singleTest ? Promise.resolve([singleTest]) : utils.getTests(path)).then(function(tests) {
- return Promise.map(browsers, function(settings) {
- var name = [settings.browserName, settings.version, settings.platform].join("-");
- var count = 0;
- var browser = utils.initBrowser(settings);
- return Promise.using(browser, function() {
- return Promise.map(tests, function(test, index, total) {
- console.log(colors.green, "STARTING", "(" + (++count) + "/" + total + ")", name, test, colors.clear);
- var start = Date.now();
- return runTestWithRetries(browser, test).then(function() {
- console.log(colors.green, "COMPLETE", humanizeDuration(Date.now() - start), "(" + count + "/" + total + ")", name, colors.clear);
- });
- }, {concurrency: 1})
- .settle()
- .catch(function(error) {
- console.error(colors.red, "ERROR", name, error);
- throw error;
- });
- });
- }, {concurrency: 3});
- });
- };
|