@samitouri / QOS-React-2 / commits / c9401be38e

replace phantom-harness runner with webdriver

Thomas Aylott committed Nov 6, 2013 at 16:44 UTC c9401be38eb817c16f4e3adf8a1cefd4d9a79279
5 files changed +2 -249
Gruntfile.js
+2 -6
@@ -4,7 +4,6 @@ var exec = require('child_process').exec;
4 var jsxTask = require('./grunt/tasks/jsx');
5 var browserifyTask = require('./grunt/tasks/browserify');
6 var populistTask = require('./grunt/tasks/populist');
7 -var phantomTask = require('./grunt/tasks/phantom');
7 var webdriverPhantomJSTask = require('./grunt/tasks/webdriver-phantomjs');
8 var webdriverJasmineTasks = require('./grunt/tasks/webdriver-jasmine');
9 var npmTask = require('./grunt/tasks/npm');
@@ -18,7 +17,6 @@ module.exports = function(grunt) {
17 jsx: require('./grunt/config/jsx/jsx'),
18 browserify: require('./grunt/config/browserify'),
19 populist: require('./grunt/config/populist'),
21 - phantom: require('./grunt/config/phantom'),
20 connect: require('./grunt/config/server')(grunt),
21 "webdriver-jasmine": require('./grunt/config/webdriver-jasmine.js'),
22 npm: require('./grunt/config/npm'),
@@ -44,8 +42,6 @@ module.exports = function(grunt) {
42
43 grunt.registerMultiTask('populist', populistTask);
44
47 - grunt.registerMultiTask('phantom', phantomTask);
48 -
45 grunt.registerMultiTask('webdriver-jasmine', webdriverJasmineTasks);
46
47 grunt.registerMultiTask('npm', npmTask);
@@ -79,12 +75,12 @@ module.exports = function(grunt) {
75
76 grunt.registerTask('webdriver-phantomjs', webdriverPhantomJSTask);
77
82 - grunt.registerTask('test:webdriver', [
78 + grunt.registerTask('test:webdriver:phantomjs', [
79 'connect',
80 'webdriver-phantomjs',
81 'webdriver-jasmine:local'
82 ]);
87 - grunt.registerTask('test', ['build:test', 'build:basic', 'phantom:run']);
83 + grunt.registerTask('test', ['build:test', 'build:basic', 'test:webdriver:phantomjs']);
84 grunt.registerTask('npm:test', ['build', 'npm:pack']);
85
86 // Optimized build task that does all of our builds. The subtasks will be run
grunt/config/phantom.js deleted
-11
@@ -1,11 +0,0 @@
1 -var grunt = require("grunt");
2 -
3 -exports.run = {
4 - port: 8080,
5 - harness: "test/phantom-harness.js",
6 - // Run `grunt test --debug` to enable in-browser testing.
7 - debug: !!grunt.option("debug"),
8 - tests: [
9 - "**/__tests__/*-test.js"
10 - ]
11 -};
grunt/tasks/phantom.js deleted
-68
@@ -1,68 +0,0 @@
1 -'use strict';
2 -
3 -var assert = require("assert");
4 -var grunt = require("grunt");
5 -var spawn = grunt.util.spawn;
6 -var semver = require("semver");
7 -var MIN_VERSION = "1.9.0";
8 -var phantomjs = require("phantomjs").path;
9 -
10 -function checkVersion(error, result, code) {
11 - if (error) {
12 - throw error;
13 - }
14 - assert.strictEqual(code, 0);
15 -
16 - var version = result.stdout;
17 -
18 - assert.ok(
19 - semver.valid(version),
20 - "Invalid PhantomJS version: " + version
21 - );
22 -
23 - assert.ok(
24 - semver.gte(version, MIN_VERSION),
25 - "PhantomJS v" + version + " too old; need to install " +
26 - "v" + MIN_VERSION + " or higher."
27 - );
28 -}
29 -
30 -function run(config, done) {
31 - var args = [
32 - config.harness,
33 - "--port", config.port
34 - ];
35 -
36 - if (config.debug) {
37 - args.push("--debug");
38 - }
39 -
40 - args.push("--tests");
41 - grunt.file.expand({
42 - nonull: true,
43 - cwd: "src"
44 - }, config.tests || []).forEach(function(file) {
45 - args.push(file.replace(/\.js$/i, ""));
46 - });
47 -
48 - var child = spawn({
49 - cmd: phantomjs,
50 - args: args
51 - }, done);
52 -
53 - child.stdout.pipe(process.stdout);
54 - child.stderr.pipe(process.stderr);
55 -}
56 -
57 -module.exports = function() {
58 - var config = this.data;
59 - var done = this.async();
60 -
61 - spawn({
62 - cmd: phantomjs,
63 - args: ["--version"]
64 - }, function(error, result, code) {
65 - checkVersion(error, result, code);
66 - run(config, done);
67 - });
68 -};
test/index.html deleted
-23
@@ -1,23 +0,0 @@
1 -<!DOCTYPE html>
2 -<html>
3 - <head>
4 - <link rel="stylesheet" type="text/css" href="jasmine.css" />
5 - <script src="jasmine.js"></script>
6 - <script src="react-test.js"></script>
7 - </head>
8 - <body>
9 - <script>
10 - ENABLE_TESTS_HERE
11 -
12 - (function(env) {
13 - // Clean up any nodes the previous test might have added.
14 - env.afterEach(function() {
15 - harness.removeNextSiblings(document.body);
16 - harness.removeNextSiblings(document.getElementById("HTMLReporter"));
17 - });
18 -
19 - env.execute();
20 - })(jasmine.getEnv());
21 - </script>
22 - </body>
23 -</html>
test/phantom-harness.js deleted
-141
@@ -1,141 +0,0 @@
1 -var slice = Array.prototype.slice;
2 -var argv = slice.call(require("system").args);
3 -
4 -// Hard to believe PhantomJS has no equivalent of Node's "path" module.
5 -var fs = require("fs");
6 -var splat = [fs.workingDirectory, argv[0]]
7 - .join(fs.separator)
8 - .split(fs.separator);
9 -
10 -var harness = splat.pop();
11 -if (harness !== "phantom-harness.js") {
12 - console.error("wrong harness: " + harness);
13 - phantom.exit(-1);
14 -}
15 -
16 -var cwd = splat.join(fs.separator);
17 -fs.changeWorkingDirectory(cwd);
18 -
19 -// Hard to believe PhantomJS has no option parsing module.
20 -var port = 8080;
21 -var debug = false;
22 -var tests = [];
23 -var rest = [];
24 -while (argv.length > 0) {
25 - var arg = argv.pop();
26 - if (arg === "--port") {
27 - port = +rest.pop();
28 - } else if (arg === "--debug") {
29 - debug = true;
30 - } else if (arg === "--tests") {
31 - while (rest.length > 0)
32 - tests.push(rest.pop());
33 - }
34 - rest.push(arg);
35 -}
36 -
37 -// Dynamically enable the individual tests.
38 -var indexHtml = fs.read("index.html").replace(
39 - /^(\s*)ENABLE_TESTS_HERE/m,
40 - function(placeholder, leadingSpace) {
41 - return leadingSpace + tests.map(function(testID) {
42 - return "harness.enableTest(" + JSON.stringify(testID) + ");";
43 - }).join("\n" + leadingSpace);
44 - }
45 -);
46 -
47 -var server = require("webserver").create();
48 -server.listen(port, function(req, res) {
49 - var file = req.url.replace(/^\/+/, "");
50 - file = file.split('?')[0];
51 - file = file.replace('build/', '');
52 - file = file.replace('src/test/', '');
53 -
54 - var content;
55 -
56 - switch (file) {
57 - case "jasmine.js":
58 - case "react.js":
59 - case "react-test.js":
60 - file = "../build/" + file;
61 - break;
62 -
63 - case "phantomjs-shims.js":
64 - case "worker.js":
65 - file = "../src/test/" + file;
66 - break;
67 -
68 - case "jasmine.css":
69 - file = "../vendor/jasmine/" + file;
70 - break;
71 -
72 - case "":
73 - default:
74 - file = "index.html";
75 - content = indexHtml; // Prevents calling fs.read again.
76 - break;
77 - }
78 -
79 - if (/\.css$/i.test(file)) {
80 - res.setHeader("Content-Type", "text/css");
81 - } else if (/\.js/i.test(file)) {
82 - res.setHeader("Content-Type", "text/javascript");
83 - } else {
84 - res.setHeader("Content-Type", "text/html");
85 - }
86 -
87 - res.statusCode = 200;
88 - res.write(content || fs.read(file));
89 - res.close();
90 -});
91 -
92 -var url = "http://localhost:" + port;
93 -var green = "\033[32m";
94 -var cyan = "\033[36m";
95 -var reset = "\033[0m";
96 -
97 -if (debug) {
98 - console.log(green);
99 - console.log("PhantomJS received the " + cyan + "--debug" + green + " option.");
100 - console.log("Load " + cyan + url + green + " in your browser to execute " +
101 - "the test suite.");
102 - console.log("Type " + cyan + "control-C" + green + " to terminate the " +
103 - "PhantomJS process.");
104 - console.log(reset);
105 -
106 - // Leave PhantomJS running until killed with control-C...
107 -
108 -} else {
109 - var page = require("webpage").create();
110 - var timeoutSecs = 60;
111 -
112 - page.onCallback = function(data) {
113 - switch (data.type) {
114 - case "console":
115 - console[data.method].apply(console, data.args);
116 - break;
117 -
118 - case "exit":
119 - // PhantomJS crashes sometimes unless we call phantom.exit in its own
120 - // event loop tick.
121 - setTimeout(function() {
122 - phantom.exit(data.code);
123 - }, 10);
124 - break;
125 - }
126 - };
127 -
128 - page.open(url, function(status) {
129 - if (status !== "success") {
130 - console.error("failed to open " + url);
131 - phantom.exit(-1);
132 - }
133 -
134 - setTimeout(function() {
135 - console.error(
136 - "PhantomJS tests timed out after " +
137 - timeoutSecs + " seconds.");
138 - phantom.exit(-1);
139 - }, timeoutSecs * 1e3);
140 - });
141 -}