blob: 32089dc2c1cdd29fb9125506ca27bb1df205f69d [file] [log] [blame]
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);