Skip to content

Commit

Permalink
Simplify integration tests
Browse files Browse the repository at this point in the history
  • Loading branch information
mde committed Mar 19, 2022
1 parent c5f6e88 commit f8fada9
Show file tree
Hide file tree
Showing 8 changed files with 80 additions and 77 deletions.
27 changes: 8 additions & 19 deletions jakefile.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,16 +49,7 @@ jake.Task['publish:package'].directory = PROJECT_DIR;

namespace('test', function () {

let integrationTest = task('integration', ['publish:package'], async function () {
let pkg = JSON.parse(fs.readFileSync(`${PROJECT_DIR}/package.json`).toString());
let version = pkg.version;

proc.execSync('rm -rf ./node_modules');
// Install from the actual package, run tests from the packaged binary
proc.execSync(`mkdir -p node_modules/.bin && mv ${PROJECT_DIR}/pkg/jake-v` +
`${version} node_modules/jake && ln -s ${process.cwd()}` +
'/node_modules/jake/bin/cli.js ./node_modules/.bin/jake');

let integrationTest = task('integration', async function () {
let testArgs = [];
if (process.env.filter) {
testArgs.push(process.env.filter);
Expand All @@ -71,20 +62,18 @@ namespace('test', function () {
});
return new Promise((resolve, reject) => {
spawned.on('exit', () => {
if (!(process.env.noclobber || process.env.noClobber)) {
proc.execSync('rm -rf tmp_publish && rm -rf package.json' +
' && rm -rf package-lock.json && rm -rf node_modules');
// Rather than invoking 'clobber' task
jake.rmRf(`${PROJECT_DIR}/pkg`);
}
resolve();
});
});

});

integrationTest.directory = `${PROJECT_DIR}/test/integration`;

let integrationClobber = task('integrationClobber', function () {
proc.execSync('rm -rf package.json pkg tmp_publish');
});
integrationClobber.directory = `${PROJECT_DIR}/test/integration`;

let unitTest = task('unit', async function () {
let testArgs = [];
if (process.env.filter) {
Expand All @@ -97,9 +86,9 @@ namespace('test', function () {
stdio: 'inherit'
});
});

unitTest.directory = `${PROJECT_DIR}/test/unit`;

});

desc('Runs all tests');
task('test', ['test:unit', 'test:integration']);
task('test', ['test:unit', 'test:integration', 'test:integrationClobber']);
15 changes: 9 additions & 6 deletions test/integration/concurrent.js
Original file line number Diff line number Diff line change
@@ -1,38 +1,41 @@
let assert = require('assert');
let exec = require('child_process').execSync;

const PROJECT_DIR = process.env.PROJECT_DIR;
const JAKE_CMD = `${PROJECT_DIR}/bin/cli.js`;

suite('concurrent', function () {

this.timeout(7000);

test(' simple concurrent prerequisites 1', function () {
let out = exec('./node_modules/.bin/jake -q concurrent:simple1').toString().trim()
let out = exec(`${JAKE_CMD} -q concurrent:simple1`).toString().trim()
assert.equal('Started A\nStarted B\nFinished B\nFinished A', out);
});

test(' simple concurrent prerequisites 2', function () {
let out = exec('./node_modules/.bin/jake -q concurrent:simple2').toString().trim()
let out = exec(`${JAKE_CMD} -q concurrent:simple2`).toString().trim()
assert.equal('Started C\nStarted D\nFinished C\nFinished D', out);
});

test(' sequential concurrent prerequisites', function () {
let out = exec('./node_modules/.bin/jake -q concurrent:seqconcurrent').toString().trim()
let out = exec(`${JAKE_CMD} -q concurrent:seqconcurrent`).toString().trim()
assert.equal('Started A\nStarted B\nFinished B\nFinished A\nStarted C\nStarted D\nFinished C\nFinished D', out);
});

test(' concurrent concurrent prerequisites', function () {
let out = exec('./node_modules/.bin/jake -q concurrent:concurrentconcurrent').toString().trim()
let out = exec(`${JAKE_CMD} -q concurrent:concurrentconcurrent`).toString().trim()
assert.equal('Started A\nStarted B\nStarted C\nStarted D\nFinished B\nFinished C\nFinished A\nFinished D', out);
});

test(' concurrent prerequisites with subdependency', function () {
let out = exec('./node_modules/.bin/jake -q concurrent:subdep').toString().trim()
let out = exec(`${JAKE_CMD} -q concurrent:subdep`).toString().trim()
assert.equal('Started A\nFinished A\nStarted Ba\nFinished Ba', out);
});

test(' failing in concurrent prerequisites', function () {
try {
exec('./node_modules/.bin/jake -q concurrent:Cfail');
exec(`${JAKE_CMD} -q concurrent:Cfail`);
}
catch(err) {
assert(err.message.indexOf('Command failed') > -1);
Expand Down
25 changes: 13 additions & 12 deletions test/integration/file_task.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
*/

const PROJECT_DIR = process.env.PROJECT_DIR;
const JAKE_CMD = `${PROJECT_DIR}/bin/cli.js`;

let assert = require('assert');
let fs = require('fs');
Expand All @@ -39,18 +40,18 @@ suite('fileTask', function () {

test('where a file-task prereq does not change with --always-make', function () {
let out;
out = exec('./node_modules/.bin/jake -q fileTest:foo/from-src1.txt').toString().trim();
out = exec(`${JAKE_CMD} -q fileTest:foo/from-src1.txt`).toString().trim();
assert.equal('fileTest:foo/src1.txt task\nfileTest:foo/from-src1.txt task',
out);
out = exec('./node_modules/.bin/jake -q -B fileTest:foo/from-src1.txt').toString().trim();
out = exec(`${JAKE_CMD} -q -B fileTest:foo/from-src1.txt`).toString().trim();
assert.equal('fileTest:foo/src1.txt task\nfileTest:foo/from-src1.txt task',
out);
cleanUpAndNext();
});

test('concating two files', function () {
let out;
out = exec('./node_modules/.bin/jake -q fileTest:foo/concat.txt').toString().trim();
out = exec(`${JAKE_CMD} -q fileTest:foo/concat.txt`).toString().trim();
assert.equal('fileTest:foo/src1.txt task\ndefault task\nfileTest:foo/src2.txt task\n' +
'fileTest:foo/concat.txt task', out);
// Check to see the two files got concat'd
Expand All @@ -61,9 +62,9 @@ suite('fileTask', function () {

test('where a file-task prereq does not change', function () {
let out;
out = exec('./node_modules/.bin/jake -q fileTest:foo/from-src1.txt').toString().trim();
out = exec(`${JAKE_CMD} -q fileTest:foo/from-src1.txt`).toString().trim();
assert.equal('fileTest:foo/src1.txt task\nfileTest:foo/from-src1.txt task', out);
out = exec('./node_modules/.bin/jake -q fileTest:foo/from-src1.txt').toString().trim();
out = exec(`${JAKE_CMD} -q fileTest:foo/from-src1.txt`).toString().trim();
// Second time should be a no-op
assert.equal('', out);
cleanUpAndNext();
Expand All @@ -76,10 +77,10 @@ suite('fileTask', function () {
fs.writeFileSync('./foo/src1.txt', '-SRC');
// Task should run the first time
let out;
out = exec('./node_modules/.bin/jake -q fileTest:foo/from-src1.txt').toString().trim();
out = exec(`${JAKE_CMD} -q fileTest:foo/from-src1.txt`).toString().trim();
assert.equal('fileTest:foo/from-src1.txt task', out);
// Task should not run on subsequent invocation
out = exec('./node_modules/.bin/jake -q fileTest:foo/from-src1.txt').toString().trim();
out = exec(`${JAKE_CMD} -q fileTest:foo/from-src1.txt`).toString().trim();
assert.equal('', out);
cleanUpAndNext(next);
}, 1000);
Expand All @@ -90,11 +91,11 @@ suite('fileTask', function () {
exec('mkdir -p ./foo');
fs.writeFileSync('foo/prereq.txt', prereqData);
let out;
out = exec('./node_modules/.bin/jake -q fileTest:foo/from-prereq.txt').toString().trim();
out = exec(`${JAKE_CMD} -q fileTest:foo/from-prereq.txt`).toString().trim();
assert.equal('fileTest:foo/from-prereq.txt task', out);
let data = fs.readFileSync(process.cwd() + '/foo/from-prereq.txt');
assert.equal(prereqData, data.toString());
out = exec('./node_modules/.bin/jake -q fileTest:foo/from-prereq.txt').toString().trim();
out = exec(`${JAKE_CMD} -q fileTest:foo/from-prereq.txt`).toString().trim();
// Second time should be a no-op
assert.equal('', out);
cleanUpAndNext();
Expand All @@ -105,17 +106,17 @@ suite('fileTask', function () {
exec('mkdir -p ./foo');
fs.writeFileSync('foo/prereq.txt', prereqData);
let out;
out = exec('./node_modules/.bin/jake -q fileTest:foo/from-prereq.txt').toString().trim();
out = exec(`${JAKE_CMD} -q fileTest:foo/from-prereq.txt`).toString().trim();
assert.equal('fileTest:foo/from-prereq.txt task', out);
let data = fs.readFileSync(process.cwd() + '/foo/from-prereq.txt');
assert.equal(prereqData, data.toString());
out = exec('./node_modules/.bin/jake -q -B fileTest:foo/from-prereq.txt').toString().trim();
out = exec(`${JAKE_CMD} -q -B fileTest:foo/from-prereq.txt`).toString().trim();
assert.equal('fileTest:foo/from-prereq.txt task', out);
cleanUpAndNext();
});

test('nested directory-task', function () {
exec('./node_modules/.bin/jake -q fileTest:foo/bar/baz/bamf.txt');
exec(`${JAKE_CMD} -q fileTest:foo/bar/baz/bamf.txt`);
let data = fs.readFileSync(process.cwd() + '/foo/bar/baz/bamf.txt');
assert.equal('w00t', data);
cleanUpAndNext();
Expand Down
2 changes: 1 addition & 1 deletion test/integration/jakelib/required_module.jake.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
let { task, namespace } = require("jake");
let { task, namespace } = require(`${process.env.PROJECT_DIR}/lib/jake`);

namespace('usingRequire', function () {
task('test', () => {
Expand Down
5 changes: 4 additions & 1 deletion test/integration/publish_task.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
let assert = require('assert');
let exec = require('child_process').execSync;

const PROJECT_DIR = process.env.PROJECT_DIR;
const JAKE_CMD = `${PROJECT_DIR}/bin/cli.js`;

suite('publishTask', function () {

this.timeout(7000);

test('default task', function () {
let out = exec('./node_modules/.bin/jake -q publish').toString().trim();
let out = exec(`${JAKE_CMD} -q publish`).toString().trim();
let expected = [
'Fetched remote tags.'
, 'On branch v0.0'
Expand Down
19 changes: 10 additions & 9 deletions test/integration/rule.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
*/

const PROJECT_DIR = process.env.PROJECT_DIR;
const JAKE_CMD = `${PROJECT_DIR}/bin/cli.js`;

let assert = require('assert');
let exec = require('child_process').execSync;
Expand Down Expand Up @@ -74,7 +75,7 @@ suite('rule', function () {
});

test('rule w/o pattern', function () {
let out = exec( './node_modules/.bin/jake -q tmp').toString().trim();
let out = exec( `${JAKE_CMD} -q tmp`).toString().trim();
let output = [
"tmp_dep2.c task"
, "tmp_dep1.c task"
Expand All @@ -88,7 +89,7 @@ suite('rule', function () {
});

test('rule w pattern w/o folder w/o namespace', function () {
let out = exec( './node_modules/.bin/jake -q tmp_p').toString().trim();
let out = exec( `${JAKE_CMD} -q tmp_p`).toString().trim();
let output = [
"tmp_dep2.c task"
, "tmp_dep1.c task"
Expand All @@ -103,7 +104,7 @@ suite('rule', function () {
});

test('rule w pattern w folder w/o namespace', function () {
let out = exec( './node_modules/.bin/jake -q tmp_pf').toString().trim();
let out = exec( `${JAKE_CMD} -q tmp_pf`).toString().trim();
let output = [
"tmpsrc/tmp_dep1.c task"
, "cp tmpsrc/tmp_dep1.c tmpbin/tmp_dep1.oo task"
Expand All @@ -118,7 +119,7 @@ suite('rule', function () {
});

test.skip('rule w pattern w folder w namespace', function () {
let out = exec( './node_modules/.bin/jake -q tmp_ns').toString().trim();
let out = exec( `${JAKE_CMD} -q tmp_ns`).toString().trim();
let output = [
"tmpsrc/file2.c init task" // yes
, "tmpsrc/tmp_dep2.c task" // no
Expand All @@ -135,7 +136,7 @@ suite('rule', function () {
});

test.skip('rule w chain w pattern w folder w namespace', function () {
let out = exec( './node_modules/.bin/jake -q tmp_cr').toString().trim();
let out = exec( `${JAKE_CMD} -q tmp_cr`).toString().trim();
let output = [
"chainrule init task"
, "cp tmpsrc/file1.tex tmpbin/file1.dvi tex->dvi task"
Expand All @@ -159,7 +160,7 @@ suite('rule', function () {
rmRf('foo.txt', {silent: true});
rmRf('foo.html', {silent: true});
try {
exec('./node_modules/.bin/jake ' + key + ':test');
exec(`${JAKE_CMD} ` + key + ':test');
}
catch(err) {
// foo.txt prereq doesn't exist yet
Expand All @@ -170,7 +171,7 @@ suite('rule', function () {

test('rule with source file now created (' + key + ')', function () {
fs.writeFileSync('foo.txt', '');
let out = exec('./node_modules/.bin/jake -q ' + key + ':test').toString().trim();
let out = exec(`${JAKE_CMD} -q ` + key + ':test').toString().trim();
// Should run prereq and test task
let output = [
'created html'
Expand All @@ -182,7 +183,7 @@ suite('rule', function () {
test('rule with source file modified (' + key + ')', function (next) {
setTimeout(function () {
fs.writeFileSync('foo.txt', '');
let out = exec('./node_modules/.bin/jake -q ' + key + ':test').toString().trim();
let out = exec(`${JAKE_CMD} -q ` + key + ':test').toString().trim();
// Should again run both prereq and test task
let output = [
'created html'
Expand All @@ -199,7 +200,7 @@ suite('rule', function () {
// Remove just the source file
fs.writeFileSync('foo.html', '');
rmRf('foo.txt', {silent: true});
let out = exec('./node_modules/.bin/jake -q ' + key + ':test').toString().trim();
let out = exec(`${JAKE_CMD} -q ` + key + ':test').toString().trim();
// Should treat existing objective file as plain file-task,
// and just run test-task
let output = [
Expand Down
7 changes: 5 additions & 2 deletions test/integration/selfdep.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
let assert = require('assert');
let exec = require('child_process').execSync;

const PROJECT_DIR = process.env.PROJECT_DIR;
const JAKE_CMD = `${PROJECT_DIR}/bin/cli.js`;

suite('selfDep', function () {

this.timeout(7000);
Expand All @@ -18,7 +21,7 @@ suite('selfDep', function () {

test('self dep const', function () {
try {
exec('./node_modules/.bin/jake selfdepconst');
exec(`${JAKE_CMD} selfdepconst`);
}
catch(e) {
assert(e.message.indexOf('dependency of itself') > -1)
Expand All @@ -27,7 +30,7 @@ suite('selfDep', function () {

test('self dep dyn', function () {
try {
exec('./node_modules/.bin/jake selfdepdyn');
exec(`${JAKE_CMD} selfdepdyn`);
}
catch(e) {
assert(e.message.indexOf('dependency of itself') > -1)
Expand Down
Loading

0 comments on commit f8fada9

Please sign in to comment.