| var shell = require('..'); |
| |
| var assert = require('assert'), |
| path = require('path'), |
| fs = require('fs'); |
| |
| // Node shims for < v0.7 |
| fs.existsSync = fs.existsSync || path.existsSync; |
| |
| shell.config.silent = true; |
| |
| var root = path.resolve(), trail; |
| |
| function reset() { |
| shell.dirs('-c'); |
| shell.cd(root); |
| } |
| |
| // Push valid directories |
| trail = shell.pushd('resources/pushd'); |
| assert.equal(shell.error(), null); |
| assert.equal(process.cwd(), trail[0]); |
| assert.deepEqual(trail, [ |
| path.resolve(root, 'resources/pushd'), |
| root |
| ]); |
| |
| trail = shell.pushd('a'); |
| assert.equal(shell.error(), null); |
| assert.equal(process.cwd(), trail[0]); |
| assert.deepEqual(trail, [ |
| path.resolve(root, 'resources/pushd/a'), |
| path.resolve(root, 'resources/pushd'), |
| root |
| ]); |
| |
| trail = shell.pushd('../b'); |
| assert.equal(shell.error(), null); |
| assert.equal(process.cwd(), trail[0]); |
| assert.deepEqual(trail, [ |
| path.resolve(root, 'resources/pushd/b'), |
| path.resolve(root, 'resources/pushd/a'), |
| path.resolve(root, 'resources/pushd'), |
| root |
| ]); |
| |
| trail = shell.pushd('c'); |
| assert.equal(shell.error(), null); |
| assert.equal(process.cwd(), trail[0]); |
| assert.deepEqual(trail, [ |
| path.resolve(root, 'resources/pushd/b/c'), |
| path.resolve(root, 'resources/pushd/b'), |
| path.resolve(root, 'resources/pushd/a'), |
| path.resolve(root, 'resources/pushd'), |
| root |
| ]); |
| |
| // Push stuff around with positive indices |
| trail = shell.pushd('+0'); |
| assert.equal(shell.error(), null); |
| assert.equal(process.cwd(), trail[0]); |
| assert.deepEqual(trail, [ |
| path.resolve(root, 'resources/pushd/b/c'), |
| path.resolve(root, 'resources/pushd/b'), |
| path.resolve(root, 'resources/pushd/a'), |
| path.resolve(root, 'resources/pushd'), |
| root |
| ]); |
| |
| trail = shell.pushd('+1'); |
| assert.equal(shell.error(), null); |
| assert.equal(process.cwd(), trail[0]); |
| assert.deepEqual(trail, [ |
| path.resolve(root, 'resources/pushd/b'), |
| path.resolve(root, 'resources/pushd/a'), |
| path.resolve(root, 'resources/pushd'), |
| root, |
| path.resolve(root, 'resources/pushd/b/c') |
| ]); |
| |
| trail = shell.pushd('+2'); |
| assert.equal(shell.error(), null); |
| assert.equal(process.cwd(), trail[0]); |
| assert.deepEqual(trail, [ |
| path.resolve(root, 'resources/pushd'), |
| root, |
| path.resolve(root, 'resources/pushd/b/c'), |
| path.resolve(root, 'resources/pushd/b'), |
| path.resolve(root, 'resources/pushd/a') |
| ]); |
| |
| trail = shell.pushd('+3'); |
| assert.equal(shell.error(), null); |
| assert.equal(process.cwd(), trail[0]); |
| assert.deepEqual(trail, [ |
| path.resolve(root, 'resources/pushd/b'), |
| path.resolve(root, 'resources/pushd/a'), |
| path.resolve(root, 'resources/pushd'), |
| root, |
| path.resolve(root, 'resources/pushd/b/c') |
| ]); |
| |
| trail = shell.pushd('+4'); |
| assert.equal(shell.error(), null); |
| assert.equal(process.cwd(), trail[0]); |
| assert.deepEqual(trail, [ |
| path.resolve(root, 'resources/pushd/b/c'), |
| path.resolve(root, 'resources/pushd/b'), |
| path.resolve(root, 'resources/pushd/a'), |
| path.resolve(root, 'resources/pushd'), |
| root |
| ]); |
| |
| // Push stuff around with negative indices |
| trail = shell.pushd('-0'); |
| assert.equal(shell.error(), null); |
| assert.equal(process.cwd(), trail[0]); |
| assert.deepEqual(trail, [ |
| root, |
| path.resolve(root, 'resources/pushd/b/c'), |
| path.resolve(root, 'resources/pushd/b'), |
| path.resolve(root, 'resources/pushd/a'), |
| path.resolve(root, 'resources/pushd') |
| ]); |
| |
| trail = shell.pushd('-1'); |
| assert.equal(shell.error(), null); |
| assert.equal(process.cwd(), trail[0]); |
| assert.deepEqual(trail, [ |
| path.resolve(root, 'resources/pushd/a'), |
| path.resolve(root, 'resources/pushd'), |
| root, |
| path.resolve(root, 'resources/pushd/b/c'), |
| path.resolve(root, 'resources/pushd/b') |
| ]); |
| |
| trail = shell.pushd('-2'); |
| assert.equal(shell.error(), null); |
| assert.equal(process.cwd(), trail[0]); |
| assert.deepEqual(trail, [ |
| root, |
| path.resolve(root, 'resources/pushd/b/c'), |
| path.resolve(root, 'resources/pushd/b'), |
| path.resolve(root, 'resources/pushd/a'), |
| path.resolve(root, 'resources/pushd') |
| ]); |
| |
| trail = shell.pushd('-3'); |
| assert.equal(shell.error(), null); |
| assert.equal(process.cwd(), trail[0]); |
| assert.deepEqual(trail, [ |
| path.resolve(root, 'resources/pushd/b/c'), |
| path.resolve(root, 'resources/pushd/b'), |
| path.resolve(root, 'resources/pushd/a'), |
| path.resolve(root, 'resources/pushd'), |
| root |
| ]); |
| |
| trail = shell.pushd('-4'); |
| assert.equal(shell.error(), null); |
| assert.equal(process.cwd(), trail[0]); |
| assert.deepEqual(trail, [ |
| path.resolve(root, 'resources/pushd/b/c'), |
| path.resolve(root, 'resources/pushd/b'), |
| path.resolve(root, 'resources/pushd/a'), |
| path.resolve(root, 'resources/pushd'), |
| root |
| ]); |
| |
| // Push without changing directory or resolving paths |
| reset(); trail = shell.pushd('-n', 'resources/pushd'); |
| assert.equal(shell.error(), null); |
| assert.equal(process.cwd(), trail[0]); |
| assert.deepEqual(trail, [ |
| root, |
| 'resources/pushd' |
| ]); |
| |
| trail = shell.pushd('-n', 'resources/pushd/a'); |
| assert.equal(shell.error(), null); |
| assert.equal(process.cwd(), trail[0]); |
| assert.deepEqual(trail, [ |
| root, |
| 'resources/pushd/a', |
| 'resources/pushd' |
| ]); |
| |
| // Push invalid directory |
| shell.pushd('does/not/exist'); |
| assert.equal(shell.error(), 'pushd: no such file or directory: ' + path.resolve('.', 'does/not/exist') + '\n'); |
| assert.equal(process.cwd(), trail[0]); |
| |
| // Push without arguments should swap top two directories when stack length is 2 |
| reset(); trail = shell.pushd('resources/pushd'); |
| assert.equal(shell.error(), null); |
| assert.equal(trail.length, 2); |
| assert.equal(path.relative(root, trail[0]), 'resources/pushd'); |
| assert.equal(trail[1], root); |
| assert.equal(process.cwd(), trail[0]); |
| trail = shell.pushd(); |
| assert.equal(shell.error(), null); |
| assert.equal(trail.length, 2); |
| assert.equal(trail[0], root); |
| assert.equal(path.relative(root, trail[1]), 'resources/pushd'); |
| assert.equal(process.cwd(), trail[0]); |
| |
| // Push without arguments should swap top two directories when stack length is > 2 |
| trail = shell.pushd('resources/pushd/a'); |
| assert.equal(shell.error(), null); |
| assert.equal(trail.length, 3); |
| assert.equal(path.relative(root, trail[0]), 'resources/pushd/a'); |
| assert.equal(trail[1], root); |
| assert.equal(path.relative(root, trail[2]), 'resources/pushd'); |
| assert.equal(process.cwd(), trail[0]); |
| |
| trail = shell.pushd(); |
| assert.equal(shell.error(), null); |
| assert.equal(trail.length, 3); |
| assert.equal(trail[0], root); |
| assert.equal(path.relative(root, trail[1]), 'resources/pushd/a'); |
| assert.equal(path.relative(root, trail[2]), 'resources/pushd'); |
| assert.equal(process.cwd(), trail[0]); |
| |
| // Push without arguments invalid when stack is empty |
| reset(); shell.pushd(); |
| assert.equal(shell.error(), 'pushd: no other directory\n'); |
| |
| shell.exit(123); |