nano-fs
Version:
Extended file system library
237 lines (205 loc) • 5.21 kB
JavaScript
;
var assert = require('core-assert'),
json = require('nano-json'),
timer = require('nano-timer'),
Promise = require('nano-promise'),
Path = require('path');
var fs = require('../index.js');
var source_folder = 'test/source/',
polygon_folder = './polygon/';
var so = Object.create(null);
var join = function _join(self, obj) {
for (var nm in obj)
self[nm] = obj[nm];
return self;
}
suite('nano-fs', function () {
test('.readTree(dir)', function (done) {
fs.readTree(source_folder).then(function (tree) {
assert.deepStrictEqual(tree, {
a: {
'file.txt': 'file',
fileaa: 'bbb'
},
'tet.jk': 'te'
});
done();
}).catch(done);;
});
test('.listFiles(dir)', function (done) {
fs.listFiles(source_folder).then(function (list) {
assert.deepStrictEqual([
"tet.jk",
"a/file.txt",
"a/fileaa"
].sort(), list.sort());
done();
}).catch(done);;
});
test('.listFiles(dir, re)', function (done) {
fs.listFiles(source_folder, /^a/).then(function (list) {
assert.deepStrictEqual([
"a/file.txt",
"a/fileaa"
].sort(), list.sort());
done();
}).catch(done);;
});
var mk_folder = polygon_folder+'one/two/three';
test('.mkpath(dir)', function (done) {
fs.mkpath(mk_folder, 511).then(function () {
fs.stat(mk_folder).then(function (stats) {
if (stats.isDirectory())
return done();
done(Error('not maked!'));
});
}).catch(done);
});
test('.mkpath(".")', function (done) {
fs.mkpath('.', 511).then(done).catch(done);
});
test('.mkpath(dir) exist path', function (done) {
fs.mkpath(mk_folder, 511).then(function () {
fs.stat(mk_folder).then(function (stats) {
if (stats.isDirectory())
return done();
done(Error('not maked!'));
});
}).catch(done);
});
test('.mkpath(dir) several times in parellel', function (done) {
var rem_folder = polygon_folder+'system/momo';
mk_folder = polygon_folder+'system/momo/lol';
fs.remove(rem_folder)
.catch(function (err) {
if (err.code !== 'ENOENT')
throw err;
})
.then(function () {
return Promise.resolve(
fs.mkpath(mk_folder),
fs.mkpath(mk_folder)
);
})
.then(function () {
fs.stat(mk_folder).then(function (stats) {
if (stats.isDirectory())
return fs.remove(rem_folder).then(done);
done(Error('not maked!'));
});
}).catch(done);
});
test('.remove() not exist folder', function (done) {
var dir = 'copy';
fs.remove(dir).then(function () {
done(Error('not failed!'));
}).catch(function (e) {
assert('ENOENT', e.code);
done();
});
});
test('.remove() exist folder', function (done) {
var dir = polygon_folder+'folder';
fs.mkpath(dir).then(function () {
return fs.remove(dir).then(function () {
fs.stat(dir).then(function (stats) {
done(Error('not removed!'));
}, function (e) {
assert.strictEqual('ENOENT', e.code);
done();
});
});
}).catch(done);;
});
test('.copy()', function (done) {
var dir = 'README.md',
dest_dir = polygon_folder+'copy/c/',
to = dest_dir+'copy.js';
fs.copy(dir, to).then(function () {
return fs.listFiles(dest_dir).then(function (list) {
assert.deepStrictEqual([
"copy.js"
], list);
done();
});
}).catch(done);
});
test('.mkpath(dir) over existing file', function (done) {
var dir = polygon_folder+'copy/c/copy.js';
fs.mkpath(dir).then(function () {
done(Error('not failed!'));
}).catch(function (e) {
assert.strictEqual(e.code, 'ENOTDIR');
done();
}).catch(done);
});
test('.mkpath(dir) not permitted', function (done) {
var dir = '/sbin/o';
fs.mkpath(dir).then(function () {
done(Error('not failed!'));
}).catch(function (e) {
assert.strictEqual(e.code, 'EACCES');
done();
}).catch(done);
});
test('.empty() not a folder', function (done) {
var dir = polygon_folder+'copy/c/copy.js';
fs.empty(dir).then(function () {
done(Error('not failed!'));
}).catch(function (e) {
assert.strictEqual('ENOTDIR', e.code);
done();
}).catch(done);;
});
test('.empty()', function (done) {
var dir = polygon_folder;
fs.empty(dir).then(function () {
return fs.readdir(dir).then(function (list) {
assert.strictEqual(0, list.length);
done();
});
}).catch(done);
});
test('.writeTree(dir, o)', function (done) {
var dir_a = polygon_folder,
tree_a = {
file: 'aa',
empty: {},
dir1: {
file: 'bb'
},
dir2: {
file1: 'bb',
file2: 'cc'
}
},
dir_b = Path.join(dir_a, 'empty/file'),
tree_b = 'aa',
tree = {
file: 'aa',
empty: {
file: 'aa'
},
dir1: {
file: 'bb'
},
dir2: {
file1: 'bb',
file2: 'cc'
}
};
fs.empty(dir_a).then(function () {
return fs.writeTree(dir_a, tree_a);
}).then(function () {
return fs.writeTree(dir_b, tree_b);
}).then(function () {
return fs.readTree(dir_a)
}).then(function (t) {
assert.deepStrictEqual(t, tree);
return fs.empty(dir_a);
}).then(function () {
done();
})
.catch(done);
});
});