Updated the Survey.

This commit is contained in:
Batuhan Berk Başoğlu 2021-03-10 20:43:28 -05:00
parent f59686eae0
commit 6d3ba1a714
1203 changed files with 140782 additions and 5 deletions

42
node_modules/jake/test/integration/concurrent.js generated vendored Normal file
View file

@ -0,0 +1,42 @@
let assert = require('assert');
let exec = require('child_process').execSync;
suite('concurrent', function () {
this.timeout(7000);
test(' simple concurrent prerequisites 1', function () {
let out = exec('./node_modules/.bin/jake -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()
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()
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()
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()
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');
}
catch(err) {
assert(err.message.indexOf('Command failed') > -1);
}
});
});

228
node_modules/jake/test/integration/file.js generated vendored Normal file
View file

@ -0,0 +1,228 @@
/*
* Jake JavaScript build tool
* Copyright 2112 Matthew Eernisse (mde@fleegix.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
const PROJECT_DIR = process.env.PROJECT_DIR;
let assert = require('assert');
let fs = require('fs');
let path = require('path');
let file = require(`${PROJECT_DIR}/lib/utils/file`);
let existsSync = fs.existsSync || path.existsSync;
let exec = require('child_process').execSync;
suite('fileUtils', function () {
test('mkdirP', function () {
let expected = [
['foo'],
['foo', 'bar'],
['foo', 'bar', 'baz'],
['foo', 'bar', 'baz', 'qux']
];
file.mkdirP('foo/bar/baz/qux');
let res = exec('find foo').toString().trim().split('\n');
for (let i = 0, ii = res.length; i < ii; i++) {
assert.equal(path.join.apply(path, expected[i]), res[i]);
}
file.rmRf('foo');
});
test('rmRf', function () {
file.mkdirP('foo/bar/baz/qux');
file.rmRf('foo/bar');
let res = exec('find foo').toString().trim().split('\n');
assert.equal(1, res.length);
assert.equal('foo', res[0]);
fs.rmdirSync('foo');
});
test('rmRf with symlink subdir', function () {
file.mkdirP('foo');
file.mkdirP('bar');
fs.writeFileSync('foo/hello.txt', 'hello, it\'s me');
fs.symlinkSync('../foo', 'bar/foo'); file.rmRf('bar');
// Make sure the bar directory was successfully deleted
let barDeleted = false;
try {
fs.statSync('bar');
} catch(err) {
if(err.code == 'ENOENT') {
barDeleted = true;
}
}
assert.equal(true, barDeleted);
// Make sure that the file inside the linked folder wasn't deleted
let res = fs.readdirSync('foo');
assert.equal(1, res.length);
assert.equal('hello.txt', res[0]);
// Cleanup
fs.unlinkSync('foo/hello.txt');
fs.rmdirSync('foo');
});
test('rmRf with symlinked dir', function () {
file.mkdirP('foo');
fs.writeFileSync('foo/hello.txt', 'hello!');
fs.symlinkSync('foo', 'bar');
file.rmRf('bar');
// Make sure the bar directory was successfully deleted
let barDeleted = false;
try {
fs.statSync('bar');
} catch(err) {
if(err.code == 'ENOENT') {
barDeleted = true;
}
}
assert.equal(true, barDeleted);
// Make sure that the file inside the linked folder wasn't deleted
let res = fs.readdirSync('foo');
assert.equal(1, res.length);
assert.equal('hello.txt', res[0]);
// Cleanup
fs.unlinkSync('foo/hello.txt');
fs.rmdirSync('foo');
});
test('cpR with same name and different directory', function () {
file.mkdirP('foo');
fs.writeFileSync('foo/bar.txt', 'w00t');
file.cpR('foo', 'bar');
assert.ok(existsSync('bar/bar.txt'));
file.rmRf('foo');
file.rmRf('bar');
});
test('cpR with same to and from will throw', function () {
assert.throws(function () {
file.cpR('foo.txt', 'foo.txt');
});
});
test('cpR rename via copy in directory', function () {
file.mkdirP('foo');
fs.writeFileSync('foo/bar.txt', 'w00t');
file.cpR('foo/bar.txt', 'foo/baz.txt');
assert.ok(existsSync('foo/baz.txt'));
file.rmRf('foo');
});
test('cpR rename via copy in base', function () {
fs.writeFileSync('bar.txt', 'w00t');
file.cpR('bar.txt', 'baz.txt');
assert.ok(existsSync('baz.txt'));
file.rmRf('bar.txt');
file.rmRf('baz.txt');
});
test('cpR keeps file mode', function () {
fs.writeFileSync('bar.txt', 'w00t', {mode: 0o750});
fs.writeFileSync('bar1.txt', 'w00t!', {mode: 0o744});
file.cpR('bar.txt', 'baz.txt');
file.cpR('bar1.txt', 'baz1.txt');
assert.ok(existsSync('baz.txt'));
assert.ok(existsSync('baz1.txt'));
let bazStat = fs.statSync('baz.txt');
let bazStat1 = fs.statSync('baz1.txt');
assert.equal(0o750, bazStat.mode & 0o7777);
assert.equal(0o744, bazStat1.mode & 0o7777);
file.rmRf('bar.txt');
file.rmRf('baz.txt');
file.rmRf('bar1.txt');
file.rmRf('baz1.txt');
});
test('cpR keeps file mode when overwriting with preserveMode', function () {
fs.writeFileSync('bar.txt', 'w00t', {mode: 0o755});
fs.writeFileSync('baz.txt', 'w00t!', {mode: 0o744});
file.cpR('bar.txt', 'baz.txt', {silent: true, preserveMode: true});
assert.ok(existsSync('baz.txt'));
let bazStat = fs.statSync('baz.txt');
assert.equal(0o755, bazStat.mode & 0o777);
file.rmRf('bar.txt');
file.rmRf('baz.txt');
});
test('cpR does not keep file mode when overwriting', function () {
fs.writeFileSync('bar.txt', 'w00t', {mode: 0o766});
fs.writeFileSync('baz.txt', 'w00t!', {mode: 0o744});
file.cpR('bar.txt', 'baz.txt');
assert.ok(existsSync('baz.txt'));
let bazStat = fs.statSync('baz.txt');
assert.equal(0o744, bazStat.mode & 0o777);
file.rmRf('bar.txt');
file.rmRf('baz.txt');
});
test('cpR copies file mode recursively', function () {
fs.mkdirSync('foo');
fs.writeFileSync('foo/bar.txt', 'w00t', {mode: 0o740});
file.cpR('foo', 'baz');
assert.ok(existsSync('baz'));
let barStat = fs.statSync('baz/bar.txt');
assert.equal(0o740, barStat.mode & 0o777);
file.rmRf('foo');
file.rmRf('baz');
});
test('cpR keeps file mode recursively', function () {
fs.mkdirSync('foo');
fs.writeFileSync('foo/bar.txt', 'w00t', {mode: 0o740});
fs.mkdirSync('baz');
fs.mkdirSync('baz/foo');
fs.writeFileSync('baz/foo/bar.txt', 'w00t!', {mode: 0o755});
file.cpR('foo', 'baz', {silent: true, preserveMode: true});
assert.ok(existsSync('baz'));
let barStat = fs.statSync('baz/foo/bar.txt');
assert.equal(0o740, barStat.mode & 0o777);
file.rmRf('foo');
file.rmRf('baz');
});
test('cpR copies directory mode recursively', function () {
fs.mkdirSync('foo', 0o755);
fs.mkdirSync('foo/bar', 0o700);
file.cpR('foo', 'bar');
assert.ok(existsSync('foo'));
let fooBarStat = fs.statSync('bar/bar');
assert.equal(0o700, fooBarStat.mode & 0o777);
file.rmRf('foo');
file.rmRf('bar');
});
});

125
node_modules/jake/test/integration/file_task.js generated vendored Normal file
View file

@ -0,0 +1,125 @@
/*
* Jake JavaScript build tool
* Copyright 2112 Matthew Eernisse (mde@fleegix.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
const PROJECT_DIR = process.env.PROJECT_DIR;
let assert = require('assert');
let fs = require('fs');
let exec = require('child_process').execSync;
let { rmRf } = require(`${PROJECT_DIR}/lib/jake`);
let cleanUpAndNext = function (callback) {
rmRf('./foo', {
silent: true
});
callback && callback();
};
suite('fileTask', function () {
this.timeout(7000);
setup(function () {
cleanUpAndNext();
});
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();
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();
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();
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
let data = fs.readFileSync(process.cwd() + '/foo/concat.txt');
assert.equal('src1src2', data.toString());
cleanUpAndNext();
});
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();
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();
// Second time should be a no-op
assert.equal('', out);
cleanUpAndNext();
});
test('where a file-task prereq does change, then does not', function (next) {
exec('mkdir -p ./foo');
exec('touch ./foo/from-src1.txt');
setTimeout(() => {
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();
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();
assert.equal('', out);
cleanUpAndNext(next);
}, 1000);
});
test('a preexisting file', function () {
let prereqData = 'howdy';
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();
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();
// Second time should be a no-op
assert.equal('', out);
cleanUpAndNext();
});
test('a preexisting file with --always-make flag', function () {
let prereqData = 'howdy';
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();
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();
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');
let data = fs.readFileSync(process.cwd() + '/foo/bar/baz/bamf.txt');
assert.equal('w00t', data);
cleanUpAndNext();
});
});

80
node_modules/jake/test/integration/helpers.js generated vendored Normal file
View file

@ -0,0 +1,80 @@
var exec = require('child_process').exec;
var helpers = new (function () {
var _tests;
var _names = [];
var _name;
var _callback;
var _runner = function () {
if ((_name = _names.shift())) {
console.log('Running ' + _name);
_tests[_name]();
}
else {
_callback();
}
};
this.exec = function () {
var args = Array.prototype.slice.call(arguments);
var arg;
var cmd = args.shift();
var opts = {};
var callback;
// Optional opts/callback or callback/opts
while ((arg = args.shift())) {
if (typeof arg == 'function') {
callback = arg;
}
else {
opts = arg;
}
}
cmd += ' --trace';
var execOpts = opts.execOpts ? opts.execOpts : {};
exec(cmd, execOpts, function (err, stdout, stderr) {
var out = helpers.trim(stdout);
if (err) {
if (opts.breakOnError === false) {
return callback(err);
}
else {
throw err;
}
}
if (stderr) {
callback(stderr);
}
else {
callback(out);
}
});
};
this.trim = function (s) {
var str = s || '';
return str.replace(/^\s*|\s*$/g, '');
};
this.parse = function (s) {
var str = s || '';
str = helpers.trim(str);
str = str.replace(/'/g, '"');
return JSON.parse(str);
};
this.run = function (tests, callback) {
_tests = tests;
_names = Object.keys(tests);
_callback = callback;
_runner();
};
this.next = function () {
_runner();
};
})();
module.exports = helpers;

337
node_modules/jake/test/integration/jakefile.js generated vendored Normal file
View file

@ -0,0 +1,337 @@
let fs = require('fs');
let Q = require('q');
desc('The default t.');
task('default', function () {
console.log('default task');
});
desc('No action.');
task({'noAction': ['default']});
desc('No action, no prereqs.');
task('noActionNoPrereqs');
desc('Top-level zerbofrangazoomy task');
task('zerbofrangazoomy', function () {
console.log('Whaaaaaaaa? Ran the zerbofrangazoomy task!')
});
desc('Task that throws');
task('throwy', function () {
let errorListener = function (err) {
console.log('Emitted');
console.log(err.toString());
jake.removeListener('error', errorListener);
};
jake.on('error', errorListener);
throw new Error('I am bad');
});
desc('Task that rejects a Promise');
task('promiseRejecter', function () {
const originalOption = jake.program.opts['allow-rejection'];
const errorListener = function (err) {
console.log(err.toString());
jake.removeListener('error', errorListener);
jake.program.opts['allow-rejection'] = originalOption; // Restore original 'allow-rejection' option
};
jake.on('error', errorListener);
jake.program.opts['allow-rejection'] = false; // Do not allow rejection so the rejection is passed to error handlers
Promise.reject('<promise rejected on purpose>');
});
desc('Accepts args and env vars.');
task('argsEnvVars', function () {
let res = {
args: arguments
, env: {
foo: process.env.foo
, baz: process.env.baz
}
};
console.log(JSON.stringify(res));
});
namespace('foo', function () {
desc('The foo:bar t.');
task('bar', function () {
if (arguments.length) {
console.log('foo:bar[' +
Array.prototype.join.call(arguments, ',') +
'] task');
}
else {
console.log('foo:bar task');
}
});
desc('The foo:baz task, calls foo:bar as a prerequisite.');
task('baz', ['foo:bar'], function () {
console.log('foo:baz task');
});
desc('The foo:qux task, calls foo:bar with cmdline args as a prerequisite.');
task('qux', ['foo:bar[asdf,qwer]'], function () {
console.log('foo:qux task');
});
desc('The foo:frang task,`invokes` foo:bar with passed args as a prerequisite.');
task('frang', function () {
let t = jake.Task['foo:bar'];
// Do args pass-through
t.invoke.apply(t, arguments);
t.on('complete', () => {
console.log('foo:frang task');
});
});
desc('The foo:zerb task, `executes` foo:bar with passed args as a prerequisite.');
task('zerb', function () {
let t = jake.Task['foo:bar'];
// Do args pass-through
t.execute.apply(t, arguments);
t.on('complete', () => {
console.log('foo:zerb task');
});
});
desc('The foo:zoobie task, has no prerequisites.');
task('zoobie', function () {
console.log('foo:zoobie task');
});
desc('The foo:voom task, run the foo:zoobie task repeatedly.');
task('voom', function () {
let t = jake.Task['foo:bar'];
t.on('complete', function () {
console.log('complete');
});
t.execute.apply(t);
t.execute.apply(t);
});
desc('The foo:asdf task, has the same prereq twice.');
task('asdf', ['foo:bar', 'foo:baz'], function () {
console.log('foo:asdf task');
});
});
namespace('bar', function () {
desc('The bar:foo task, has no prerequisites, is async, returns Promise which resolves.');
task('foo', async function () {
return new Promise((resolve, reject) => {
console.log('bar:foo task');
resolve();
});
});
desc('The bar:promise task has no prerequisites, is async, returns Q-based promise.');
task('promise', function () {
return Q()
.then(function () {
console.log('bar:promise task');
return 123654;
});
});
desc('The bar:dependOnpromise task waits for a promise based async test');
task('dependOnpromise', ['promise'], function () {
console.log('bar:dependOnpromise task saw value', jake.Task["bar:promise"].value);
});
desc('The bar:brokenPromise task is a failing Q-promise based async task.');
task('brokenPromise', function () {
return Q()
.then(function () {
throw new Error("nom nom nom");
});
});
desc('The bar:bar task, has the async bar:foo task as a prerequisite.');
task('bar', ['bar:foo'], function () {
console.log('bar:bar task');
});
});
namespace('hoge', function () {
desc('The hoge:hoge task, has no prerequisites.');
task('hoge', function () {
console.log('hoge:hoge task');
});
desc('The hoge:piyo task, has no prerequisites.');
task('piyo', function () {
console.log('hoge:piyo task');
});
desc('The hoge:fuga task, has hoge:hoge and hoge:piyo as prerequisites.');
task('fuga', ['hoge:hoge', 'hoge:piyo'], function () {
console.log('hoge:fuga task');
});
desc('The hoge:charan task, has hoge:fuga as a prerequisite.');
task('charan', ['hoge:fuga'], function () {
console.log('hoge:charan task');
});
desc('The hoge:gero task, has hoge:fuga as a prerequisite.');
task('gero', ['hoge:fuga'], function () {
console.log('hoge:gero task');
});
desc('The hoge:kira task, has hoge:charan and hoge:gero as prerequisites.');
task('kira', ['hoge:charan', 'hoge:gero'], function () {
console.log('hoge:kira task');
});
});
namespace('fileTest', function () {
directory('foo');
desc('File task, concatenating two files together');
file('foo/concat.txt', ['fileTest:foo', 'fileTest:foo/src1.txt', 'fileTest:foo/src2.txt'], function () {
console.log('fileTest:foo/concat.txt task');
let data1 = fs.readFileSync('foo/src1.txt');
let data2 = fs.readFileSync('foo/src2.txt');
fs.writeFileSync('foo/concat.txt', data1 + data2);
});
desc('File task, async creation with writeFile');
file('foo/src1.txt', function () {
return new Promise(function (resolve, reject) {
fs.writeFile('foo/src1.txt', 'src1', function (err) {
if (err) {
reject(err);
}
else {
console.log('fileTest:foo/src1.txt task');
resolve();
}
});
});
});
desc('File task, sync creation with writeFileSync');
file('foo/src2.txt', ['default'], function () {
fs.writeFileSync('foo/src2.txt', 'src2');
console.log('fileTest:foo/src2.txt task');
});
desc('File task, do not run unless the prereq file changes');
file('foo/from-src1.txt', ['fileTest:foo', 'fileTest:foo/src1.txt'], function () {
let data = fs.readFileSync('foo/src1.txt').toString();
fs.writeFileSync('foo/from-src1.txt', data);
console.log('fileTest:foo/from-src1.txt task');
});
desc('File task, run if the prereq file changes');
task('touch-prereq', function () {
fs.writeFileSync('foo/prereq.txt', 'UPDATED');
})
desc('File task, has a preexisting file (with no associated task) as a prereq');
file('foo/from-prereq.txt', ['fileTest:foo', 'foo/prereq.txt'], function () {
let data = fs.readFileSync('foo/prereq.txt');
fs.writeFileSync('foo/from-prereq.txt', data);
console.log('fileTest:foo/from-prereq.txt task');
});
directory('foo/bar/baz');
desc('Write a file in a nested subdirectory');
file('foo/bar/baz/bamf.txt', ['foo/bar/baz'], function () {
fs.writeFileSync('foo/bar/baz/bamf.txt', 'w00t');
});
});
task('blammo');
// Define task
task('voom', ['blammo'], function () {
console.log(this.prereqs.length);
});
// Modify, add a prereq
task('voom', ['noActionNoPrereqs']);
namespace('vronk', function () {
task('groo', function () {
let t = jake.Task['vronk:zong'];
t.addListener('error', function (e) {
console.log(e.message);
});
t.invoke();
});
task('zong', function () {
throw new Error('OMFGZONG');
});
});
// define namespace
namespace('one', function () {
task('one', function () {
console.log('one:one');
});
});
// modify namespace (add task)
namespace('one', function () {
task('two', ['one:one'], function () {
console.log('one:two');
});
});
task('selfdepconst', [], function () {
task('selfdep', ['selfdep'], function () {
console.log("I made a task that depends on itself");
});
});
task('selfdepdyn', function () {
task('selfdeppar', [], {concurrency: 2}, function () {
console.log("I will depend on myself and will fail at runtime");
});
task('selfdeppar', ['selfdeppar']);
jake.Task['selfdeppar'].invoke();
});
namespace("large", function () {
task("leaf", function () {
console.log("large:leaf");
});
const same = [];
for (let i = 0; i < 2000; i++) {
same.push("leaf");
}
desc("Task with a large number of same prereqs");
task("same", same, { concurrency: 2 }, function () {
console.log("large:same");
});
const different = [];
for (let i = 0; i < 2000; i++) {
const name = "leaf-" + i;
task(name, function () {
if (name === "leaf-12" || name === "leaf-123") {
console.log(name);
}
});
different.push(name);
}
desc("Task with a large number of different prereqs");
task("different", different, { concurrency: 2 } , function () {
console.log("large:different")
})
});

View file

@ -0,0 +1,113 @@
namespace('concurrent', function () {
task('A', function () {
console.log('Started A');
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('Finished A');
resolve();
}, 200);
});
});
task('B', function () {
console.log('Started B');
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('Finished B');
resolve();
}, 50);
});
});
task('C', function () {
console.log('Started C');
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('Finished C');
resolve();
}, 100);
});
});
task('D', function () {
console.log('Started D');
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('Finished D');
resolve();
}, 300);
});
});
task('Ba', ['A'], function () {
console.log('Started Ba');
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('Finished Ba');
resolve();
}, 50);
});
});
task('Afail', function () {
console.log('Started failing task');
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('Failing B with error');
throw new Error('I failed');
}, 50);
});
});
task('simple1', ['A','B'], {concurrency: 2}, function () {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve();
}, 50);
});
});
task('simple2', ['C','D'], {concurrency: 2}, function () {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve();
}, 50);
});
});
task('seqconcurrent', ['simple1','simple2'], function () {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve();
}, 50);
});
});
task('concurrentconcurrent', ['simple1','simple2'], {concurrency: 2}, function () {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve();
}, 50);
});
});
task('subdep', ['A','Ba'], {concurrency: 2}, function () {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve();
}, 50);
});
});
task('fail', ['A', 'B', 'Afail'], {concurrency: 3}, function () {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve();
}, 50);
});
});
});

View file

@ -0,0 +1,49 @@
/*
* Jake JavaScript build tool
* Copyright 2112 Matthew Eernisse (mde@fleegix.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
const PROJECT_DIR = process.env.PROJECT_DIR;
let fs = require('fs');
let { publishTask, rmRf, mkdirP } = require(`${PROJECT_DIR}/lib/jake`);
fs.writeFileSync('package.json', '{"version": "0.0.1"}');
mkdirP('tmp_publish');
fs.writeFileSync('tmp_publish/foo.txt', 'FOO');
publishTask('zerb', function () {
this.packageFiles.include([
'package.json'
, 'tmp_publish/**'
]);
this.publishCmd = 'node -p -e "\'%filename\'"';
this.gitCmd = 'echo'
this.scheduleDelay = 0;
this._ensureRepoClean = function () {};
this._getCurrentBranch = function () {
return 'v0.0'
};
});
jake.setTaskTimeout(5000);
jake.Task['publish'].on('complete', function () {
rmRf('tmp_publish', {silent: true});
rmRf('package.json', {silent: true});
});

View file

@ -0,0 +1,10 @@
let { task, namespace } = require("jake");
namespace('usingRequire', function () {
task('test', () => {
console.log('howdy test');
});
});

222
node_modules/jake/test/integration/jakelib/rule.jake.js generated vendored Normal file
View file

@ -0,0 +1,222 @@
/*
* Jake JavaScript build tool
* Copyright 2112 Matthew Eernisse (mde@fleegix.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
const PROJECT_DIR = process.env.PROJECT_DIR;
let exec = require('child_process').execSync;
let fs = require('fs');
let util = require('util');
let { rule, rmRf } = require(`${PROJECT_DIR}/lib/jake`);
directory('tmpsrc');
directory('tmpbin');
////////////////////////////////////////////////////////////
// Simple Suffix Rule
file('tmp', ['tmp_init', 'tmp_dep1.o', 'tmp_dep2.o'], function (params) {
console.log('tmp task');
let data1 = fs.readFileSync('tmp_dep1.o');
let data2 = fs.readFileSync('tmp_dep2.o');
fs.writeFileSync('tmp', data1 + data2);
});
rule('.o', '.c', function () {
let cmd = util.format('cp %s %s', this.source, this.name);
console.log(cmd + ' task');
exec(cmd);
});
file('tmp_dep1.c', function () {
fs.writeFileSync('tmp_dep1.c', 'src_1');
console.log('tmp_dep1.c task');
});
// note that tmp_dep2.o depends on tmp_dep2.c, which is a
// static file.
task('tmp_init', function () {
fs.writeFileSync('tmp_dep2.c', 'src_2');
console.log('tmp_dep2.c task');
});
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
// Pattern Rule
file('tmp_p', ['tmp_init', 'tmp_dep1.oo', 'tmp_dep2.oo'], function (params) {
console.log('tmp pattern task');
let data1 = fs.readFileSync('tmp_dep1.oo');
let data2 = fs.readFileSync('tmp_dep2.oo');
fs.writeFileSync('tmp_p', data1 + data2 + ' pattern');
});
rule('%.oo', '%.c', function () {
let cmd = util.format('cp %s %s', this.source, this.name);
console.log(cmd + ' task');
exec(cmd);
});
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
// Pattern Rule with Folder
// i.e. rule('tmpbin/%.oo', 'tmpsrc/%.c', ...
file('tmp_pf', [
'tmp_src_init'
, 'tmpbin'
, 'tmpbin/tmp_dep1.oo'
, 'tmpbin/tmp_dep2.oo' ], function (params) {
console.log('tmp pattern folder task');
let data1 = fs.readFileSync('tmpbin/tmp_dep1.oo');
let data2 = fs.readFileSync('tmpbin/tmp_dep2.oo');
fs.writeFileSync('tmp_pf', data1 + data2 + ' pattern folder');
});
rule('tmpbin/%.oo', 'tmpsrc/%.c', function () {
let cmd = util.format('cp %s %s', this.source, this.name);
console.log(cmd + ' task');
exec(cmd);
});
file('tmpsrc/tmp_dep2.c',['tmpsrc'], function () {
fs.writeFileSync('tmpsrc/tmp_dep2.c', 'src/src_2');
console.log('tmpsrc/tmp_dep2.c task');
});
// Create static files in folder tmpsrc.
task('tmp_src_init', ['tmpsrc'], function () {
fs.writeFileSync('tmpsrc/tmp_dep1.c', 'src/src_1');
console.log('tmpsrc/tmp_dep1.c task');
});
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
// Namespace Test. This is a Mixed Test.
// Test for
// - rules belonging to different namespace.
// - rules with folder and pattern
task('tmp_ns', [
'tmpbin'
, 'rule:init'
, 'tmpbin/tmp_dep2.oo' // *** This relies on a rule defined before.
, 'rule:tmpbin/dep1.oo'
, 'rule:tmpbin/file2.oo' ], function () {
console.log('tmp pattern folder namespace task');
let data1 = fs.readFileSync('tmpbin/dep1.oo');
let data2 = fs.readFileSync('tmpbin/tmp_dep2.oo');
let data3 = fs.readFileSync('tmpbin/file2.oo');
fs.writeFileSync('tmp_ns', data1 + data2 + data3 + ' pattern folder namespace');
});
namespace('rule', function () {
task('init', ['tmpsrc'], function () {
fs.writeFileSync('tmpsrc/file2.c', 'src/src_3');
console.log('tmpsrc/file2.c init task');
});
file('tmpsrc/dep1.c',['tmpsrc'], function () {
fs.writeFileSync('tmpsrc/dep1.c', 'src/src_1');
console.log('tmpsrc/dep1.c task');
}, {async: true});
rule('tmpbin/%.oo', 'tmpsrc/%.c', function () {
let cmd = util.format('cp %s %s', this.source, this.name);
console.log(cmd + ' ns task');
exec(cmd);
});
});
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
// Chain rule
// rule('tmpbin/%.pdf', 'tmpbin/%.dvi', function() { ...
// rule('tmpbin/%.dvi', 'tmpsrc/%.tex', ['tmpbin'], function() { ...
task('tmp_cr', [
'chainrule:init'
, 'chainrule:tmpbin/file1.pdf'
, 'chainrule:tmpbin/file2.pdf' ], function () {
console.log('tmp chainrule namespace task');
let data1 = fs.readFileSync('tmpbin/file1.pdf');
let data2 = fs.readFileSync('tmpbin/file2.pdf');
fs.writeFileSync('tmp_cr', data1 + data2 + ' chainrule namespace');
});
namespace('chainrule', function () {
task('init', ['tmpsrc', 'tmpbin'], function () {
fs.writeFileSync('tmpsrc/file1.tex', 'tex1 ');
fs.writeFileSync('tmpsrc/file2.tex', 'tex2 ');
console.log('chainrule init task');
});
rule('tmpbin/%.pdf', 'tmpbin/%.dvi', function () {
let cmd = util.format('cp %s %s', this.source, this.name);
console.log(cmd + ' dvi->pdf task');
exec(cmd);
});
rule('tmpbin/%.dvi', 'tmpsrc/%.tex', ['tmpbin'], function () {
let cmd = util.format('cp %s %s', this.source, this.name);
console.log(cmd + ' tex->dvi task');
exec(cmd);
});
});
////////////////////////////////////////////////////////////
namespace('precedence', function () {
task('test', ['foo.html'], function () {
console.log('ran test');
});
rule('.html', '.txt', function () {
console.log('created html');
let data = fs.readFileSync(this.source);
fs.writeFileSync(this.name, data.toString());
});
});
namespace('regexPattern', function () {
task('test', ['foo.html'], function () {
console.log('ran test');
});
rule(/\.html$/, '.txt', function () {
console.log('created html');
let data = fs.readFileSync(this.source);
fs.writeFileSync(this.name, data.toString());
});
});
namespace('sourceFunction', function () {
let srcFunc = function (taskName) {
return taskName.replace(/\.[^.]+$/, '.txt');
};
task('test', ['foo.html'], function () {
console.log('ran test');
});
rule('.html', srcFunc, function () {
console.log('created html');
let data = fs.readFileSync(this.source);
fs.writeFileSync(this.name, data.toString());
});
});
////////////////////////////////////////////////////////////
task('clean', function () {
rmRf('./foo');
rmRf('./tmp');
});

24
node_modules/jake/test/integration/publish_task.js generated vendored Normal file
View file

@ -0,0 +1,24 @@
let assert = require('assert');
let exec = require('child_process').execSync;
suite('publishTask', function () {
this.timeout(7000);
test('default task', function () {
let out = exec('./node_modules/.bin/jake -q publish').toString().trim();
let expected = [
'Fetched remote tags.'
, 'On branch v0.0'
, 'Bumped version number to v0.0.2.'
, 'Created package for zerb v0.0.2'
, 'Publishing zerb v0.0.2'
, './pkg/zerb-v0.0.2.tar.gz'
, 'BOOM! Published.'
, 'Cleaned up package'
].join('\n');
assert.equal(expected, out);
});
});

216
node_modules/jake/test/integration/rule.js generated vendored Normal file
View file

@ -0,0 +1,216 @@
/*
* Jake JavaScript build tool
* Copyright 2112 Matthew Eernisse (mde@fleegix.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
const PROJECT_DIR = process.env.PROJECT_DIR;
let assert = require('assert');
let exec = require('child_process').execSync;
let fs = require('fs');
let { Rule } = require(`${PROJECT_DIR}/lib/rule`);
let { rmRf } = require(`${PROJECT_DIR}/lib/jake`);
let cleanUpAndNext = function (callback) {
// Gotta add globbing to file utils rmRf
let tmpFiles = [
'tmp'
, 'tmp_ns'
, 'tmp_cr'
, 'tmp_p'
, 'tmp_pf'
, 'tmpbin'
, 'tmpsrc'
, 'tmp_dep1.c'
, 'tmp_dep1.o'
, 'tmp_dep1.oo'
, 'tmp_dep2.c'
, 'tmp_dep2.o'
, 'tmp_dep2.oo'
, 'foo'
, 'foo.html'
];
tmpFiles.forEach(function (f) {
rmRf(f, {
silent: true
});
});
callback && callback();
};
suite('rule', function () {
this.timeout(7000);
setup(function (next) {
cleanUpAndNext(next);
});
// - name foo:bin/main.o
// - pattern bin/%.o
// - source src/%.c
//
// return {
// 'dep' : 'foo:src/main.c',
// 'file': 'src/main.c'
// };
test('Rule.getSource', function () {
let src = Rule.getSource('foo:bin/main.o', 'bin/%.o', 'src/%.c');
assert.equal('foo:src/main.c', src);
});
test('rule w/o pattern', function () {
let out = exec( './node_modules/.bin/jake -q tmp').toString().trim();
let output = [
"tmp_dep2.c task"
, "tmp_dep1.c task"
, "cp tmp_dep1.c tmp_dep1.o task"
, "cp tmp_dep2.c tmp_dep2.o task"
, "tmp task"];
assert.equal( output.join('\n'), out);
let data = fs.readFileSync(process.cwd() + '/tmp');
assert.equal('src_1src_2', data.toString());
cleanUpAndNext();
});
test('rule w pattern w/o folder w/o namespace', function () {
let out = exec( './node_modules/.bin/jake -q tmp_p').toString().trim();
let output = [
"tmp_dep2.c task"
, "tmp_dep1.c task"
, "cp tmp_dep1.c tmp_dep1.oo task"
, "cp tmp_dep2.c tmp_dep2.oo task"
, "tmp pattern task"];
let data;
assert.equal( output.join('\n'), out);
data = fs.readFileSync(process.cwd() + '/tmp_p');
assert.equal('src_1src_2 pattern', data.toString());
cleanUpAndNext();
});
test('rule w pattern w folder w/o namespace', function () {
let out = exec( './node_modules/.bin/jake -q tmp_pf').toString().trim();
let output = [
"tmpsrc/tmp_dep1.c task"
, "cp tmpsrc/tmp_dep1.c tmpbin/tmp_dep1.oo task"
, "tmpsrc/tmp_dep2.c task"
, "cp tmpsrc/tmp_dep2.c tmpbin/tmp_dep2.oo task"
, "tmp pattern folder task"];
let data;
assert.equal( output.join('\n'), out);
data = fs.readFileSync(process.cwd() + '/tmp_pf');
assert.equal('src/src_1src/src_2 pattern folder', data.toString());
cleanUpAndNext();
});
test.skip('rule w pattern w folder w namespace', function () {
let out = exec( './node_modules/.bin/jake -q tmp_ns').toString().trim();
let output = [
"tmpsrc/file2.c init task" // yes
, "tmpsrc/tmp_dep2.c task" // no
, "cp tmpsrc/tmp_dep2.c tmpbin/tmp_dep2.oo task" // no
, "tmpsrc/dep1.c task" // no
, "cp tmpsrc/dep1.c tmpbin/dep1.oo ns task" // no
, "cp tmpsrc/file2.c tmpbin/file2.oo ns task" // yes
, "tmp pattern folder namespace task"]; // yes
let data;
assert.equal( output.join('\n'), out);
data = fs.readFileSync(process.cwd() + '/tmp_ns');
assert.equal('src/src_1src/src_2src/src_3 pattern folder namespace', data.toString());
cleanUpAndNext();
});
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 output = [
"chainrule init task"
, "cp tmpsrc/file1.tex tmpbin/file1.dvi tex->dvi task"
, "cp tmpbin/file1.dvi tmpbin/file1.pdf dvi->pdf task"
, "cp tmpsrc/file2.tex tmpbin/file2.dvi tex->dvi task"
, "cp tmpbin/file2.dvi tmpbin/file2.pdf dvi->pdf task"
, "tmp chainrule namespace task"];
let data;
assert.equal( output.join('\n'), out);
data = fs.readFileSync(process.cwd() + '/tmp_cr');
assert.equal('tex1 tex2 chainrule namespace', data.toString());
cleanUpAndNext();
});
['precedence', 'regexPattern', 'sourceFunction'].forEach(function (key) {
test('rule with source file not created yet (' + key + ')', function () {
let write = process.stderr.write;
process.stderr.write = () => {};
rmRf('foo.txt', {silent: true});
rmRf('foo.html', {silent: true});
try {
exec('./node_modules/.bin/jake ' + key + ':test');
}
catch(err) {
// foo.txt prereq doesn't exist yet
assert.ok(err.message.indexOf('Unknown task "foo.html"') > -1);
}
process.stderr.write = write;
});
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();
// Should run prereq and test task
let output = [
'created html'
, 'ran test'
];
assert.equal(output.join('\n'), out);
});
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();
// Should again run both prereq and test task
let output = [
'created html'
, 'ran test'
];
assert.equal(output.join('\n'), out);
//next();
cleanUpAndNext(next);
}, 1000); // Wait to do the touch to ensure mod-time is different
});
test('rule with existing objective file and no source ' +
' (should be normal file-task) (' + key + ')', 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();
// Should treat existing objective file as plain file-task,
// and just run test-task
let output = [
'ran test'
];
assert.equal(output.join('\n'), out);
cleanUpAndNext();
});
});
});

39
node_modules/jake/test/integration/selfdep.js generated vendored Normal file
View file

@ -0,0 +1,39 @@
let assert = require('assert');
let exec = require('child_process').execSync;
suite('selfDep', function () {
this.timeout(7000);
let origStderrWrite;
setup(function () {
origStderrWrite = process.stderr.write;
process.stderr.write = function () {};
});
teardown(function () {
process.stderr.write = origStderrWrite;
});
test('self dep const', function () {
try {
exec('./node_modules/.bin/jake selfdepconst');
}
catch(e) {
assert(e.message.indexOf('dependency of itself') > -1)
}
});
test('self dep dyn', function () {
try {
exec('./node_modules/.bin/jake selfdepdyn');
}
catch(e) {
assert(e.message.indexOf('dependency of itself') > -1)
}
});
});

164
node_modules/jake/test/integration/task_base.js generated vendored Normal file
View file

@ -0,0 +1,164 @@
let assert = require('assert');
let h = require('./helpers');
let exec = require('child_process').execSync;
suite('taskBase', function () {
this.timeout(7000);
test('default task', function () {
let out;
out = exec('./node_modules/.bin/jake -q').toString().trim();
assert.equal(out, 'default task');
out = exec('./node_modules/.bin/jake -q default').toString().trim();
assert.equal(out, 'default task');
});
test('task with no action', function () {
let out = exec('./node_modules/.bin/jake -q noAction').toString().trim();
assert.equal(out, 'default task');
});
test('a task with no action and no prereqs', function () {
exec('./node_modules/.bin/jake noActionNoPrereqs');
});
test('a task that exists at the top-level, and not in the specified namespace, should error', function () {
let res = require('child_process').spawnSync('./node_modules/.bin/jake',
['asdfasdfasdf:zerbofrangazoomy']);
let err = res.stderr.toString();
assert.ok(err.indexOf('Unknown task' > -1));
});
test('passing args to a task', function () {
let out = exec('./node_modules/.bin/jake -q argsEnvVars[foo,bar]').toString().trim();
let parsed = h.parse(out);
let args = parsed.args;
assert.equal(args[0], 'foo');
assert.equal(args[1], 'bar');
});
test('a task with environment vars', function () {
let out = exec('./node_modules/.bin/jake -q argsEnvVars foo=bar baz=qux').toString().trim();
let parsed = h.parse(out);
let env = parsed.env;
assert.equal(env.foo, 'bar');
assert.equal(env.baz, 'qux');
});
test('passing args and using environment vars', function () {
let out = exec('./node_modules/.bin/jake -q argsEnvVars[foo,bar] foo=bar baz=qux').toString().trim();
let parsed = h.parse(out);
let args = parsed.args;
let env = parsed.env;
assert.equal(args[0], 'foo');
assert.equal(args[1], 'bar');
assert.equal(env.foo, 'bar');
assert.equal(env.baz, 'qux');
});
test('a simple prereq', function () {
let out = exec('./node_modules/.bin/jake -q foo:baz').toString().trim();
assert.equal(out, 'foo:bar task\nfoo:baz task');
});
test('a duplicate prereq only runs once', function () {
let out = exec('./node_modules/.bin/jake -q foo:asdf').toString().trim();
assert.equal(out, 'foo:bar task\nfoo:baz task\nfoo:asdf task');
});
test('a prereq with command-line args', function () {
let out = exec('./node_modules/.bin/jake -q foo:qux').toString().trim();
assert.equal(out, 'foo:bar[asdf,qwer] task\nfoo:qux task');
});
test('a prereq with args via invoke', function () {
let out = exec('./node_modules/.bin/jake -q foo:frang[zxcv,uiop]').toString().trim();
assert.equal(out, 'foo:bar[zxcv,uiop] task\nfoo:frang task');
});
test('a prereq with args via execute', function () {
let out = exec('./node_modules/.bin/jake -q foo:zerb[zxcv,uiop]').toString().trim();
assert.equal(out, 'foo:bar[zxcv,uiop] task\nfoo:zerb task');
});
test('repeating the task via execute', function () {
let out = exec('./node_modules/.bin/jake -q foo:voom').toString().trim();
assert.equal(out, 'foo:bar task\nfoo:bar task\ncomplete\ncomplete');
});
test('prereq execution-order', function () {
let out = exec('./node_modules/.bin/jake -q hoge:fuga').toString().trim();
assert.equal(out, 'hoge:hoge task\nhoge:piyo task\nhoge:fuga task');
});
test('basic async task', function () {
let out = exec('./node_modules/.bin/jake -q bar:bar').toString().trim();
assert.equal(out, 'bar:foo task\nbar:bar task');
});
test('promise async task', function () {
let out = exec('./node_modules/.bin/jake -q bar:dependOnpromise').toString().trim();
assert.equal(out, 'bar:promise task\nbar:dependOnpromise task saw value 123654');
});
test('failing promise async task', function () {
try {
exec('./node_modules/.bin/jake -q bar:brokenPromise');
}
catch(e) {
assert(e.message.indexOf('Command failed') > -1);
}
});
test('that current-prereq index gets reset', function () {
let out = exec('./node_modules/.bin/jake -q hoge:kira').toString().trim();
assert.equal(out, 'hoge:hoge task\nhoge:piyo task\nhoge:fuga task\n' +
'hoge:charan task\nhoge:gero task\nhoge:kira task');
});
test('modifying a task by adding prereq during execution', function () {
let out = exec('./node_modules/.bin/jake -q voom').toString().trim();
assert.equal(out, 2);
});
test('listening for task error-event', function () {
try {
exec('./node_modules/.bin/jake -q vronk:groo').toString().trim();
}
catch(e) {
assert(e.message.indexOf('OMFGZONG') > -1);
}
});
test('listening for jake error-event', function () {
let out = exec('./node_modules/.bin/jake -q throwy').toString().trim();
assert(out.indexOf('Emitted\nError: I am bad') > -1);
});
test('listening for jake unhandledRejection-event', function () {
let out = exec('./node_modules/.bin/jake -q promiseRejecter').toString().trim();
assert.equal(out, '<promise rejected on purpose>');
});
test('large number of same prereqs', function () {
let out = exec('./node_modules/.bin/jake -q large:same').toString().trim();
assert.equal(out, 'large:leaf\nlarge:same');
});
test('large number of different prereqs', function () {
let out = exec('./node_modules/.bin/jake -q large:different').toString().trim();
assert.equal(out, 'leaf-12\nleaf-123\nlarge:different');
});
test('large number of different prereqs', function () {
let out = exec('./node_modules/.bin/jake -q usingRequire:test').toString().trim();
assert.equal(out, 'howdy test');
});
test('modifying a namespace by adding a new task', function () {
let out = exec('./node_modules/.bin/jake -q one:two').toString().trim();
assert.equal('one:one\none:two', out);
});
});

36
node_modules/jake/test/unit/jakefile.js generated vendored Normal file
View file

@ -0,0 +1,36 @@
task('foo', function () {
console.log('ran top-level foo');
});
task('bar', function () {
console.log('ran top-level bar');
});
task('zerb', function () {
console.log('ran zerb');
});
namespace('zooby', function () {
task('zerp', function () {});
task('derp', ['zerp'], function () {});
namespace('frang', function () {
namespace('w00t', function () {
task('bar', function () {
console.log('ran zooby:frang:w00t:bar');
});
});
task('asdf', function () {});
});
});
namespace('hurr', function () {
namespace('durr');
});

77
node_modules/jake/test/unit/namespace.js generated vendored Normal file
View file

@ -0,0 +1,77 @@
/*
* Jake JavaScript build tool
* Copyright 2112 Matthew Eernisse (mde@fleegix.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
const PROJECT_DIR = process.env.PROJECT_DIR;
// Load the jake global
require(`${PROJECT_DIR}/lib/jake`);
let { Namespace } = require(`${PROJECT_DIR}/lib/namespace`);
require('./jakefile');
let assert = require('assert');
suite('namespace', function () {
this.timeout(7000);
test('resolve namespace by relative name', function () {
let aaa, bbb, ccc;
aaa = namespace('aaa', function () {
bbb = namespace('bbb', function () {
ccc = namespace('ccc', function () {
});
});
});
assert.ok(aaa, Namespace.ROOT_NAMESPACE.resolveNamespace('aaa'));
assert.ok(bbb === aaa.resolveNamespace('bbb'));
assert.ok(ccc === aaa.resolveNamespace('bbb:ccc'));
});
test('resolve task in sub-namespace by relative path', function () {
let curr = Namespace.ROOT_NAMESPACE.resolveNamespace('zooby');
let task = curr.resolveTask('frang:w00t:bar');
assert.ok(task.action.toString().indexOf('zooby:frang:w00t:bar') > -1);
});
test('prefer local to top-level', function () {
let curr = Namespace.ROOT_NAMESPACE.resolveNamespace('zooby:frang:w00t');
let task = curr.resolveTask('bar');
assert.ok(task.action.toString().indexOf('zooby:frang:w00t:bar') > -1);
});
test('does resolve top-level', function () {
let curr = Namespace.ROOT_NAMESPACE.resolveNamespace('zooby:frang:w00t');
let task = curr.resolveTask('foo');
assert.ok(task.action.toString().indexOf('top-level foo') > -1);
});
test('absolute lookup works from sub-namespaces', function () {
let curr = Namespace.ROOT_NAMESPACE.resolveNamespace('hurr:durr');
let task = curr.resolveTask('zooby:frang:w00t:bar');
assert.ok(task.action.toString().indexOf('zooby:frang:w00t:bar') > -1);
});
test('resolution miss with throw error', function () {
let curr = Namespace.ROOT_NAMESPACE;
let task = curr.resolveTask('asdf:qwer');
assert.ok(!task);
});
});

169
node_modules/jake/test/unit/parseargs.js generated vendored Normal file
View file

@ -0,0 +1,169 @@
/*
* Jake JavaScript build tool
* Copyright 2112 Matthew Eernisse (mde@fleegix.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
const PROJECT_DIR = process.env.PROJECT_DIR;
let parseargs = require(`${PROJECT_DIR}/lib/parseargs`);
let assert = require('assert');
let optsReg = [
{ full: 'directory',
abbr: 'C',
preempts: false,
expectValue: true
},
{ full: 'jakefile',
abbr: 'f',
preempts: false,
expectValue: true
},
{ full: 'tasks',
abbr: 'T',
preempts: true
},
{ full: 'tasks',
abbr: 'ls',
preempts: true
},
{ full: 'trace',
abbr: 't',
preempts: false,
expectValue: false
},
{ full: 'help',
abbr: 'h',
preempts: true
},
{ full: 'version',
abbr: 'V',
preempts: true
}
];
let p = new parseargs.Parser(optsReg);
let z = function (s) { return s.split(' '); };
let res;
suite('parseargs', function () {
test('long preemptive opt and val with equal-sign, ignore further opts', function () {
res = p.parse(z('--tasks=foo --jakefile=asdf'));
assert.equal('foo', res.opts.tasks);
assert.equal(undefined, res.opts.jakefile);
});
test('long preemptive opt and val without equal-sign, ignore further opts', function () {
res = p.parse(z('--tasks foo --jakefile=asdf'));
assert.equal('foo', res.opts.tasks);
assert.equal(undefined, res.opts.jakefile);
});
test('long preemptive opt and no val, ignore further opts', function () {
res = p.parse(z('--tasks --jakefile=asdf'));
assert.equal(true, res.opts.tasks);
assert.equal(undefined, res.opts.jakefile);
});
test('preemptive opt with no val, should be true', function () {
res = p.parse(z('-T'));
assert.equal(true, res.opts.tasks);
});
test('preemptive opt with no val, should be true and ignore further opts', function () {
res = p.parse(z('-T -f'));
assert.equal(true, res.opts.tasks);
assert.equal(undefined, res.opts.jakefile);
});
test('preemptive opt with val, should be val', function () {
res = p.parse(z('-T zoobie -f foo/bar/baz'));
assert.equal('zoobie', res.opts.tasks);
assert.equal(undefined, res.opts.jakefile);
});
test('-f expects a value, -t does not (howdy is task-name)', function () {
res = p.parse(z('-f zoobie -t howdy'));
assert.equal('zoobie', res.opts.jakefile);
assert.equal(true, res.opts.trace);
assert.equal('howdy', res.taskNames[0]);
});
test('different order, -f expects a value, -t does not (howdy is task-name)', function () {
res = p.parse(z('-f zoobie howdy -t'));
assert.equal('zoobie', res.opts.jakefile);
assert.equal(true, res.opts.trace);
assert.equal('howdy', res.taskNames[0]);
});
test('-f expects a value, -t does not (foo=bar is env var)', function () {
res = p.parse(z('-f zoobie -t foo=bar'));
assert.equal('zoobie', res.opts.jakefile);
assert.equal(true, res.opts.trace);
assert.equal('bar', res.envVars.foo);
assert.equal(undefined, res.taskNames[0]);
});
test('-f expects a value, -t does not (foo=bar is env-var, task-name follows)', function () {
res = p.parse(z('-f zoobie -t howdy foo=bar'));
assert.equal('zoobie', res.opts.jakefile);
assert.equal(true, res.opts.trace);
assert.equal('bar', res.envVars.foo);
assert.equal('howdy', res.taskNames[0]);
});
test('-t does not expect a value, -f does (howdy is task-name)', function () {
res = p.parse(z('-t howdy -f zoobie'));
assert.equal(true, res.opts.trace);
assert.equal('zoobie', res.opts.jakefile);
assert.equal('howdy', res.taskNames[0]);
});
test('--trace does not expect a value, -f does (howdy is task-name)', function () {
res = p.parse(z('--trace howdy --jakefile zoobie'));
assert.equal(true, res.opts.trace);
assert.equal('zoobie', res.opts.jakefile);
assert.equal('howdy', res.taskNames[0]);
});
test('--trace does not expect a value (equal), -f does (throw howdy away)', function () {
res = p.parse(z('--trace=howdy --jakefile=zoobie'));
assert.equal(true, res.opts.trace);
assert.equal('zoobie', res.opts.jakefile);
assert.equal(undefined, res.taskNames[0]);
});
/*
, test('task-name with positional args', function () {
res = p.parse(z('foo:bar[asdf,qwer]'));
assert.equal('asdf', p.taskArgs[0]);
assert.equal('qwer', p.taskArgs[1]);
}
, test('opts, env vars, task-name with positional args', function () {
res = p.parse(z('-f ./tests/Jakefile -t default[asdf,qwer] foo=bar'));
assert.equal('./tests/Jakefile', res.opts.jakefile);
assert.equal(true, res.opts.trace);
assert.equal('bar', res.envVars.foo);
assert.equal('default', res.taskName);
assert.equal('asdf', p.taskArgs[0]);
assert.equal('qwer', p.taskArgs[1]);
}
*/
});