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
-}