206 lines
4.8 KiB
JavaScript
206 lines
4.8 KiB
JavaScript
var util = require('../../lib/test-utils.js');
|
|
var expect = require('chai').expect;
|
|
|
|
describe('FileSystemShell.find', function() {
|
|
beforeEach(function(done) {
|
|
util.setup(function() {
|
|
var fs = util.fs();
|
|
/**
|
|
* Create a basic fs layout for each test:
|
|
*
|
|
* /
|
|
* --file1
|
|
* --file2
|
|
* --dir1/
|
|
* --file3
|
|
* --subdir1/
|
|
* --dir2/
|
|
* --file4
|
|
*/
|
|
fs.writeFile('/file1', 'file1', function(err) {
|
|
if(err) throw err;
|
|
|
|
fs.writeFile('/file2', 'file2', function(err) {
|
|
if(err) throw err;
|
|
|
|
fs.mkdir('/dir1', function(err) {
|
|
if(err) throw err;
|
|
|
|
fs.writeFile('/dir1/file3', 'file3', function(err) {
|
|
if(err) throw err;
|
|
|
|
fs.mkdir('/dir1/subdir1', function(err) {
|
|
if(err) throw err;
|
|
|
|
fs.mkdir('/dir2', function(err) {
|
|
if(err) throw err;
|
|
|
|
fs.writeFile('/dir2/file4', 'file4', function(err) {
|
|
if(err) throw err;
|
|
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
afterEach(util.cleanup);
|
|
|
|
it('should be a function', function() {
|
|
var shell = util.shell();
|
|
expect(shell.find).to.be.a('function');
|
|
});
|
|
|
|
it('should fail when path does not exist', function(done) {
|
|
var shell = util.shell();
|
|
|
|
shell.find('/no-such-folder', function(err, found) {
|
|
expect(err).to.exist;
|
|
expect(err.code).to.equal('ENOENT');
|
|
expect(found).not.to.exist;
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should fail when path exists but is non-dir', function(done) {
|
|
var shell = util.shell();
|
|
|
|
shell.find('/file1', function(err, found) {
|
|
expect(err).to.exist;
|
|
expect(err.code).to.equal('ENOTDIR');
|
|
expect(found).not.to.exist;
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should find all paths in the filesystem with no options', function(done) {
|
|
var shell = util.shell();
|
|
|
|
shell.find('/', function(err, found) {
|
|
expect(err).not.to.exist;
|
|
|
|
var expected = [
|
|
'/',
|
|
'/file1',
|
|
'/file2',
|
|
'/dir1/',
|
|
'/dir1/file3',
|
|
'/dir1/subdir1/',
|
|
'/dir2/',
|
|
'/dir2/file4'
|
|
];
|
|
expect(found).to.deep.equal(expected);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should get same paths in exec as are found when complete', function(done) {
|
|
var shell = util.shell();
|
|
var pathsSeen = [];
|
|
|
|
function processPath(path, next) {
|
|
pathsSeen.push(path);
|
|
next();
|
|
}
|
|
|
|
shell.find('/', {exec: processPath}, function(err, found) {
|
|
expect(err).not.to.exist;
|
|
|
|
expect(found).to.deep.equal(pathsSeen);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should return only paths that match a regex pattern', function(done) {
|
|
var shell = util.shell();
|
|
|
|
shell.find('/', {regex: /file\d$/}, function(err, found) {
|
|
expect(err).not.to.exist;
|
|
|
|
var expected = [
|
|
'/file1',
|
|
'/file2',
|
|
'/dir1/file3',
|
|
'/dir2/file4'
|
|
];
|
|
expect(found).to.deep.equal(expected);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should append a / to the end of a dir path', function(done) {
|
|
var shell = util.shell();
|
|
var dirsSeen = 0;
|
|
|
|
function endsWith(str, suffix) {
|
|
var lastIndex = str.lastIndexOf(suffix);
|
|
return (lastIndex !== -1) && (lastIndex + suffix.length === str.length);
|
|
}
|
|
|
|
function processPath(path, next) {
|
|
expect(endsWith(path, '/')).to.be.true;
|
|
dirsSeen++;
|
|
next();
|
|
}
|
|
|
|
shell.find('/', {regex: /dir\d$/, exec: processPath}, function(err) {
|
|
expect(err).not.to.exist;
|
|
expect(dirsSeen).to.equal(3);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should only look below the specified dir path', function(done) {
|
|
var shell = util.shell();
|
|
|
|
shell.find('/dir1', function(err, found) {
|
|
expect(err).not.to.exist;
|
|
|
|
var expected = [
|
|
'/dir1/',
|
|
'/dir1/file3',
|
|
'/dir1/subdir1/'
|
|
];
|
|
expect(found).to.deep.equal(expected);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should allow using options.name to match basename with a pattern', function(done) {
|
|
var shell = util.shell();
|
|
|
|
shell.find('/', {name: 'file*'}, function(err, found) {
|
|
expect(err).not.to.exist;
|
|
|
|
var expected = [
|
|
'/file1',
|
|
'/file2',
|
|
'/dir1/file3',
|
|
'/dir2/file4'
|
|
];
|
|
expect(found).to.deep.equal(expected);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should allow using options.path to match dirname with a pattern', function(done) {
|
|
var shell = util.shell();
|
|
|
|
shell.find('/', {name: '*ir1*'}, function(err, found) {
|
|
expect(err).not.to.exist;
|
|
|
|
var expected = [
|
|
'/dir1/',
|
|
'/dir1/subdir1/'
|
|
];
|
|
expect(found).to.deep.equal(expected);
|
|
done();
|
|
});
|
|
});
|
|
|
|
});
|