shelljs/test/popd.js
Nate Fischer 1a31356343 refactor: use require instead of import
No change to logic. This swaps over tests to use require() since
everything is currently designed for the commonjs module system.
2025-04-07 22:44:24 -07:00

160 lines
3.8 KiB
JavaScript

const path = require('path');
const test = require('ava');
const shell = require('..');
const mocks = require('./utils/mocks');
const rootDir = path.resolve();
function reset() {
shell.dirs('-c');
shell.cd(rootDir);
}
test.beforeEach(() => {
shell.config.resetForTesting();
reset();
});
test.after.always(() => {
reset();
});
//
// Valids
//
test('basic usage', t => {
shell.pushd('test/resources/pushd');
const trail = shell.popd();
t.falsy(shell.error());
t.is(process.cwd(), trail[0]);
t.deepEqual(trail, [rootDir]);
});
test('two directories on the stack', t => {
shell.pushd('test/resources/pushd');
shell.pushd('a');
const trail = shell.popd();
t.falsy(shell.error());
t.is(process.cwd(), trail[0]);
t.deepEqual(trail, [
path.resolve(rootDir, 'test/resources/pushd'),
rootDir,
]);
});
test('three directories on the stack', t => {
shell.pushd('test/resources/pushd');
shell.pushd('b');
shell.pushd('c');
const trail = shell.popd();
t.falsy(shell.error());
t.is(process.cwd(), trail[0]);
t.deepEqual(trail, [
path.resolve(rootDir, 'test/resources/pushd/b'),
path.resolve(rootDir, 'test/resources/pushd'),
rootDir,
]);
});
test('Valid by index', t => {
shell.pushd('test/resources/pushd');
const trail = shell.popd('+0');
t.falsy(shell.error());
t.is(process.cwd(), trail[0]);
t.deepEqual(trail, [rootDir]);
});
test('Using +1 option', t => {
shell.pushd('test/resources/pushd');
const trail = shell.popd('+1');
t.falsy(shell.error());
t.is(process.cwd(), trail[0]);
t.deepEqual(trail, [path.resolve(rootDir, 'test/resources/pushd')]);
});
test('Using -0 option', t => {
shell.pushd('test/resources/pushd');
const trail = shell.popd('-0');
t.falsy(shell.error());
t.is(process.cwd(), trail[0]);
t.deepEqual(trail, [path.resolve(rootDir, 'test/resources/pushd')]);
});
test('Using -1 option', t => {
shell.pushd('test/resources/pushd');
const trail = shell.popd('-1');
t.falsy(shell.error());
t.is(process.cwd(), trail[0]);
t.deepEqual(trail, [rootDir]);
});
test('Using -n option', t => {
shell.pushd('test/resources/pushd');
const trail = shell.popd('-n');
t.falsy(shell.error());
t.is(process.cwd(), trail[0]);
t.deepEqual(trail, [path.resolve(rootDir, 'test/resources/pushd')]);
});
test('Popping an empty stack', t => {
shell.popd();
t.truthy(shell.error('popd: directory stack empty\n'));
});
test('Test that rootDir is not stored', t => {
shell.cd('test/resources/pushd');
shell.pushd('b');
const trail = shell.popd();
t.falsy(shell.error());
t.is(trail[0], path.resolve(rootDir, 'test/resources/pushd'));
t.is(process.cwd(), trail[0]);
shell.popd(); // no more in the stack
t.truthy(shell.error());
});
test('quiet mode off', t => {
try {
shell.pushd('test/resources/pushd');
shell.config.silent = false;
mocks.stdout.init();
mocks.stderr.init();
const trail = shell.popd();
const stdout = mocks.stdout.getValue();
const stderr = mocks.stderr.getValue();
t.falsy(shell.error());
t.is(stdout, '');
t.is(stderr, `${rootDir}\n`);
t.is(process.cwd(), trail[0]);
t.deepEqual(trail, [rootDir]);
} finally {
shell.config.silent = true;
mocks.stdout.restore();
mocks.stderr.restore();
}
});
test('quiet mode on', t => {
try {
shell.pushd('test/resources/pushd');
shell.config.silent = false;
mocks.stdout.init();
mocks.stderr.init();
const trail = shell.popd('-q');
const stdout = mocks.stdout.getValue();
const stderr = mocks.stderr.getValue();
t.falsy(shell.error());
t.is(stdout, '');
t.is(stderr, '');
t.is(process.cwd(), trail[0]);
t.deepEqual(trail, [rootDir]);
} finally {
shell.config.silent = true;
mocks.stdout.restore();
mocks.stderr.restore();
}
});