orionsoft-react-scripts
Version:
Orionsoft Configuration and scripts for Create React App.
140 lines (137 loc) • 3.85 kB
JavaScript
/*
MIT License http://www.opensource.org/licenses/mit-license.php
Author Tobias Koppers @sokra
*/
var Tapable = require("../lib/Tapable");
var should = require("should");
function makeTestPlugin(arr, index) {
var last;
var f = function() {
f.shouldNotBeCalled();
var args = Array.prototype.slice.call(arguments);
args.unshift(index);
last = args;
arr.push(args);
};
f.issue = function() {
f.shouldBeCalled();
last.pop().apply(null, arguments);
last = null;
};
f.shouldNotBeCalled = function() {
if(last) throw new Error("Plugin " + index + " was called, but shouldn't be.");
};
f.shouldBeCalled = function() {
if(!last) throw new Error("Plugin " + index + " was not called, but should be.");
};
f.shouldBeCalledAsyncWith = function() {
f.shouldBeCalled();
var args = Array.prototype.slice.call(arguments);
for(var i = 0; i < args.length && i < last.length - 2; i++) {
if(args[i] === null || args[i] === undefined) {
should.not.exist(last[i+1]);
} else {
should.exist(last[i+1]);
last[i+1].should.be.eql(args[i]);
}
}
args.length.should.be.eql(last.length - 2);
};
return f;
}
describe("applyPluginsParallelBailResult", function() {
it("should call all handlers", function() {
var tapable = new Tapable();
var log = [];
var p1 = makeTestPlugin(log, 1);
var p2 = makeTestPlugin(log, 2);
var p3 = makeTestPlugin(log, 3);
var p4 = makeTestPlugin(log, 4);
var result = makeTestPlugin(log, 0);
tapable.plugin("test", p1);
tapable.plugin("test", p2);
tapable.plugin("xxxx", p3);
tapable.plugin("test", p4);
tapable.applyPluginsParallelBailResult("test", 1, 2, result);
p1.shouldBeCalledAsyncWith(1, 2);
p2.shouldBeCalledAsyncWith(1, 2);
p3.shouldNotBeCalled();
p4.shouldBeCalledAsyncWith(1, 2);
p1.issue();
p2.issue(null, "ok");
p4.issue(null, "fail");
log.should.be.eql([
[1, 1, 2],
[2, 1, 2],
[4, 1, 2],
[0, null, "ok"]
]);
});
it("should save valid results", function() {
var tapable = new Tapable();
var log = [];
var p1 = makeTestPlugin(log, 1);
var p2 = makeTestPlugin(log, 2);
var p3 = makeTestPlugin(log, 3);
tapable.plugin("test", p1);
tapable.plugin("test", p2);
tapable.plugin("test", p3);
var result = makeTestPlugin(log, 0);
tapable.applyPluginsParallelBailResult("test", "a", result);
p3.issue(null, "fail");
p2.issue(null, "ok");
p1.issue();
log.should.be.eql([
[1, "a"],
[2, "a"],
[3, "a"],
[0, null, "ok"],
]);
});
it("should take the first result", function() {
var tapable = new Tapable();
var log = [];
var p1 = makeTestPlugin(log, 1);
var p2 = makeTestPlugin(log, 2);
var p3 = makeTestPlugin(log, 3);
tapable.plugin("test", p1);
tapable.plugin("test", p2);
tapable.plugin("test", p3);
var result = makeTestPlugin(log, 0);
tapable.applyPluginsParallelBailResult("test", "a", result);
log.length.should.be.eql(3);
p1.issue(null, "ok");
log.length.should.be.eql(4);
p2.issue(new Error("fail"));
p3.issue();
log.should.be.eql([
[1, "a"],
[2, "a"],
[3, "a"],
[0, null, "ok"],
]);
});
it("should return errors", function() {
var tapable = new Tapable();
var log = [];
var p1 = makeTestPlugin(log, 1);
var p2 = makeTestPlugin(log, 2);
var p3 = makeTestPlugin(log, 3);
tapable.plugin("test", p1);
tapable.plugin("test", p2);
tapable.plugin("test", p3);
var result = makeTestPlugin(log, 0);
tapable.applyPluginsParallelBailResult("test", "a", result);
log.length.should.be.eql(3);
p1.issue("ok");
log.length.should.be.eql(4);
p2.issue();
p3.issue(null, "fail");
log.should.be.eql([
[1, "a"],
[2, "a"],
[3, "a"],
[0, "ok", undefined],
]);
});
});