Permalink
Browse files

add readdirSyncRecursive and the test runner file.

  • Loading branch information...
1 parent 29cb045 commit 139ed486f13235417718ebd2e7c6582b665b6cf5 @millermedeiros millermedeiros committed Jan 14, 2012
View
@@ -11,7 +11,50 @@
* ~ Ryan McGrath (ryan [at] venodesigns.net)
*/
-var fs = require("fs");
+var fs = require("fs"),
+ _path = require("path");
+
+
+/* wrench.readdirSyncRecursive("directory_path");
+ *
+ * Recursively dives through directories and read the contents of all the
+ * children directories.
+ */
+exports.readdirSyncRecursive = function(baseDir) {
+ baseDir = baseDir.replace(/\/$/, '');
+
+ var readdirSyncRecursive = function(baseDir) {
+ var files = [],
+ curFiles,
+ nextDirs,
+ isDir = function(fname){
+ return fs.statSync( _path.join(baseDir, fname) ).isDirectory();
+ },
+ prependBaseDir = function(fname){
+ return _path.join(baseDir, fname);
+ };
+
+ curFiles = fs.readdirSync(baseDir);
+ nextDirs = curFiles.filter(isDir);
+ curFiles = curFiles.map(prependBaseDir);
+
+ files = files.concat( curFiles );
+
+ while (nextDirs.length) {
+ files = files.concat( readdirSyncRecursive( _path.join(baseDir, nextDirs.shift()) ) );
+ }
+
+ return files;
+ };
+
+ // convert absolute paths to relative
+ var fileList = readdirSyncRecursive(baseDir).map(function(val){
+ return val.replace(baseDir + '/', '');
+ });
+
+ return fileList;
+};
+
/* wrench.rmdirSyncRecursive("directory_path", forceDelete, failSilent);
*
@@ -248,7 +291,7 @@ exports.LineReader = function(filename, bufferSize) {
this.buffer = "";
this.fd = fs.openSync(filename, "r");
this.currentPosition = 0;
-}
+};
exports.LineReader.prototype = {
getBufferAndSetCurrentPosition: function(position) {
View
@@ -25,6 +25,9 @@ wrench.mkdirSyncRecursive(dir, 0777);
// Recursively delete the entire sub-tree of a directory, then kill the directory
wrench.rmdirSyncRecursive('my_directory_name', failSilently);
+// Recursively read directories contents.
+wrench.readdirSyncRecursive('my_directory_name');
+
// Recursively chmod the entire sub-tree of a directory
wrench.chmodSyncRecursive('my_directory_name', 0755);
@@ -4,7 +4,7 @@ var wrench = require('wrench');
var path = require('path');
module.exports = testCase({
- testMkdirSyncRecursive: function(test) {
+ test_mkdirSyncRecursive: function(test) {
var dir = __dirname + '/_tmp/foo/bar';
test.equals(path.existsSync(dir), false, 'Dir shouldn\'t exist - clean it up manually?');
View
No changes.
No changes.
No changes.
No changes.
@@ -0,0 +1,30 @@
+var testCase = require('nodeunit').testCase;
+var fs = require('fs');
+var wrench = require('wrench');
+var path = require('path');
+
+module.exports = testCase({
+ test_readdirSyncRecursive: function(test) {
+ var dir = __dirname + '/readdir';
+
+ test.equals(path.existsSync(dir), true, 'Folders should exist');
+
+ var check = [
+ 'bar.txt',
+ 'foo',
+ 'foo/bar',
+ 'foo/dolor.md',
+ 'foo/lorem.txt',
+ 'foo/bar/ipsum.js'
+ ];
+
+ var files = wrench.readdirSyncRecursive(dir);
+
+ test.equals(files.length, check.length, 'number of paths is correct');
+ test.deepEqual(files, check, 'list shows all files and folders');
+
+ test.done();
+ }
+});
+
+// vim: et ts=4 sw=4
View
@@ -0,0 +1,7 @@
+// `nodeunit tests/runner`
+// will run all the tests
+
+module.exports = {
+ group_mkdirSyncRecursive : require('./mkdirSyncRecursive'),
+ group_readdirSyncRecursive : require('./readdirSyncRecursive')
+};

0 comments on commit 139ed48

Please sign in to comment.