From 922f1d76390f41a8522e71ad0b79279a5f5156b4 Mon Sep 17 00:00:00 2001 From: James Campos Date: Fri, 7 Sep 2012 23:07:01 -0700 Subject: [PATCH 1/8] refactor _test --- shell.js | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/shell.js b/shell.js index 8136901..b8f4d9a 100644 --- a/shell.js +++ b/shell.js @@ -533,14 +533,27 @@ function _test(options, path) { 'd': 'directory', 'f': 'file' }); - if (!options.directory && !options.file) + + var canInterpret = false; + for (var key in options) + if (options[key] === true) { + canInterpret = true; + break; + } + + if (!canInterpret) error('could not interpret expression'); + if (!fs.existsSync(path)) + return false; + + stats = fs.lstatSync(path); + if (options.directory) - return fs.existsSync(path) && fs.statSync(path).isDirectory(); + return stats.isDirectory(); if (options.file) - return fs.existsSync(path) && fs.statSync(path).isFile(); + return stats.isFile(); }; // test exports.test = wrap('test', _test); From faaffca2a7551cae5228b605f3d2f8e4aa56ad39 Mon Sep 17 00:00:00 2001 From: James Campos Date: Fri, 7 Sep 2012 23:54:22 -0700 Subject: [PATCH 2/8] add primaries to _test --- shell.js | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/shell.js b/shell.js index b8f4d9a..5822844 100644 --- a/shell.js +++ b/shell.js @@ -530,8 +530,13 @@ function _test(options, path) { // hack - only works with unary primaries options = parseOptions(options, { + 'b': 'block', + 'c': 'character', 'd': 'directory', - 'f': 'file' + 'f': 'file', + 'L': 'link', + 'p': 'pipe', + 'S': 'socket' }); var canInterpret = false; @@ -549,11 +554,26 @@ function _test(options, path) { stats = fs.lstatSync(path); + if (options.block) + return stats.isBlockDevice(); + + if (options.character) + return stats.isCharacterDevice(); + if (options.directory) return stats.isDirectory(); if (options.file) return stats.isFile(); + + if (options.link) + return stats.isSymbolicLink(); + + if (options.pipe) + return stats.isFIFO(); + + if (options.socket) + return stats.isSocket() }; // test exports.test = wrap('test', _test); From acdd7597755f071e7fcede829f579cd5b8781032 Mon Sep 17 00:00:00 2001 From: James Campos Date: Sat, 8 Sep 2012 04:23:19 -0700 Subject: [PATCH 3/8] add -e --- shell.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/shell.js b/shell.js index 5822844..f32e1f7 100644 --- a/shell.js +++ b/shell.js @@ -533,6 +533,7 @@ function _test(options, path) { 'b': 'block', 'c': 'character', 'd': 'directory', + 'e': 'exists', 'f': 'file', 'L': 'link', 'p': 'pipe', @@ -552,6 +553,9 @@ function _test(options, path) { if (!fs.existsSync(path)) return false; + if (options.exists) + return true; + stats = fs.lstatSync(path); if (options.block) From fe1ff2ea533d6bfb837916287c99acb5fd91ef3f Mon Sep 17 00:00:00 2001 From: James Campos Date: Sat, 8 Sep 2012 18:51:48 -0700 Subject: [PATCH 4/8] add comment docs --- shell.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/shell.js b/shell.js index f32e1f7..b4c75b2 100644 --- a/shell.js +++ b/shell.js @@ -513,8 +513,14 @@ exports.mkdir = wrap('mkdir', _mkdir); //@ ### test(expression) //@ Available expression primaries: //@ +//@ + `'-b', 'path'`: true if path is a block device +//@ + `'-c', 'path'`: true if path is a character device //@ + `'-d', 'path'`: true if path is a directory +//@ + `'-e', 'path'`: true if path exists //@ + `'-f', 'path'`: true if path is a regular file +//@ + `'-L', 'path'`: true if path is a symboilc link +//@ + `'-p', 'path'`: true if path is a pipe (FIFO) +//@ + `'-S', 'path'`: true if path is a socket //@ //@ Examples: //@ From 8a46ec6c8353bfc4ad0a6301d236659dd4f8e6fe Mon Sep 17 00:00:00 2001 From: James Campos Date: Sat, 8 Sep 2012 19:14:35 -0700 Subject: [PATCH 5/8] add test tests (causes mv tests to fail --- test/resources/link | 1 + test/test.js | 147 ++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 144 insertions(+), 4 deletions(-) create mode 120000 test/resources/link diff --git a/test/resources/link b/test/resources/link new file mode 120000 index 0000000..08219db --- /dev/null +++ b/test/resources/link @@ -0,0 +1 @@ +file1 \ No newline at end of file diff --git a/test/test.js b/test/test.js index ab88001..303878b 100644 --- a/test/test.js +++ b/test/test.js @@ -32,20 +32,159 @@ assert.ok(shell.error()); // Valids // -var result = shell.test('-f', 'resources/file1'); +//exists +var result = shell.test('-e', 'resources/file1'); assert.equal(shell.error(), null); assert.equal(result, true); -var result = shell.test('-d', 'resources/file1'); +//block +var result = shell.test('-b', 'resources/block'); +assert.equal(shell.error(), null); +assert.equal(result, true);//true + +var result = shell.test('-c', 'resources/block'); assert.equal(shell.error(), null); assert.equal(result, false); -var result = shell.test('-f', 'resources'); +var result = shell.test('-d', 'resources/block'); +assert.equal(shell.error(), null); +assert.equal(result, false); + +var result = shell.test('-f', 'resources/block'); +assert.equal(shell.error(), null); +assert.equal(result, false); + +var result = shell.test('-L', 'resources/block'); +assert.equal(shell.error(), null); +assert.equal(result, false); + +var result = shell.test('-p', 'resources/block'); +assert.equal(shell.error(), null); +assert.equal(result, false); + +//character +var result = shell.test('-b', 'resources/character'); +assert.equal(shell.error(), null); +assert.equal(result, false); + +var result = shell.test('-c', 'resources/character'); +assert.equal(shell.error(), null); +assert.equal(result, true);//true + +var result = shell.test('-d', 'resources/character'); +assert.equal(shell.error(), null); +assert.equal(result, false); + +var result = shell.test('-f', 'resources/character'); +assert.equal(shell.error(), null); +assert.equal(result, false); + +var result = shell.test('-L', 'resources/character'); +assert.equal(shell.error(), null); +assert.equal(result, false); + +var result = shell.test('-p', 'resources/character'); +assert.equal(shell.error(), null); +assert.equal(result, false); + +//directory +var result = shell.test('-b', 'resources'); +assert.equal(shell.error(), null); +assert.equal(result, false); + +var result = shell.test('-c', 'resources'); assert.equal(shell.error(), null); assert.equal(result, false); var result = shell.test('-d', 'resources'); assert.equal(shell.error(), null); -assert.equal(result, true); +assert.equal(result, true);//true + +var result = shell.test('-f', 'resources'); +assert.equal(shell.error(), null); +assert.equal(result, false); + +var result = shell.test('-L', 'resources'); +assert.equal(shell.error(), null); +assert.equal(result, false); + +var result = shell.test('-p', 'resources'); +assert.equal(shell.error(), null); +assert.equal(result, false); + +//file +var result = shell.test('-b', 'resources/file1'); +assert.equal(shell.error(), null); +assert.equal(result, false); + +var result = shell.test('-c', 'resources/file1'); +assert.equal(shell.error(), null); +assert.equal(result, false); + +var result = shell.test('-d', 'resources/file1'); +assert.equal(shell.error(), null); +assert.equal(result, false); + +var result = shell.test('-f', 'resources/file1'); +assert.equal(shell.error(), null); +assert.equal(result, true);//true + +var result = shell.test('-L', 'resources/file1'); +assert.equal(shell.error(), null); +assert.equal(result, false); + +var result = shell.test('-p', 'resources/file1'); +assert.equal(shell.error(), null); +assert.equal(result, false); + +//link +var result = shell.test('-b', 'resources/link'); +assert.equal(shell.error(), null); +assert.equal(result, false); + +var result = shell.test('-c', 'resources/link'); +assert.equal(shell.error(), null); +assert.equal(result, false); + +var result = shell.test('-d', 'resources/link'); +assert.equal(shell.error(), null); +assert.equal(result, false); + +var result = shell.test('-f', 'resources/link'); +assert.equal(shell.error(), null); +assert.equal(result, false); + +var result = shell.test('-L', 'resources/link'); +assert.equal(shell.error(), null); +assert.equal(result, true);//true + +var result = shell.test('-p', 'resources/link'); +assert.equal(shell.error(), null); +assert.equal(result, false); + +//pipe +var result = shell.test('-b', 'resources/pipe'); +assert.equal(shell.error(), null); +assert.equal(result, false); + +var result = shell.test('-c', 'resources/pipe'); +assert.equal(shell.error(), null); +assert.equal(result, false); + +var result = shell.test('-d', 'resources/pipe'); +assert.equal(shell.error(), null); +assert.equal(result, false); + +var result = shell.test('-f', 'resources/pipe'); +assert.equal(shell.error(), null); +assert.equal(result, false); + +var result = shell.test('-L', 'resources/pipe'); +assert.equal(shell.error(), null); +assert.equal(result, false); + +var result = shell.test('-p', 'resources/pipe'); +assert.equal(shell.error(), null); +assert.equal(result, true);//true shell.exit(123); From 1e7a0b9a8d41fc2bb72ce66e36fc5e5a8aad9929 Mon Sep 17 00:00:00 2001 From: James Campos Date: Wed, 12 Sep 2012 07:41:38 -0700 Subject: [PATCH 6/8] rm tests for block, character, fifo files --- test/test.js | 111 --------------------------------------------------- 1 file changed, 111 deletions(-) diff --git a/test/test.js b/test/test.js index 303878b..3f9a82f 100644 --- a/test/test.js +++ b/test/test.js @@ -37,65 +37,7 @@ var result = shell.test('-e', 'resources/file1'); assert.equal(shell.error(), null); assert.equal(result, true); -//block -var result = shell.test('-b', 'resources/block'); -assert.equal(shell.error(), null); -assert.equal(result, true);//true - -var result = shell.test('-c', 'resources/block'); -assert.equal(shell.error(), null); -assert.equal(result, false); - -var result = shell.test('-d', 'resources/block'); -assert.equal(shell.error(), null); -assert.equal(result, false); - -var result = shell.test('-f', 'resources/block'); -assert.equal(shell.error(), null); -assert.equal(result, false); - -var result = shell.test('-L', 'resources/block'); -assert.equal(shell.error(), null); -assert.equal(result, false); - -var result = shell.test('-p', 'resources/block'); -assert.equal(shell.error(), null); -assert.equal(result, false); - -//character -var result = shell.test('-b', 'resources/character'); -assert.equal(shell.error(), null); -assert.equal(result, false); - -var result = shell.test('-c', 'resources/character'); -assert.equal(shell.error(), null); -assert.equal(result, true);//true - -var result = shell.test('-d', 'resources/character'); -assert.equal(shell.error(), null); -assert.equal(result, false); - -var result = shell.test('-f', 'resources/character'); -assert.equal(shell.error(), null); -assert.equal(result, false); - -var result = shell.test('-L', 'resources/character'); -assert.equal(shell.error(), null); -assert.equal(result, false); - -var result = shell.test('-p', 'resources/character'); -assert.equal(shell.error(), null); -assert.equal(result, false); - //directory -var result = shell.test('-b', 'resources'); -assert.equal(shell.error(), null); -assert.equal(result, false); - -var result = shell.test('-c', 'resources'); -assert.equal(shell.error(), null); -assert.equal(result, false); - var result = shell.test('-d', 'resources'); assert.equal(shell.error(), null); assert.equal(result, true);//true @@ -108,19 +50,7 @@ var result = shell.test('-L', 'resources'); assert.equal(shell.error(), null); assert.equal(result, false); -var result = shell.test('-p', 'resources'); -assert.equal(shell.error(), null); -assert.equal(result, false); - //file -var result = shell.test('-b', 'resources/file1'); -assert.equal(shell.error(), null); -assert.equal(result, false); - -var result = shell.test('-c', 'resources/file1'); -assert.equal(shell.error(), null); -assert.equal(result, false); - var result = shell.test('-d', 'resources/file1'); assert.equal(shell.error(), null); assert.equal(result, false); @@ -133,19 +63,7 @@ var result = shell.test('-L', 'resources/file1'); assert.equal(shell.error(), null); assert.equal(result, false); -var result = shell.test('-p', 'resources/file1'); -assert.equal(shell.error(), null); -assert.equal(result, false); - //link -var result = shell.test('-b', 'resources/link'); -assert.equal(shell.error(), null); -assert.equal(result, false); - -var result = shell.test('-c', 'resources/link'); -assert.equal(shell.error(), null); -assert.equal(result, false); - var result = shell.test('-d', 'resources/link'); assert.equal(shell.error(), null); assert.equal(result, false); @@ -158,33 +76,4 @@ var result = shell.test('-L', 'resources/link'); assert.equal(shell.error(), null); assert.equal(result, true);//true -var result = shell.test('-p', 'resources/link'); -assert.equal(shell.error(), null); -assert.equal(result, false); - -//pipe -var result = shell.test('-b', 'resources/pipe'); -assert.equal(shell.error(), null); -assert.equal(result, false); - -var result = shell.test('-c', 'resources/pipe'); -assert.equal(shell.error(), null); -assert.equal(result, false); - -var result = shell.test('-d', 'resources/pipe'); -assert.equal(shell.error(), null); -assert.equal(result, false); - -var result = shell.test('-f', 'resources/pipe'); -assert.equal(shell.error(), null); -assert.equal(result, false); - -var result = shell.test('-L', 'resources/pipe'); -assert.equal(shell.error(), null); -assert.equal(result, false); - -var result = shell.test('-p', 'resources/pipe'); -assert.equal(shell.error(), null); -assert.equal(result, true);//true - shell.exit(123); From 0b624342a74c63279f40e7677f559341d5d39585 Mon Sep 17 00:00:00 2001 From: James Campos Date: Wed, 12 Sep 2012 07:42:21 -0700 Subject: [PATCH 7/8] add test for non-existant file --- test/test.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/test/test.js b/test/test.js index 3f9a82f..8f5ea54 100644 --- a/test/test.js +++ b/test/test.js @@ -35,7 +35,11 @@ assert.ok(shell.error()); //exists var result = shell.test('-e', 'resources/file1'); assert.equal(shell.error(), null); -assert.equal(result, true); +assert.equal(result, true);//true + +var result = shell.test('-e', 'resources/404'); +assert.equal(shell.error(), null); +assert.equal(result, false); //directory var result = shell.test('-d', 'resources'); From 57bdc55f014428eb0fa2426dbafde88f8c3b605c Mon Sep 17 00:00:00 2001 From: James Campos Date: Wed, 12 Sep 2012 10:08:42 -0700 Subject: [PATCH 8/8] only lstat on -L --- shell.js | 8 ++++---- test/test.js | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/shell.js b/shell.js index b4c75b2..2300ffe 100644 --- a/shell.js +++ b/shell.js @@ -562,7 +562,10 @@ function _test(options, path) { if (options.exists) return true; - stats = fs.lstatSync(path); + if (options.link) + return fs.lstatSync(path).isSymbolicLink(); + + stats = fs.statSync(path); if (options.block) return stats.isBlockDevice(); @@ -576,9 +579,6 @@ function _test(options, path) { if (options.file) return stats.isFile(); - if (options.link) - return stats.isSymbolicLink(); - if (options.pipe) return stats.isFIFO(); diff --git a/test/test.js b/test/test.js index 8f5ea54..f074c8a 100644 --- a/test/test.js +++ b/test/test.js @@ -74,7 +74,7 @@ assert.equal(result, false); var result = shell.test('-f', 'resources/link'); assert.equal(shell.error(), null); -assert.equal(result, false); +assert.equal(result, true);//true var result = shell.test('-L', 'resources/link'); assert.equal(shell.error(), null);