mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
replace phantom-harness runner with webdriver
This commit is contained in:
+2
-6
@@ -4,7 +4,6 @@ var exec = require('child_process').exec;
|
||||
var jsxTask = require('./grunt/tasks/jsx');
|
||||
var browserifyTask = require('./grunt/tasks/browserify');
|
||||
var populistTask = require('./grunt/tasks/populist');
|
||||
var phantomTask = require('./grunt/tasks/phantom');
|
||||
var webdriverPhantomJSTask = require('./grunt/tasks/webdriver-phantomjs');
|
||||
var webdriverJasmineTasks = require('./grunt/tasks/webdriver-jasmine');
|
||||
var npmTask = require('./grunt/tasks/npm');
|
||||
@@ -18,7 +17,6 @@ module.exports = function(grunt) {
|
||||
jsx: require('./grunt/config/jsx/jsx'),
|
||||
browserify: require('./grunt/config/browserify'),
|
||||
populist: require('./grunt/config/populist'),
|
||||
phantom: require('./grunt/config/phantom'),
|
||||
connect: require('./grunt/config/server')(grunt),
|
||||
"webdriver-jasmine": require('./grunt/config/webdriver-jasmine.js'),
|
||||
npm: require('./grunt/config/npm'),
|
||||
@@ -44,8 +42,6 @@ module.exports = function(grunt) {
|
||||
|
||||
grunt.registerMultiTask('populist', populistTask);
|
||||
|
||||
grunt.registerMultiTask('phantom', phantomTask);
|
||||
|
||||
grunt.registerMultiTask('webdriver-jasmine', webdriverJasmineTasks);
|
||||
|
||||
grunt.registerMultiTask('npm', npmTask);
|
||||
@@ -79,12 +75,12 @@ module.exports = function(grunt) {
|
||||
|
||||
grunt.registerTask('webdriver-phantomjs', webdriverPhantomJSTask);
|
||||
|
||||
grunt.registerTask('test:webdriver', [
|
||||
grunt.registerTask('test:webdriver:phantomjs', [
|
||||
'connect',
|
||||
'webdriver-phantomjs',
|
||||
'webdriver-jasmine:local'
|
||||
]);
|
||||
grunt.registerTask('test', ['build:test', 'build:basic', 'phantom:run']);
|
||||
grunt.registerTask('test', ['build:test', 'build:basic', 'test:webdriver:phantomjs']);
|
||||
grunt.registerTask('npm:test', ['build', 'npm:pack']);
|
||||
|
||||
// Optimized build task that does all of our builds. The subtasks will be run
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
var grunt = require("grunt");
|
||||
|
||||
exports.run = {
|
||||
port: 8080,
|
||||
harness: "test/phantom-harness.js",
|
||||
// Run `grunt test --debug` to enable in-browser testing.
|
||||
debug: !!grunt.option("debug"),
|
||||
tests: [
|
||||
"**/__tests__/*-test.js"
|
||||
]
|
||||
};
|
||||
@@ -1,68 +0,0 @@
|
||||
'use strict';
|
||||
|
||||
var assert = require("assert");
|
||||
var grunt = require("grunt");
|
||||
var spawn = grunt.util.spawn;
|
||||
var semver = require("semver");
|
||||
var MIN_VERSION = "1.9.0";
|
||||
var phantomjs = require("phantomjs").path;
|
||||
|
||||
function checkVersion(error, result, code) {
|
||||
if (error) {
|
||||
throw error;
|
||||
}
|
||||
assert.strictEqual(code, 0);
|
||||
|
||||
var version = result.stdout;
|
||||
|
||||
assert.ok(
|
||||
semver.valid(version),
|
||||
"Invalid PhantomJS version: " + version
|
||||
);
|
||||
|
||||
assert.ok(
|
||||
semver.gte(version, MIN_VERSION),
|
||||
"PhantomJS v" + version + " too old; need to install " +
|
||||
"v" + MIN_VERSION + " or higher."
|
||||
);
|
||||
}
|
||||
|
||||
function run(config, done) {
|
||||
var args = [
|
||||
config.harness,
|
||||
"--port", config.port
|
||||
];
|
||||
|
||||
if (config.debug) {
|
||||
args.push("--debug");
|
||||
}
|
||||
|
||||
args.push("--tests");
|
||||
grunt.file.expand({
|
||||
nonull: true,
|
||||
cwd: "src"
|
||||
}, config.tests || []).forEach(function(file) {
|
||||
args.push(file.replace(/\.js$/i, ""));
|
||||
});
|
||||
|
||||
var child = spawn({
|
||||
cmd: phantomjs,
|
||||
args: args
|
||||
}, done);
|
||||
|
||||
child.stdout.pipe(process.stdout);
|
||||
child.stderr.pipe(process.stderr);
|
||||
}
|
||||
|
||||
module.exports = function() {
|
||||
var config = this.data;
|
||||
var done = this.async();
|
||||
|
||||
spawn({
|
||||
cmd: phantomjs,
|
||||
args: ["--version"]
|
||||
}, function(error, result, code) {
|
||||
checkVersion(error, result, code);
|
||||
run(config, done);
|
||||
});
|
||||
};
|
||||
@@ -1,23 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<link rel="stylesheet" type="text/css" href="jasmine.css" />
|
||||
<script src="jasmine.js"></script>
|
||||
<script src="react-test.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
ENABLE_TESTS_HERE
|
||||
|
||||
(function(env) {
|
||||
// Clean up any nodes the previous test might have added.
|
||||
env.afterEach(function() {
|
||||
harness.removeNextSiblings(document.body);
|
||||
harness.removeNextSiblings(document.getElementById("HTMLReporter"));
|
||||
});
|
||||
|
||||
env.execute();
|
||||
})(jasmine.getEnv());
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,141 +0,0 @@
|
||||
var slice = Array.prototype.slice;
|
||||
var argv = slice.call(require("system").args);
|
||||
|
||||
// Hard to believe PhantomJS has no equivalent of Node's "path" module.
|
||||
var fs = require("fs");
|
||||
var splat = [fs.workingDirectory, argv[0]]
|
||||
.join(fs.separator)
|
||||
.split(fs.separator);
|
||||
|
||||
var harness = splat.pop();
|
||||
if (harness !== "phantom-harness.js") {
|
||||
console.error("wrong harness: " + harness);
|
||||
phantom.exit(-1);
|
||||
}
|
||||
|
||||
var cwd = splat.join(fs.separator);
|
||||
fs.changeWorkingDirectory(cwd);
|
||||
|
||||
// Hard to believe PhantomJS has no option parsing module.
|
||||
var port = 8080;
|
||||
var debug = false;
|
||||
var tests = [];
|
||||
var rest = [];
|
||||
while (argv.length > 0) {
|
||||
var arg = argv.pop();
|
||||
if (arg === "--port") {
|
||||
port = +rest.pop();
|
||||
} else if (arg === "--debug") {
|
||||
debug = true;
|
||||
} else if (arg === "--tests") {
|
||||
while (rest.length > 0)
|
||||
tests.push(rest.pop());
|
||||
}
|
||||
rest.push(arg);
|
||||
}
|
||||
|
||||
// Dynamically enable the individual tests.
|
||||
var indexHtml = fs.read("index.html").replace(
|
||||
/^(\s*)ENABLE_TESTS_HERE/m,
|
||||
function(placeholder, leadingSpace) {
|
||||
return leadingSpace + tests.map(function(testID) {
|
||||
return "harness.enableTest(" + JSON.stringify(testID) + ");";
|
||||
}).join("\n" + leadingSpace);
|
||||
}
|
||||
);
|
||||
|
||||
var server = require("webserver").create();
|
||||
server.listen(port, function(req, res) {
|
||||
var file = req.url.replace(/^\/+/, "");
|
||||
file = file.split('?')[0];
|
||||
file = file.replace('build/', '');
|
||||
file = file.replace('src/test/', '');
|
||||
|
||||
var content;
|
||||
|
||||
switch (file) {
|
||||
case "jasmine.js":
|
||||
case "react.js":
|
||||
case "react-test.js":
|
||||
file = "../build/" + file;
|
||||
break;
|
||||
|
||||
case "phantomjs-shims.js":
|
||||
case "worker.js":
|
||||
file = "../src/test/" + file;
|
||||
break;
|
||||
|
||||
case "jasmine.css":
|
||||
file = "../vendor/jasmine/" + file;
|
||||
break;
|
||||
|
||||
case "":
|
||||
default:
|
||||
file = "index.html";
|
||||
content = indexHtml; // Prevents calling fs.read again.
|
||||
break;
|
||||
}
|
||||
|
||||
if (/\.css$/i.test(file)) {
|
||||
res.setHeader("Content-Type", "text/css");
|
||||
} else if (/\.js/i.test(file)) {
|
||||
res.setHeader("Content-Type", "text/javascript");
|
||||
} else {
|
||||
res.setHeader("Content-Type", "text/html");
|
||||
}
|
||||
|
||||
res.statusCode = 200;
|
||||
res.write(content || fs.read(file));
|
||||
res.close();
|
||||
});
|
||||
|
||||
var url = "http://localhost:" + port;
|
||||
var green = "\033[32m";
|
||||
var cyan = "\033[36m";
|
||||
var reset = "\033[0m";
|
||||
|
||||
if (debug) {
|
||||
console.log(green);
|
||||
console.log("PhantomJS received the " + cyan + "--debug" + green + " option.");
|
||||
console.log("Load " + cyan + url + green + " in your browser to execute " +
|
||||
"the test suite.");
|
||||
console.log("Type " + cyan + "control-C" + green + " to terminate the " +
|
||||
"PhantomJS process.");
|
||||
console.log(reset);
|
||||
|
||||
// Leave PhantomJS running until killed with control-C...
|
||||
|
||||
} else {
|
||||
var page = require("webpage").create();
|
||||
var timeoutSecs = 60;
|
||||
|
||||
page.onCallback = function(data) {
|
||||
switch (data.type) {
|
||||
case "console":
|
||||
console[data.method].apply(console, data.args);
|
||||
break;
|
||||
|
||||
case "exit":
|
||||
// PhantomJS crashes sometimes unless we call phantom.exit in its own
|
||||
// event loop tick.
|
||||
setTimeout(function() {
|
||||
phantom.exit(data.code);
|
||||
}, 10);
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
page.open(url, function(status) {
|
||||
if (status !== "success") {
|
||||
console.error("failed to open " + url);
|
||||
phantom.exit(-1);
|
||||
}
|
||||
|
||||
setTimeout(function() {
|
||||
console.error(
|
||||
"PhantomJS tests timed out after " +
|
||||
timeoutSecs + " seconds.");
|
||||
phantom.exit(-1);
|
||||
}, timeoutSecs * 1e3);
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user