From 017e68ec37e26b6c632dcb10ddcaa5525d4b3f7d Mon Sep 17 00:00:00 2001 From: MoyuScript Date: Tue, 26 Aug 2014 21:03:54 +0300 Subject: [PATCH] Refactor webdriver test running --- Gruntfile.js | 6 +++--- package.json | 2 +- tests/selenium.js | 55 ++++++++++++++++++++++++++--------------------- 3 files changed, 34 insertions(+), 29 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index dec2eb4..8fcbe8d 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -129,11 +129,11 @@ module.exports = function(grunt) { } }); - grunt.registerTask('webdriver', 'Browser render tests', function() { + grunt.registerTask('webdriver', 'Browser render tests', function(browser, test) { var selenium = require("./tests/selenium.js"); var done = this.async(); - var browsers = (this.args.length) ? [grunt.config.get(this.nameArgs.replace(":", "."))] : _.values(grunt.config.get(this.name)); - selenium.tests(browsers).onValue(done); + var browsers = (browser) ? [grunt.config.get(this.name + "." + browser)] : _.values(grunt.config.get(this.name)); + selenium.tests(browsers, test).onValue(done); }); // Load tasks diff --git a/package.json b/package.json index 70c1333..3101581 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "devDependencies": { "baconjs": "0.7.11", "base64-arraybuffer": ">= 0.1.0", - "grunt": ">=0.4.0", + "grunt": "^0.4.5", "grunt-contrib-concat": "*", "grunt-contrib-connect": "0.7.1", "grunt-contrib-jshint": "*", diff --git a/tests/selenium.js b/tests/selenium.js index 8133f2d..8d5c481 100644 --- a/tests/selenium.js +++ b/tests/selenium.js @@ -127,39 +127,44 @@ var browserStream = new Bacon.Bus(); if (process.env.TRAVIS_JOB_NUMBER) { test.capabilities["tunnel-identifier"] = process.env.TRAVIS_JOB_NUMBER; - test.capabilities["name"] = process.env.TRAVIS_COMMIT.substring(0, 10) + " #" + process.env.TRAVIS_BUILD_NUMBER; + test.capabilities["name"] = process.env.TRAVIS_COMMIT.substring(0, 10); + test.capabilities["build"] = process.env.TRAVIS_BUILD_NUMBER; + } else { + test.capabilities["name"] = "Manual run"; } var resultStream = Bacon.fromNodeCallback(browser, "init", test.capabilities) .flatMap(Bacon.fromNodeCallback(browser, "setImplicitWaitTimeout", 15000) - .flatMap(function() { - Bacon.later(0, formatResultName(test.capabilities)).onValue(browserStream.push); - return Bacon.fromArray(test.cases).zip(browserStream.take(test.cases.length)).flatMap(function(options) { - var testCase = options[0]; - var name = options[1]; - console.log(colors.green, "STARTING", name, testCase, colors.clear); - return Bacon.fromNodeCallback(browser, "get", "http://localhost:" + port + "/" + testCase + "?selenium") - .flatMap(Bacon.combineTemplate({ - dataUrl: Bacon.fromNodeCallback(browser, "elementByCssSelector", ".html2canvas").flatMap(function(canvas) { - return Bacon.fromNodeCallback(browser, "execute", "return arguments[0].toDataURL('image/png').substring(22)", [canvas]); - }), - screenshot: Bacon.fromNodeCallback(browser, "takeScreenshot") - })).flatMap(function(result) { - return Bacon.combineTemplate({ - browser: name, - testCase: testCase, - accuracy: Bacon.constant(result.dataUrl).flatMap(getPixelArray).combine(Bacon.constant(result.screenshot).flatMap(getPixelArray), calculateDifference), - dataUrl: result.dataUrl, - screenshot: result.screenshot - }); + .flatMap(function() { + Bacon.later(0, formatResultName(test.capabilities)).onValue(browserStream.push); + return Bacon.fromArray(test.cases).zip(browserStream.take(test.cases.length)).flatMap(function(options) { + var testCase = options[0]; + var name = options[1]; + console.log(colors.green, "STARTING", name, testCase, colors.clear); + return Bacon.fromNodeCallback(browser, "get", "http://localhost:" + port + "/" + testCase + "?selenium") + .flatMap(Bacon.combineTemplate({ + dataUrl: Bacon.fromNodeCallback(browser, "elementByCssSelector", ".html2canvas").flatMap(function(canvas) { + return Bacon.fromNodeCallback(browser, "execute", "return arguments[0].toDataURL('image/png').substring(22)", [canvas]); + }), + screenshot: Bacon.fromNodeCallback(browser, "takeScreenshot") + })) + .flatMap(function(result) { + return Bacon.combineTemplate({ + browser: name, + testCase: testCase, + accuracy: Bacon.constant(result.dataUrl).flatMap(getPixelArray).combine(Bacon.constant(result.screenshot).flatMap(getPixelArray), calculateDifference), + dataUrl: result.dataUrl, + screenshot: result.screenshot }); - }); - })); + }); + }); + })); resultStream.onError(function(error) { var name = formatResultName(test.capabilities); console.log(colors.red, "ERROR", name, error.message); browserStream.push(name); + browser.quit(); }); resultStream.onValue(function(result) { @@ -207,7 +212,7 @@ return result.fold([], pushToArray); } - exports.tests = function(browsers) { - return getTests("tests/cases").fold([], pushToArray).flatMap(runWebDriver.bind(null, browsers)).mapError(false); + exports.tests = function(browsers, singleTest) { + return (singleTest ? Bacon.constant([singleTest]) : getTests("tests/cases").fold([], pushToArray)).flatMap(runWebDriver.bind(null, browsers)).mapError(false); }; })();