- In a case where arg is given as boolean and with plain
@ShellOption (user doesn't define defaults), configure
arg not to be mandatory and with default value false.
- This brings this spesific case more close how it behave
in older shell version.
- Having `@ShellOption boolean arg1` it now works as:
my-shell:>e2e reg default-value-boolean3
Hello false
my-shell:>e2e reg default-value-boolean3 --arg1
Hello true
my-shell:>e2e reg default-value-boolean3 --arg1 false
Hello false
my-shell:>e2e reg default-value-boolean3 --arg1 true
Hello true
- Fixes #461
582 lines
17 KiB
TypeScript
582 lines
17 KiB
TypeScript
import 'jest-extended';
|
|
import waitForExpect from 'wait-for-expect';
|
|
import { Cli } from 'spring-shell-e2e';
|
|
import {
|
|
nativeDesc,
|
|
jarDesc,
|
|
jarCommand,
|
|
nativeCommand,
|
|
jarOptions,
|
|
waitForExpectDefaultTimeout,
|
|
waitForExpectDefaultInterval,
|
|
testTimeout
|
|
} from '../src/utils';
|
|
|
|
// e2e default value commands
|
|
describe('e2e commands default-value', () => {
|
|
let cli: Cli;
|
|
let command: string;
|
|
let options: string[] = [];
|
|
|
|
/**
|
|
* testDefaultValue
|
|
*/
|
|
const annoDefaultWithoutArgReturnsHiDesc = 'default without arg returns hi (anno)';
|
|
const annoDefaultWithoutArgCommand = ['e2e anno default-value'];
|
|
const annoDefaultWithoutArgReturnsHi = async (cli: Cli) => {
|
|
cli.run();
|
|
await waitForExpect(async () => {
|
|
const screen = cli.screen();
|
|
expect(screen).toEqual(expect.arrayContaining([expect.stringContaining('Hello hi')]));
|
|
});
|
|
await expect(cli.exitCode()).resolves.toBe(0);
|
|
};
|
|
|
|
/**
|
|
* testDefaultValueRegistration
|
|
*/
|
|
const regDefaultWithoutArgReturnsHiDesc = 'default without arg returns hi (reg)';
|
|
const regDefaultWithoutArgCommand = ['e2e reg default-value'];
|
|
const regOptionalWithoutArgReturnsHi = async (cli: Cli) => {
|
|
cli.run();
|
|
await waitForExpect(async () => {
|
|
const screen = cli.screen();
|
|
expect(screen).toEqual(expect.arrayContaining([expect.stringContaining('Hello hi')]));
|
|
});
|
|
await expect(cli.exitCode()).resolves.toBe(0);
|
|
};
|
|
|
|
/**
|
|
* testDefaultValue
|
|
*/
|
|
const annoDefaultWithArgReturnsFooDesc = 'default with arg returns foo (anno)';
|
|
const annoDefaultWithArgCommand = ['e2e anno default-value --arg1 foo'];
|
|
const annoDefaultWithArgReturnsFoo = async (cli: Cli) => {
|
|
cli.run();
|
|
await waitForExpect(async () => {
|
|
const screen = cli.screen();
|
|
expect(screen).toEqual(expect.arrayContaining([expect.stringContaining('Hello foo')]));
|
|
});
|
|
await expect(cli.exitCode()).resolves.toBe(0);
|
|
};
|
|
|
|
/**
|
|
* testDefaultValueRegistration
|
|
*/
|
|
const regDefaultWithArgReturnsFooDesc = 'default with arg returns foo (reg)';
|
|
const regDefaultWithArgCommand = ['e2e reg optional-value --arg1 foo'];
|
|
const regDefaultWithArgReturnsFoo = async (cli: Cli) => {
|
|
cli.run();
|
|
await waitForExpect(async () => {
|
|
const screen = cli.screen();
|
|
expect(screen).toEqual(expect.arrayContaining([expect.stringContaining('Hello foo')]));
|
|
});
|
|
await expect(cli.exitCode()).resolves.toBe(0);
|
|
};
|
|
|
|
/**
|
|
* testDefaultValueBoolean1 - 1
|
|
*/
|
|
const annoDefaultValueBoolean1WithoutArgReturnsFalseDesc = 'default boolean1 without arg returns false (anno)';
|
|
const annoDefaultValueBoolean1WithoutArgCommand = ['e2e anno default-value-boolean1'];
|
|
const annoDefaultValueBoolean1WithoutArgReturnsFalse = async (cli: Cli) => {
|
|
cli.run();
|
|
await waitForExpect(async () => {
|
|
const screen = cli.screen();
|
|
expect(screen).toEqual(expect.arrayContaining([expect.stringContaining('Hello false')]));
|
|
});
|
|
await expect(cli.exitCode()).resolves.toBe(0);
|
|
};
|
|
|
|
/**
|
|
* testDefaultValueBoolean1Registration - 1
|
|
*/
|
|
const regDefaultValueBoolean1WithoutArgReturnsFalseDesc = 'default boolean1 without arg returns false (reg)';
|
|
const regDefaultValueBoolean1WithoutArgCommand = ['e2e reg default-value-boolean1'];
|
|
const regDefaultValueBoolean1WithoutArgReturnsFalse = async (cli: Cli) => {
|
|
cli.run();
|
|
await waitForExpect(async () => {
|
|
const screen = cli.screen();
|
|
expect(screen).toEqual(expect.arrayContaining([expect.stringContaining('Hello false')]));
|
|
});
|
|
await expect(cli.exitCode()).resolves.toBe(0);
|
|
};
|
|
|
|
/**
|
|
* testDefaultValueBoolean1 - 2
|
|
*/
|
|
const annoDefaultValueBoolean2WithArgReturnsTrueDesc = 'default boolean1 with arg returns true (anno)';
|
|
const annoDefaultValueBoolean2WithArgCommand = ['e2e anno default-value-boolean1 --arg1'];
|
|
const annoDefaultValueBoolean2WithArgReturnsTrue = async (cli: Cli) => {
|
|
cli.run();
|
|
await waitForExpect(async () => {
|
|
const screen = cli.screen();
|
|
expect(screen).toEqual(expect.arrayContaining([expect.stringContaining('Hello true')]));
|
|
});
|
|
await expect(cli.exitCode()).resolves.toBe(0);
|
|
};
|
|
|
|
/**
|
|
* testDefaultValueBoolean1Registration - 2
|
|
*/
|
|
const regDefaultValueBoolean2WithArgReturnsTrueDesc = 'default boolean1 with arg returns true (reg)';
|
|
const regDefaultValueBoolean2WithArgCommand = ['e2e reg default-value-boolean1 --arg1'];
|
|
const regDefaultValueBoolean2WithArgReturnsTrue = async (cli: Cli) => {
|
|
cli.run();
|
|
await waitForExpect(async () => {
|
|
const screen = cli.screen();
|
|
expect(screen).toEqual(expect.arrayContaining([expect.stringContaining('Hello true')]));
|
|
});
|
|
await expect(cli.exitCode()).resolves.toBe(0);
|
|
};
|
|
|
|
/**
|
|
* testDefaultValueBoolean1 - 3
|
|
*/
|
|
const annoDefaultValueBoolean3WithArgReturnsFalseDesc = 'default boolean1 with arg returns false (anno)';
|
|
const annoDefaultValueBoolean3WithArgCommand = ['e2e anno default-value-boolean1 --arg1 false'];
|
|
const annoDefaultValueBoolean3WithArgReturnsFalse = async (cli: Cli) => {
|
|
cli.run();
|
|
await waitForExpect(async () => {
|
|
const screen = cli.screen();
|
|
expect(screen).toEqual(expect.arrayContaining([expect.stringContaining('Hello false')]));
|
|
});
|
|
await expect(cli.exitCode()).resolves.toBe(0);
|
|
};
|
|
|
|
/**
|
|
* testDefaultValueBoolean1Registration - 3
|
|
*/
|
|
const regDefaultValueBoolean3WithArgReturnsFalseDesc = 'default boolean1 with arg returns false (reg)';
|
|
const regDefaultValueBoolean3WithArgCommand = ['e2e reg default-value-boolean1 --arg1 false'];
|
|
const regDefaultValueBoolean3WithArgReturnsFalse = async (cli: Cli) => {
|
|
cli.run();
|
|
await waitForExpect(async () => {
|
|
const screen = cli.screen();
|
|
expect(screen).toEqual(expect.arrayContaining([expect.stringContaining('Hello false')]));
|
|
});
|
|
await expect(cli.exitCode()).resolves.toBe(0);
|
|
};
|
|
|
|
/**
|
|
* testDefaultValueBoolean2 - 1
|
|
*/
|
|
const annoDefaultValueBoolean2WithoutArgReturnsTrueDesc = 'default boolean2 without arg returns true (anno)';
|
|
const annoDefaultValueBoolean2WithoutArgCommand = ['e2e anno default-value-boolean2'];
|
|
const annoDefaultValueBoolean2WithoutArgReturnsTrue = async (cli: Cli) => {
|
|
cli.run();
|
|
await waitForExpect(async () => {
|
|
const screen = cli.screen();
|
|
expect(screen).toEqual(expect.arrayContaining([expect.stringContaining('Hello true')]));
|
|
});
|
|
await expect(cli.exitCode()).resolves.toBe(0);
|
|
};
|
|
|
|
/**
|
|
* testDefaultValueBoolean2Registration - 1
|
|
*/
|
|
const regDefaultValueBoolean2WithoutArgReturnsTrueDesc = 'default boolean2 without arg returns true (reg)';
|
|
const regDefaultValueBoolean2WithoutArgCommand = ['e2e reg default-value-boolean2'];
|
|
const regDefaultValueBoolean2WithoutArgReturnsTrue = async (cli: Cli) => {
|
|
cli.run();
|
|
await waitForExpect(async () => {
|
|
const screen = cli.screen();
|
|
expect(screen).toEqual(expect.arrayContaining([expect.stringContaining('Hello true')]));
|
|
});
|
|
await expect(cli.exitCode()).resolves.toBe(0);
|
|
};
|
|
|
|
/**
|
|
* testDefaultValueBoolean3 - 1
|
|
*/
|
|
const annoDefaultValueBoolean3WithoutArgReturnsFalseDesc = 'default boolean3 without arg returns false (anno)';
|
|
const annoDefaultValueBoolean3WithoutArgCommand = ['e2e anno default-value-boolean3'];
|
|
const annoDefaultValueBoolean3WithoutArgReturnsFalse = async (cli: Cli) => {
|
|
cli.run();
|
|
await waitForExpect(async () => {
|
|
const screen = cli.screen();
|
|
expect(screen).toEqual(expect.arrayContaining([expect.stringContaining('Hello false')]));
|
|
});
|
|
await expect(cli.exitCode()).resolves.toBe(0);
|
|
};
|
|
|
|
/**
|
|
* testDefaultValueBoolean3Registration - 1
|
|
*/
|
|
const regDefaultValueBoolean3WithoutArgReturnsFalseDesc = 'default boolean3 without arg returns false (reg)';
|
|
const regDefaultValueBoolean3WithoutArgCommand = ['e2e reg default-value-boolean3'];
|
|
const regDefaultValueBoolean3WithoutArgReturnsFalse = async (cli: Cli) => {
|
|
cli.run();
|
|
await waitForExpect(async () => {
|
|
const screen = cli.screen();
|
|
expect(screen).toEqual(expect.arrayContaining([expect.stringContaining('Hello false')]));
|
|
});
|
|
await expect(cli.exitCode()).resolves.toBe(0);
|
|
};
|
|
|
|
beforeEach(async () => {
|
|
waitForExpect.defaults.timeout = waitForExpectDefaultTimeout;
|
|
waitForExpect.defaults.interval = waitForExpectDefaultInterval;
|
|
}, testTimeout);
|
|
|
|
afterEach(async () => {
|
|
cli?.dispose();
|
|
}, testTimeout);
|
|
|
|
/**
|
|
* fatjar commands
|
|
*/
|
|
describe(jarDesc, () => {
|
|
beforeAll(() => {
|
|
command = jarCommand;
|
|
options = jarOptions;
|
|
});
|
|
|
|
it(
|
|
annoDefaultWithoutArgReturnsHiDesc,
|
|
async () => {
|
|
cli = new Cli({
|
|
command: command,
|
|
options: [...options, ...annoDefaultWithoutArgCommand]
|
|
});
|
|
await annoDefaultWithoutArgReturnsHi(cli);
|
|
},
|
|
testTimeout
|
|
);
|
|
|
|
it(
|
|
regDefaultWithoutArgReturnsHiDesc,
|
|
async () => {
|
|
cli = new Cli({
|
|
command: command,
|
|
options: [...options, ...regDefaultWithoutArgCommand]
|
|
});
|
|
await regOptionalWithoutArgReturnsHi(cli);
|
|
},
|
|
testTimeout
|
|
);
|
|
|
|
it(
|
|
annoDefaultWithArgReturnsFooDesc,
|
|
async () => {
|
|
cli = new Cli({
|
|
command: command,
|
|
options: [...options, ...annoDefaultWithArgCommand]
|
|
});
|
|
await annoDefaultWithArgReturnsFoo(cli);
|
|
},
|
|
testTimeout
|
|
);
|
|
|
|
it(
|
|
regDefaultWithArgReturnsFooDesc,
|
|
async () => {
|
|
cli = new Cli({
|
|
command: command,
|
|
options: [...options, ...regDefaultWithArgCommand]
|
|
});
|
|
await regDefaultWithArgReturnsFoo(cli);
|
|
},
|
|
testTimeout
|
|
);
|
|
|
|
it(
|
|
annoDefaultValueBoolean1WithoutArgReturnsFalseDesc,
|
|
async () => {
|
|
cli = new Cli({
|
|
command: command,
|
|
options: [...options, ...annoDefaultValueBoolean1WithoutArgCommand]
|
|
});
|
|
await annoDefaultValueBoolean1WithoutArgReturnsFalse(cli);
|
|
},
|
|
testTimeout
|
|
);
|
|
|
|
it(
|
|
regDefaultValueBoolean1WithoutArgReturnsFalseDesc,
|
|
async () => {
|
|
cli = new Cli({
|
|
command: command,
|
|
options: [...options, ...regDefaultValueBoolean1WithoutArgCommand]
|
|
});
|
|
await regDefaultValueBoolean1WithoutArgReturnsFalse(cli);
|
|
},
|
|
testTimeout
|
|
);
|
|
|
|
it(
|
|
annoDefaultValueBoolean2WithArgReturnsTrueDesc,
|
|
async () => {
|
|
cli = new Cli({
|
|
command: command,
|
|
options: [...options, ...annoDefaultValueBoolean2WithArgCommand]
|
|
});
|
|
await annoDefaultValueBoolean2WithArgReturnsTrue(cli);
|
|
},
|
|
testTimeout
|
|
);
|
|
|
|
it(
|
|
regDefaultValueBoolean2WithArgReturnsTrueDesc,
|
|
async () => {
|
|
cli = new Cli({
|
|
command: command,
|
|
options: [...options, ...regDefaultValueBoolean2WithArgCommand]
|
|
});
|
|
await regDefaultValueBoolean2WithArgReturnsTrue(cli);
|
|
},
|
|
testTimeout
|
|
);
|
|
|
|
it(
|
|
annoDefaultValueBoolean3WithArgReturnsFalseDesc,
|
|
async () => {
|
|
cli = new Cli({
|
|
command: command,
|
|
options: [...options, ...annoDefaultValueBoolean3WithArgCommand]
|
|
});
|
|
await annoDefaultValueBoolean3WithArgReturnsFalse(cli);
|
|
},
|
|
testTimeout
|
|
);
|
|
|
|
it(
|
|
regDefaultValueBoolean3WithArgReturnsFalseDesc,
|
|
async () => {
|
|
cli = new Cli({
|
|
command: command,
|
|
options: [...options, ...regDefaultValueBoolean3WithArgCommand]
|
|
});
|
|
await regDefaultValueBoolean3WithArgReturnsFalse(cli);
|
|
},
|
|
testTimeout
|
|
);
|
|
|
|
it(
|
|
annoDefaultValueBoolean2WithoutArgReturnsTrueDesc,
|
|
async () => {
|
|
cli = new Cli({
|
|
command: command,
|
|
options: [...options, ...annoDefaultValueBoolean2WithoutArgCommand]
|
|
});
|
|
await annoDefaultValueBoolean2WithoutArgReturnsTrue(cli);
|
|
},
|
|
testTimeout
|
|
);
|
|
|
|
it(
|
|
regDefaultValueBoolean2WithoutArgReturnsTrueDesc,
|
|
async () => {
|
|
cli = new Cli({
|
|
command: command,
|
|
options: [...options, ...regDefaultValueBoolean2WithoutArgCommand]
|
|
});
|
|
await regDefaultValueBoolean2WithoutArgReturnsTrue(cli);
|
|
},
|
|
testTimeout
|
|
);
|
|
|
|
it(
|
|
annoDefaultValueBoolean3WithoutArgReturnsFalseDesc,
|
|
async () => {
|
|
cli = new Cli({
|
|
command: command,
|
|
options: [...options, ...annoDefaultValueBoolean3WithoutArgCommand]
|
|
});
|
|
await annoDefaultValueBoolean3WithoutArgReturnsFalse(cli);
|
|
},
|
|
testTimeout
|
|
);
|
|
|
|
it(
|
|
regDefaultValueBoolean3WithoutArgReturnsFalseDesc,
|
|
async () => {
|
|
cli = new Cli({
|
|
command: command,
|
|
options: [...options, ...regDefaultValueBoolean3WithoutArgCommand]
|
|
});
|
|
await regDefaultValueBoolean3WithoutArgReturnsFalse(cli);
|
|
},
|
|
testTimeout
|
|
);
|
|
});
|
|
|
|
/**
|
|
* native commands
|
|
*/
|
|
describe(nativeDesc, () => {
|
|
beforeAll(() => {
|
|
command = nativeCommand;
|
|
options = [];
|
|
});
|
|
|
|
it(
|
|
annoDefaultWithoutArgReturnsHiDesc,
|
|
async () => {
|
|
cli = new Cli({
|
|
command: command,
|
|
options: [...options, ...annoDefaultWithoutArgCommand]
|
|
});
|
|
await annoDefaultWithoutArgReturnsHi(cli);
|
|
},
|
|
testTimeout
|
|
);
|
|
|
|
it(
|
|
regDefaultWithoutArgReturnsHiDesc,
|
|
async () => {
|
|
cli = new Cli({
|
|
command: command,
|
|
options: [...options, ...regDefaultWithoutArgCommand]
|
|
});
|
|
await regOptionalWithoutArgReturnsHi(cli);
|
|
},
|
|
testTimeout
|
|
);
|
|
|
|
it(
|
|
annoDefaultWithArgReturnsFooDesc,
|
|
async () => {
|
|
cli = new Cli({
|
|
command: command,
|
|
options: [...options, ...annoDefaultWithArgCommand]
|
|
});
|
|
await annoDefaultWithArgReturnsFoo(cli);
|
|
},
|
|
testTimeout
|
|
);
|
|
|
|
it(
|
|
regDefaultWithArgReturnsFooDesc,
|
|
async () => {
|
|
cli = new Cli({
|
|
command: command,
|
|
options: [...options, ...regDefaultWithArgCommand]
|
|
});
|
|
await regDefaultWithArgReturnsFoo(cli);
|
|
},
|
|
testTimeout
|
|
);
|
|
|
|
it(
|
|
annoDefaultValueBoolean1WithoutArgReturnsFalseDesc,
|
|
async () => {
|
|
cli = new Cli({
|
|
command: command,
|
|
options: [...options, ...annoDefaultValueBoolean1WithoutArgCommand]
|
|
});
|
|
await annoDefaultValueBoolean1WithoutArgReturnsFalse(cli);
|
|
},
|
|
testTimeout
|
|
);
|
|
|
|
it(
|
|
regDefaultValueBoolean1WithoutArgReturnsFalseDesc,
|
|
async () => {
|
|
cli = new Cli({
|
|
command: command,
|
|
options: [...options, ...regDefaultValueBoolean1WithoutArgCommand]
|
|
});
|
|
await regDefaultValueBoolean1WithoutArgReturnsFalse(cli);
|
|
},
|
|
testTimeout
|
|
);
|
|
|
|
it(
|
|
annoDefaultValueBoolean2WithArgReturnsTrueDesc,
|
|
async () => {
|
|
cli = new Cli({
|
|
command: command,
|
|
options: [...options, ...annoDefaultValueBoolean2WithArgCommand]
|
|
});
|
|
await annoDefaultValueBoolean2WithArgReturnsTrue(cli);
|
|
},
|
|
testTimeout
|
|
);
|
|
|
|
it(
|
|
regDefaultValueBoolean2WithArgReturnsTrueDesc,
|
|
async () => {
|
|
cli = new Cli({
|
|
command: command,
|
|
options: [...options, ...regDefaultValueBoolean2WithArgCommand]
|
|
});
|
|
await regDefaultValueBoolean2WithArgReturnsTrue(cli);
|
|
},
|
|
testTimeout
|
|
);
|
|
|
|
it(
|
|
annoDefaultValueBoolean3WithArgReturnsFalseDesc,
|
|
async () => {
|
|
cli = new Cli({
|
|
command: command,
|
|
options: [...options, ...annoDefaultValueBoolean3WithArgCommand]
|
|
});
|
|
await annoDefaultValueBoolean3WithArgReturnsFalse(cli);
|
|
},
|
|
testTimeout
|
|
);
|
|
|
|
it(
|
|
regDefaultValueBoolean3WithArgReturnsFalseDesc,
|
|
async () => {
|
|
cli = new Cli({
|
|
command: command,
|
|
options: [...options, ...regDefaultValueBoolean3WithArgCommand]
|
|
});
|
|
await regDefaultValueBoolean3WithArgReturnsFalse(cli);
|
|
},
|
|
testTimeout
|
|
);
|
|
|
|
it(
|
|
annoDefaultValueBoolean2WithoutArgReturnsTrueDesc,
|
|
async () => {
|
|
cli = new Cli({
|
|
command: command,
|
|
options: [...options, ...annoDefaultValueBoolean2WithoutArgCommand]
|
|
});
|
|
await annoDefaultValueBoolean2WithoutArgReturnsTrue(cli);
|
|
},
|
|
testTimeout
|
|
);
|
|
|
|
it(
|
|
regDefaultValueBoolean2WithoutArgReturnsTrueDesc,
|
|
async () => {
|
|
cli = new Cli({
|
|
command: command,
|
|
options: [...options, ...regDefaultValueBoolean2WithoutArgCommand]
|
|
});
|
|
await regDefaultValueBoolean2WithoutArgReturnsTrue(cli);
|
|
},
|
|
testTimeout
|
|
);
|
|
|
|
it(
|
|
annoDefaultValueBoolean3WithoutArgReturnsFalseDesc,
|
|
async () => {
|
|
cli = new Cli({
|
|
command: command,
|
|
options: [...options, ...annoDefaultValueBoolean3WithoutArgCommand]
|
|
});
|
|
await annoDefaultValueBoolean3WithoutArgReturnsFalse(cli);
|
|
},
|
|
testTimeout
|
|
);
|
|
|
|
it(
|
|
regDefaultValueBoolean3WithoutArgReturnsFalseDesc,
|
|
async () => {
|
|
cli = new Cli({
|
|
command: command,
|
|
options: [...options, ...regDefaultValueBoolean3WithoutArgCommand]
|
|
});
|
|
await regDefaultValueBoolean3WithoutArgReturnsFalse(cli);
|
|
},
|
|
testTimeout
|
|
);
|
|
});
|
|
});
|