From 8f3a995c9d96fff972f7aa2cf56776aef08f31f2 Mon Sep 17 00:00:00 2001 From: James Halliday Date: Sat, 9 Jul 2011 02:13:09 -0700 Subject: [PATCH] failing test for optional callbacks --- index.js | 33 ++++++++++++++++++--------------- test/cb.js | 14 ++++++++++++++ test/foo.js | 4 ++-- test/module.js | 2 +- 4 files changed, 35 insertions(+), 18 deletions(-) create mode 100644 test/cb.js diff --git a/index.js b/index.js index 6141753..29105f6 100644 --- a/index.js +++ b/index.js @@ -64,22 +64,25 @@ function find (base, cb) { return em; }; -exports.findSync = function findSync (dir) { - if (!fs.statSync(dir).isDirectory()) return [dir]; +exports.findSync = function findSync (dir, cb) { + var rootStat = fs.statSync(dir); + if (!rootStat.isDirectory()) { + if (cb) cb(dir, rootStat); + return [dir]; + } - return fs.readdirSync(dir) - .reduce(function (files, file) { - var p = dir + '/' + file; - var stat = fs.statSync(p); - files.push(p); - - if (stat.isDirectory()) { - files.push.apply(files, findSync(p)); - } - - return files; - }, []) - ; + return fs.readdirSync(dir).reduce(function (files, file) { + var p = dir + '/' + file; + var stat = fs.statSync(p); + if (cb) cb(file, stat); + files.push(p); + + if (stat.isDirectory()) { + files.push.apply(files, findSync(p, cb)); + } + + return files; + }, []); }; exports.find.sync = exports.findSync; diff --git a/test/cb.js b/test/cb.js new file mode 100644 index 0000000..f706715 --- /dev/null +++ b/test/cb.js @@ -0,0 +1,14 @@ +var assert = require('assert'); +var find = require('../'); + +exports.cbSync = function () { + var files = []; + var dirs = []; + find.sync(__dirname + '/foo', function (file, stat) { + if (stat.isDirectory()) dirs.push(file) + else files.push(file) + }); + + assert.deepEqual(dirs, [ 'a', 'a/b', 'a/b/c' ]); + assert.deepEqual(files, [ 'x', 'a/y', 'a/b/z', 'a/b/c/w' ]); +}; diff --git a/test/foo.js b/test/foo.js index 219813a..ba0c1cb 100644 --- a/test/foo.js +++ b/test/foo.js @@ -1,6 +1,6 @@ var assert = require('assert'); -var find = require('findit').find; -var findSync = require('findit').findSync; +var find = require('../').find; +var findSync = require('../').findSync; exports.foo = function () { var to = setTimeout(function () { diff --git a/test/module.js b/test/module.js index f5494b3..046274f 100644 --- a/test/module.js +++ b/test/module.js @@ -1,5 +1,5 @@ var assert = require('assert'); -var find = require('findit'); +var find = require('../'); exports.module = function () { assert.eql(find.findSync, find.find.sync);