diff --git a/__tests__/util.test.ts b/__tests__/util.test.ts index d19ee52f..390b696a 100644 --- a/__tests__/util.test.ts +++ b/__tests__/util.test.ts @@ -57,9 +57,73 @@ const { isCacheFeatureAvailable, isGhes, validatePaginationUrl, - getLatestMajorVersion + getLatestMajorVersion, + getBooleanInput } = await import('../src/util.js'); +describe('getBooleanInput', () => { + let inputs: Record; + + 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', () => { it.each([ ['x', '11.0.0', true], diff --git a/dist/cleanup/index.js b/dist/cleanup/index.js index 6ef805e2..b2fa7b01 100644 --- a/dist/cleanup/index.js +++ b/dist/cleanup/index.js @@ -97365,7 +97365,18 @@ function getTempDir() { return tempDirectory; } 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) { if (toolPath) { diff --git a/dist/setup/index.js b/dist/setup/index.js index ee1e3f06..0ad49eb8 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -128364,7 +128364,18 @@ function getTempDir() { return tempDirectory; } 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) { if (toolPath) { diff --git a/src/util.ts b/src/util.ts index 74b73968..8881a1e7 100644 --- a/src/util.ts +++ b/src/util.ts @@ -20,8 +20,21 @@ export function getTempDir() { } export function getBooleanInput(inputName: string, 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'.` ); }