| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228 |
- var assert = require('assert')
- , fs = require('fs')
- , path = require('path')
- , exec = require('child_process').exec
- , h = require('./helpers')
- , Matcher = require('../lib/rule').Matcher
- , utils = require('utilities');
- var cleanUpAndNext = function (callback) {
- // Gotta add globbing to file utils rmRf
- var 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) {
- utils.file.rmRf(f, {
- silent: true
- });
- });
- callback();
- };
- var tests = {
- 'before': function (next) {
- process.chdir('./test');
- cleanUpAndNext(next);
- }
- , 'after': function () {
- process.chdir('../');
- }
- // - name foo:bin/main.o
- // - pattern bin/%.o
- // - source src/%.c
- //
- // return {
- // 'dep' : 'foo:src/main.c',
- // 'file': 'src/main.c'
- // };
- , 'test Matcher.getSource': function () {
- var src = Matcher.getSource('foo:bin/main.o', 'bin/%.o', 'src/%.c');
- assert.equal('foo:src/main.c', src);
- }
- , 'test rule w/o pattern': function (next) {
- h.exec( '../bin/cli.js -f Jakefile.rule tmp', function (out) {
- var 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" ];
- var data;
- assert.equal( output.join('\n') , out);
- data = fs.readFileSync(process.cwd() + '/tmp');
- assert.equal('src_1src_2', data.toString());
- cleanUpAndNext(next);
- });
- }
- , 'test rule w pattern w/o folder w/o namespace': function (next) {
- h.exec( '../bin/cli.js -f Jakefile.rule tmp_p', function (out) {
- var 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" ];
- var data;
- assert.equal( output.join('\n') , out);
- data = fs.readFileSync(process.cwd() + '/tmp_p');
- assert.equal('src_1src_2 pattern', data.toString());
- cleanUpAndNext(next);
- });
- }
- , 'test rule w pattern w folder w/o namespace': function (next) {
- h.exec( '../bin/cli.js -f Jakefile.rule tmp_pf', function (out) {
- var 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" ];
- var 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(next);
- });
- }
- , 'test rule w pattern w folder w namespace': function (next) {
- h.exec( '../bin/cli.js -f Jakefile.rule tmp_ns', function (out) {
- var output = [
- "tmpsrc/file2.c init task"
- , "tmpsrc/tmp_dep2.c task"
- , "cp tmpsrc/tmp_dep2.c tmpbin/tmp_dep2.oo task"
- , "tmpsrc/dep1.c task"
- , "cp tmpsrc/dep1.c tmpbin/dep1.oo ns task"
- , "cp tmpsrc/file2.c tmpbin/file2.oo ns task"
- , "tmp pattern folder namespace task" ];
- var 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(next);
- });
- }
- , 'test rule w chain w pattern w folder w namespace': function (next) {
- h.exec( '../bin/cli.js -f Jakefile.rule tmp_cr', function (out) {
- var 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" ];
- var data;
- assert.equal( output.join('\n') , out);
- data = fs.readFileSync(process.cwd() + '/tmp_cr');
- assert.equal('tex1 tex2 chainrule namespace', data.toString());
- cleanUpAndNext(next);
- });
- }
- };
- ['precedence', 'regexPattern', 'sourceFunction'].forEach(function (key) {
- tests['test rule with source file not created yet (' + key + ')'] = function (next) {
- utils.file.rmRf('foo.txt', {silent: true});
- utils.file.rmRf('foo.html', {silent: true});
- h.exec('../bin/cli.js -f Jakefile.rule ' + key + ':test', {breakOnError: false},
- function (out) {
- // foo.txt prereq doesn't exist yet
- assert.ok(out.toString().indexOf('Unknown task "foo.html"') > -1);
- next();
- });
- };
- tests['test rule with source file now created (' + key + ')'] = function (next) {
- fs.writeFileSync('foo.txt', '');
- h.exec('../bin/cli.js -f Jakefile.rule ' + key + ':test', function (out) {
- // Should run prereq and test task
- var output = [
- 'created html'
- , 'ran test'
- ];
- assert.equal(output.join('\n'), out);
- next();
- });
- };
- /*
- tests['test rule with objective file now created (' + key + ')'] = function (next) {
- fs.writeFileSync('foo.txt', '');
- h.exec('../bin/cli.js -f Jakefile.rule ' + key + ':test', function (out) {
- // Should only run test task
- var output = [
- 'ran test'
- ];
- assert.equal(output.join('\n'), out);
- next();
- });
- };
- */
- tests['test rule with source file modified (' + key + ')'] = function (next) {
- setTimeout(function () {
- fs.writeFile('foo.txt', '', function (err, data) {
- if (err) {
- throw err;
- }
- h.exec('../bin/cli.js -f Jakefile.rule ' + key + ':test', function (out) {
- // Should again run both prereq and test task
- var 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
- };
- tests['test rule with existing objective file and no source ' +
- ' (should be normal file-task) (' + key + ')'] = function (next) {
- // Remove just the source file
- fs.writeFileSync('foo.html', '');
- utils.file.rmRf('foo.txt', {silent: true});
- h.exec('../bin/cli.js -f Jakefile.rule ' + key + ':test', function (out) {
- // Should treat existing objective file as plain file-task,
- // and just run test-task
- var output = [
- 'ran test'
- ];
- assert.equal(output.join('\n'), out);
- cleanUpAndNext(next);
- });
- };
- });
- module.exports = tests;
|