var util = require('../../lib/test-utils.js'); var expect = require('chai').expect; describe('FileSystemShell.cd', function() { beforeEach(util.setup); afterEach(util.cleanup); it('should be a function', function() { var shell = util.shell(); expect(shell.cd).to.be.a('function'); }); it('should default to a cwd of /', function() { var shell = util.shell(); expect(shell.pwd()).to.equal('/'); }); it('should allow changing the path to a valid dir', function(done) { var fs = util.fs(); var shell = new fs.Shell(); fs.mkdir('/dir', function(err) { if(err) throw err; expect(shell.pwd()).to.equal('/'); shell.cd('/dir', function(err) { expect(err).not.to.exist; expect(shell.pwd()).to.equal('/dir'); done(); }); }); }); it('should fail when changing the path to an invalid dir', function(done) { var fs = util.fs(); var shell = new fs.Shell(); fs.mkdir('/dir', function(err) { if(err) throw err; expect(shell.pwd()).to.equal('/'); shell.cd('/nodir', function(err) { expect(err).to.exist; expect(err.code).to.equal('ENOTDIR'); expect(shell.pwd()).to.equal('/'); done(); }); }); }); it('should fail when changing the path to a file', function(done) { var fs = util.fs(); var shell = new fs.Shell(); fs.writeFile('/file', 'file', function(err) { if(err) throw err; expect(shell.pwd()).to.equal('/'); shell.cd('/file', function(err) { expect(err).to.exist; expect(err.code).to.equal('ENOTDIR'); expect(shell.pwd()).to.equal('/'); done(); }); }); }); it('should allow relative paths for a valid dir', function(done) { var fs = util.fs(); var shell = new fs.Shell(); fs.mkdir('/dir', function(err) { if(err) throw err; expect(shell.pwd()).to.equal('/'); shell.cd('./dir', function(err) { expect(err).not.to.exist; expect(shell.pwd()).to.equal('/dir'); done(); }); }); }); it('should allow .. in paths for a valid dir', function(done) { var fs = util.fs(); var shell = new fs.Shell(); fs.mkdir('/dir', function(err) { if(err) throw err; expect(shell.pwd()).to.equal('/'); shell.cd('./dir', function(err) { expect(err).not.to.exist; expect(shell.pwd()).to.equal('/dir'); shell.cd('..', function(err) { expect(err).not.to.exist; expect(shell.pwd()).to.equal('/'); done(); }); }); }); }); it('should follow symlinks to dirs', function(done) { var fs = util.fs(); fs.mkdir('/dir', function(error) { if(error) throw error; fs.symlink('/dir', '/link', function(error) { if(error) throw error; var shell = new fs.Shell(); shell.cd('link', function(error) { expect(error).not.to.exist; expect(shell.pwd()).to.equal('/link'); done(); }); }); }); }); });