mirror of
https://github.com/shelljs/shelljs.git
synced 2026-01-18 16:03:37 +00:00
144 lines
4.0 KiB
JavaScript
144 lines
4.0 KiB
JavaScript
var shell = require('..');
|
|
var assert = require('assert');
|
|
var fs = require('fs');
|
|
var crypto = require('crypto');
|
|
|
|
shell.config.silent = true;
|
|
shell.rm('-rf', 'tmp');
|
|
shell.mkdir('tmp');
|
|
|
|
var oldStat;
|
|
var testFile;
|
|
|
|
// should handle args
|
|
var result = shell.touch();
|
|
assert.ok(shell.error());
|
|
assert.equal(result.code, 1);
|
|
|
|
result = shell.touch(1);
|
|
assert.ok(shell.error());
|
|
assert.equal(result.code, 1);
|
|
|
|
// exits without error when trying to touch a directory
|
|
result = shell.touch('tmp/');
|
|
assert.ok(!shell.error());
|
|
assert.equal(result.code, 0);
|
|
result = shell.touch('tmp');
|
|
assert.ok(!shell.error());
|
|
assert.equal(result.code, 0);
|
|
|
|
// creates new files
|
|
var testFile = tmpFile();
|
|
result = shell.touch(testFile);
|
|
assert(fs.existsSync(testFile));
|
|
|
|
// does not create a file if told not to
|
|
var testFile = tmpFile(true);
|
|
result = shell.touch('-c', testFile);
|
|
assert.equal(result.code, 0);
|
|
assert.ok(!fs.existsSync(testFile));
|
|
|
|
// handles globs correctly
|
|
result = shell.touch('tmp/file.txt');
|
|
result = shell.touch('tmp/file.js');
|
|
result = shell.touch('tmp/file*');
|
|
assert.equal(result.code, 0);
|
|
var files = shell.ls('tmp/file*');
|
|
assert.ok(files.indexOf('tmp/file.txt') > -1);
|
|
assert.ok(files.indexOf('tmp/file.js') > -1);
|
|
assert.equal(files.length, 2);
|
|
|
|
// errors if reference file is not found
|
|
var testFile = tmpFile();
|
|
var refFile = tmpFile(true);
|
|
result = shell.touch({'-r': refFile}, testFile);
|
|
assert.equal(result.code, 1);
|
|
assert.ok(shell.error());
|
|
|
|
// uses a reference file for mtime
|
|
var testFile = tmpFile(false);
|
|
var testFile2 = tmpFile();
|
|
shell.touch(testFile2);
|
|
shell.exec(JSON.stringify(process.execPath)+' resources/exec/slow.js 3000');
|
|
result = shell.touch(testFile);
|
|
assert.ok(!shell.error());
|
|
assert.equal(result.code, 0);
|
|
assert.notEqual(fs.statSync(testFile).mtime.getTime(), fs.statSync(testFile2).mtime.getTime());
|
|
assert.notEqual(fs.statSync(testFile).atime.getTime(), fs.statSync(testFile2).atime.getTime());
|
|
result = shell.touch({'-r': testFile2}, testFile);
|
|
assert.ok(!shell.error());
|
|
assert.equal(result.code, 0);
|
|
assert.equal(fs.statSync(testFile).mtime.getTime(), fs.statSync(testFile2).mtime.getTime());
|
|
assert.equal(fs.statSync(testFile).atime.getTime(), fs.statSync(testFile2).atime.getTime());
|
|
|
|
// sets mtime
|
|
testFile = tmpFile();
|
|
oldStat = resetUtimes(testFile);
|
|
result = shell.touch(testFile);
|
|
assert.equal(result.code, 0);
|
|
assert(oldStat.mtime < fs.statSync(testFile).mtime);
|
|
// sets atime
|
|
assert(oldStat.atime < fs.statSync(testFile).atime);
|
|
|
|
// does not sets mtime if told not to
|
|
testFile = tmpFile();
|
|
oldStat = resetUtimes(testFile);
|
|
result = shell.touch('-a', testFile);
|
|
assert.equal(result.code, 0);
|
|
assert.equal(oldStat.mtime.getTime(), fs.statSync(testFile).mtime.getTime());
|
|
|
|
// does not sets atime if told not to
|
|
testFile = tmpFile();
|
|
oldStat = resetUtimes(testFile);
|
|
result = shell.touch('-m', testFile);
|
|
assert.equal(result.code, 0);
|
|
assert.equal(oldStat.atime.getTime(), fs.statSync(testFile).atime.getTime());
|
|
|
|
// multiple files
|
|
testFile = tmpFile(true);
|
|
testFile2 = tmpFile(true);
|
|
shell.rm('-f', testFile, testFile2);
|
|
result = shell.touch(testFile, testFile2);
|
|
assert.equal(result.code, 0);
|
|
assert(fs.existsSync(testFile));
|
|
assert(fs.existsSync(testFile2));
|
|
|
|
// file array
|
|
testFile = tmpFile(true);
|
|
testFile2 = tmpFile(true);
|
|
shell.rm('-f', testFile, testFile2);
|
|
result = shell.touch([testFile, testFile2]);
|
|
assert.equal(result.code, 0);
|
|
assert(fs.existsSync(testFile));
|
|
assert(fs.existsSync(testFile2));
|
|
|
|
// touching broken link creates a new file
|
|
if (process.platform !== 'win32') {
|
|
result = shell.touch('resources/badlink');
|
|
assert.equal(result.code, 0);
|
|
assert.ok(!shell.error());
|
|
assert.ok(fs.existsSync('resources/not_existed_file'));
|
|
shell.rm('resources/not_existed_file');
|
|
}
|
|
|
|
function resetUtimes(f) {
|
|
var d = new Date();
|
|
d.setYear(2000);
|
|
fs.utimesSync(f, d, d);
|
|
return fs.statSync(f);
|
|
}
|
|
|
|
function tmpFile(noCreate) {
|
|
var str = crypto.randomBytes(Math.ceil(10 / 2)).toString('hex');
|
|
var file = 'tmp/' + str;
|
|
if (!noCreate) {
|
|
fs.closeSync(fs.openSync(file, 'a'));
|
|
}
|
|
return file;
|
|
}
|
|
|
|
|
|
// required for the test runner
|
|
shell.exit(123);
|
|
|