mirror of
https://github.com/actions/setup-java.git
synced 2026-07-30 09:10:01 +08:00
Reject invalid boolean input values (#1160)
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: c6daa6b5-31f5-46b2-a994-b8320b50a50d
This commit is contained in:
+65
-1
@@ -57,9 +57,73 @@ const {
|
|||||||
isCacheFeatureAvailable,
|
isCacheFeatureAvailable,
|
||||||
isGhes,
|
isGhes,
|
||||||
validatePaginationUrl,
|
validatePaginationUrl,
|
||||||
getLatestMajorVersion
|
getLatestMajorVersion,
|
||||||
|
getBooleanInput
|
||||||
} = await import('../src/util.js');
|
} = await import('../src/util.js');
|
||||||
|
|
||||||
|
describe('getBooleanInput', () => {
|
||||||
|
let inputs: Record<string, string>;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
inputs = {};
|
||||||
|
(core.getInput as jest.Mock).mockImplementation(
|
||||||
|
(name: string) => inputs[name] ?? ''
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
jest.resetAllMocks();
|
||||||
|
});
|
||||||
|
|
||||||
|
it.each([
|
||||||
|
['true', true],
|
||||||
|
['TRUE', true],
|
||||||
|
['TrUe', true],
|
||||||
|
[' true ', true],
|
||||||
|
['false', false],
|
||||||
|
['FALSE', false],
|
||||||
|
['FaLsE', false],
|
||||||
|
[' false ', false]
|
||||||
|
])('parses %j as %s', (value: string, expected: boolean) => {
|
||||||
|
inputs['boolean-input'] = value;
|
||||||
|
|
||||||
|
expect(getBooleanInput('boolean-input')).toBe(expected);
|
||||||
|
});
|
||||||
|
|
||||||
|
it.each([
|
||||||
|
[undefined, false],
|
||||||
|
[false, false],
|
||||||
|
[true, true]
|
||||||
|
])(
|
||||||
|
'uses the configured default %s when the input is omitted',
|
||||||
|
(defaultValue: boolean | undefined, expected: boolean) => {
|
||||||
|
expect(getBooleanInput('boolean-input', defaultValue)).toBe(expected);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
it('uses the configured default for a whitespace-only input', () => {
|
||||||
|
inputs['boolean-input'] = ' ';
|
||||||
|
|
||||||
|
expect(getBooleanInput('boolean-input', true)).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it.each([
|
||||||
|
'check-latest',
|
||||||
|
'force-download',
|
||||||
|
'set-default',
|
||||||
|
'verify-signature',
|
||||||
|
'overwrite-settings',
|
||||||
|
'show-download-progress',
|
||||||
|
'problem-matcher'
|
||||||
|
])('rejects an invalid value for %s', inputName => {
|
||||||
|
inputs[inputName] = 'ture';
|
||||||
|
|
||||||
|
expect(() => getBooleanInput(inputName)).toThrow(
|
||||||
|
`Invalid value 'ture' for boolean input '${inputName}'. Expected 'true' or 'false'.`
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('isVersionSatisfies', () => {
|
describe('isVersionSatisfies', () => {
|
||||||
it.each([
|
it.each([
|
||||||
['x', '11.0.0', true],
|
['x', '11.0.0', true],
|
||||||
|
|||||||
Vendored
+12
-1
@@ -97365,7 +97365,18 @@ function getTempDir() {
|
|||||||
return tempDirectory;
|
return tempDirectory;
|
||||||
}
|
}
|
||||||
function util_getBooleanInput(inputName, defaultValue = false) {
|
function util_getBooleanInput(inputName, defaultValue = false) {
|
||||||
return ((core.getInput(inputName) || String(defaultValue)).toUpperCase() === 'TRUE');
|
const inputValue = core.getInput(inputName);
|
||||||
|
const normalizedValue = inputValue.trim().toLowerCase();
|
||||||
|
if (!normalizedValue) {
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
if (normalizedValue === 'true') {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (normalizedValue === 'false') {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
throw new Error(`Invalid value '${inputValue}' for boolean input '${inputName}'. Expected 'true' or 'false'.`);
|
||||||
}
|
}
|
||||||
function getVersionFromToolcachePath(toolPath) {
|
function getVersionFromToolcachePath(toolPath) {
|
||||||
if (toolPath) {
|
if (toolPath) {
|
||||||
|
|||||||
Vendored
+12
-1
@@ -128364,7 +128364,18 @@ function getTempDir() {
|
|||||||
return tempDirectory;
|
return tempDirectory;
|
||||||
}
|
}
|
||||||
function util_getBooleanInput(inputName, defaultValue = false) {
|
function util_getBooleanInput(inputName, defaultValue = false) {
|
||||||
return ((getInput(inputName) || String(defaultValue)).toUpperCase() === 'TRUE');
|
const inputValue = getInput(inputName);
|
||||||
|
const normalizedValue = inputValue.trim().toLowerCase();
|
||||||
|
if (!normalizedValue) {
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
if (normalizedValue === 'true') {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (normalizedValue === 'false') {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
throw new Error(`Invalid value '${inputValue}' for boolean input '${inputName}'. Expected 'true' or 'false'.`);
|
||||||
}
|
}
|
||||||
function getVersionFromToolcachePath(toolPath) {
|
function getVersionFromToolcachePath(toolPath) {
|
||||||
if (toolPath) {
|
if (toolPath) {
|
||||||
|
|||||||
+15
-2
@@ -20,8 +20,21 @@ export function getTempDir() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function getBooleanInput(inputName: string, defaultValue = false) {
|
export function getBooleanInput(inputName: string, defaultValue = false) {
|
||||||
return (
|
const inputValue = core.getInput(inputName);
|
||||||
(core.getInput(inputName) || String(defaultValue)).toUpperCase() === 'TRUE'
|
const normalizedValue = inputValue.trim().toLowerCase();
|
||||||
|
|
||||||
|
if (!normalizedValue) {
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
if (normalizedValue === 'true') {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (normalizedValue === 'false') {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new Error(
|
||||||
|
`Invalid value '${inputValue}' for boolean input '${inputName}'. Expected 'true' or 'false'.`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user