2022-09-27 14:47:12 +02:00
import each from 'jest-each' ;
2023-05-15 14:09:29 +02:00
import semver from 'semver' ;
2023-05-29 19:43:18 +09:00
import fs from 'fs' ;
import fspromises from 'fs/promises' ;
2026-02-27 00:47:54 +05:30
import os from 'os' ;
2023-05-15 14:09:29 +02:00
import * as exec from '@actions/exec' ;
import * as core from '@actions/core' ;
import * as io from '@actions/io' ;
2022-09-27 14:47:12 +02:00
import * as installer from '../src/installer' ;
import { IS_WINDOWS } from '../src/utils' ;
2023-05-15 14:09:29 +02:00
import { QualityOptions } from '../src/setup-dotnet' ;
describe ( 'installer tests' , ( ) = > {
const env = process . env ;
beforeEach ( ( ) = > {
jest . resetModules ( ) ;
process . env = { . . . env } ;
} ) ;
describe ( 'DotnetCoreInstaller tests' , ( ) = > {
const getExecOutputSpy = jest . spyOn ( exec , 'getExecOutput' ) ;
const warningSpy = jest . spyOn ( core , 'warning' ) ;
const whichSpy = jest . spyOn ( io , 'which' ) ;
const maxSatisfyingSpy = jest . spyOn ( semver , 'maxSatisfying' ) ;
2023-05-29 19:43:18 +09:00
const chmodSyncSpy = jest . spyOn ( fs , 'chmodSync' ) ;
const readdirSpy = jest . spyOn ( fspromises , 'readdir' ) ;
2023-05-15 14:09:29 +02:00
describe ( 'installDotnet() tests' , ( ) = > {
2023-05-29 19:43:18 +09:00
beforeAll ( ( ) = > {
whichSpy . mockImplementation ( ( ) = > Promise . resolve ( 'PathToShell' ) ) ;
chmodSyncSpy . mockImplementation ( ( ) = > { } ) ;
readdirSpy . mockImplementation ( ( ) = > Promise . resolve ( [ ] ) ) ;
} ) ;
afterAll ( ( ) = > {
jest . resetAllMocks ( ) ;
} ) ;
2023-05-15 14:09:29 +02:00
it ( 'should throw the error in case of non-zero exit code of the installation script. The error message should contain logs.' , async ( ) = > {
2026-01-14 04:37:38 +05:30
const inputVersion = '10.0.101' ;
2023-05-15 14:09:29 +02:00
const inputQuality = '' as QualityOptions ;
const errorMessage = 'fictitious error message!' ;
2023-05-29 19:43:18 +09:00
2023-05-15 14:09:29 +02:00
getExecOutputSpy . mockImplementation ( ( ) = > {
return Promise . resolve ( {
exitCode : 1 ,
stdout : '' ,
stderr : errorMessage
} ) ;
} ) ;
2023-05-29 19:43:18 +09:00
2023-05-15 14:09:29 +02:00
const dotnetInstaller = new installer . DotnetCoreInstaller (
inputVersion ,
inputQuality
) ;
await expect ( dotnetInstaller . installDotnet ( ) ) . rejects . toThrow (
` Failed to install dotnet, exit code: 1. ${ errorMessage } `
) ;
} ) ;
it ( 'should return version of .NET SDK after installation complete' , async ( ) = > {
2026-01-14 04:37:38 +05:30
const inputVersion = '10.0.101' ;
2023-05-15 14:09:29 +02:00
const inputQuality = '' as QualityOptions ;
2023-05-15 14:24:28 +02:00
const stdout = ` Fictitious dotnet version ${ inputVersion } is installed ` ;
2023-05-15 14:09:29 +02:00
getExecOutputSpy . mockImplementation ( ( ) = > {
2023-05-15 14:24:28 +02:00
return Promise . resolve ( {
exitCode : 0 ,
stdout : ` ${ stdout } ` ,
stderr : ''
} ) ;
2023-05-15 14:09:29 +02:00
} ) ;
maxSatisfyingSpy . mockImplementation ( ( ) = > inputVersion ) ;
const dotnetInstaller = new installer . DotnetCoreInstaller (
inputVersion ,
inputQuality
) ;
const installedVersion = await dotnetInstaller . installDotnet ( ) ;
expect ( installedVersion ) . toBe ( inputVersion ) ;
} ) ;
it ( ` should supply 'version' argument to the installation script if supplied version is in A.B.C syntax ` , async ( ) = > {
2026-01-14 04:37:38 +05:30
const inputVersion = '10.0.101' ;
2023-05-15 14:09:29 +02:00
const inputQuality = '' as QualityOptions ;
2023-05-15 14:24:28 +02:00
const stdout = ` Fictitious dotnet version ${ inputVersion } is installed ` ;
2023-05-15 14:09:29 +02:00
getExecOutputSpy . mockImplementation ( ( ) = > {
2023-05-15 14:24:28 +02:00
return Promise . resolve ( {
exitCode : 0 ,
stdout : ` ${ stdout } ` ,
stderr : ''
} ) ;
2023-05-15 14:09:29 +02:00
} ) ;
maxSatisfyingSpy . mockImplementation ( ( ) = > inputVersion ) ;
const dotnetInstaller = new installer . DotnetCoreInstaller (
inputVersion ,
inputQuality
) ;
await dotnetInstaller . installDotnet ( ) ;
2023-05-24 17:57:28 +02:00
/ * *
* First time script would be called to
* install runtime , here we checking only the
* second one that installs actual SDK . i . e . 1
* /
const callIndex = 1 ;
2023-05-15 14:09:29 +02:00
const scriptArguments = (
2023-05-24 17:57:28 +02:00
getExecOutputSpy . mock . calls [ callIndex ] [ 1 ] as string [ ]
2023-05-15 14:09:29 +02:00
) . join ( ' ' ) ;
const expectedArgument = IS_WINDOWS
? ` -Version ${ inputVersion } `
: ` --version ${ inputVersion } ` ;
expect ( scriptArguments ) . toContain ( expectedArgument ) ;
} ) ;
it ( ` should warn if the 'quality' input is set and the supplied version is in A.B.C syntax ` , async ( ) = > {
2026-01-14 04:37:38 +05:30
const inputVersion = '10.0.101' ;
2023-05-15 14:09:29 +02:00
const inputQuality = 'ga' as QualityOptions ;
2023-05-15 14:24:28 +02:00
const stdout = ` Fictitious dotnet version ${ inputVersion } is installed ` ;
2023-05-15 14:09:29 +02:00
getExecOutputSpy . mockImplementation ( ( ) = > {
2023-05-15 14:24:28 +02:00
return Promise . resolve ( {
exitCode : 0 ,
stdout : ` ${ stdout } ` ,
stderr : ''
} ) ;
2023-05-15 14:09:29 +02:00
} ) ;
maxSatisfyingSpy . mockImplementation ( ( ) = > inputVersion ) ;
const dotnetInstaller = new installer . DotnetCoreInstaller (
inputVersion ,
inputQuality
) ;
await dotnetInstaller . installDotnet ( ) ;
expect ( warningSpy ) . toHaveBeenCalledWith (
2023-05-18 12:39:22 +02:00
` The 'dotnet-quality' input can be used only with .NET SDK version in A.B, A.B.x, A, A.x and A.B.Cxx formats where the major tag is higher than 5. You specified: ${ inputVersion } . 'dotnet-quality' input is ignored. `
2023-05-15 14:09:29 +02:00
) ;
} ) ;
it ( ` should warn if the 'quality' input is set and version isn't in A.B.C syntax but major tag is lower then 6 ` , async ( ) = > {
const inputVersion = '3.1' ;
const inputQuality = 'ga' as QualityOptions ;
2026-01-14 04:37:38 +05:30
const stdout = ` Fictitious dotnet version ${ inputVersion } is installed ` ;
2023-05-15 14:09:29 +02:00
getExecOutputSpy . mockImplementation ( ( ) = > {
2023-05-15 14:24:28 +02:00
return Promise . resolve ( {
exitCode : 0 ,
stdout : ` ${ stdout } ` ,
stderr : ''
} ) ;
2023-05-15 14:09:29 +02:00
} ) ;
maxSatisfyingSpy . mockImplementation ( ( ) = > inputVersion ) ;
const dotnetInstaller = new installer . DotnetCoreInstaller (
inputVersion ,
inputQuality
) ;
await dotnetInstaller . installDotnet ( ) ;
expect ( warningSpy ) . toHaveBeenCalledWith (
2023-05-18 12:39:22 +02:00
` The 'dotnet-quality' input can be used only with .NET SDK version in A.B, A.B.x, A, A.x and A.B.Cxx formats where the major tag is higher than 5. You specified: ${ inputVersion } . 'dotnet-quality' input is ignored. `
2023-05-15 14:09:29 +02:00
) ;
} ) ;
2026-01-14 04:37:38 +05:30
each ( [ '10' , '10.0' , '10.0.x' , '10.0.*' , '10.0.X' ] ) . test (
2023-05-15 14:09:29 +02:00
` should supply 'quality' argument to the installation script if quality input is set and version (%s) is not in A.B.C syntax ` ,
async inputVersion = > {
const inputQuality = 'ga' as QualityOptions ;
const exitCode = 0 ;
2026-01-14 04:37:38 +05:30
const stdout = ` Fictitious dotnet version ${ inputVersion } is installed ` ;
2023-05-15 14:09:29 +02:00
getExecOutputSpy . mockImplementation ( ( ) = > {
return Promise . resolve ( {
exitCode : exitCode ,
2023-05-15 14:24:28 +02:00
stdout : ` ${ stdout } ` ,
2023-05-15 14:09:29 +02:00
stderr : ''
} ) ;
} ) ;
maxSatisfyingSpy . mockImplementation ( ( ) = > inputVersion ) ;
const dotnetInstaller = new installer . DotnetCoreInstaller (
inputVersion ,
inputQuality
) ;
await dotnetInstaller . installDotnet ( ) ;
2023-05-24 17:57:28 +02:00
/ * *
* First time script would be called to
* install runtime , here we checking only the
* second one that installs actual SDK . i . e . 1
* /
const callIndex = 1 ;
2023-05-15 14:09:29 +02:00
const scriptArguments = (
2023-05-24 17:57:28 +02:00
getExecOutputSpy . mock . calls [ callIndex ] [ 1 ] as string [ ]
2023-05-15 14:09:29 +02:00
) . join ( ' ' ) ;
const expectedArgument = IS_WINDOWS
? ` -Quality ${ inputQuality } `
: ` --quality ${ inputQuality } ` ;
expect ( scriptArguments ) . toContain ( expectedArgument ) ;
}
2023-05-05 10:44:54 +02:00
) ;
2023-05-15 14:09:29 +02:00
2026-01-14 04:37:38 +05:30
each ( [ '10' , '10.0' , '10.0.x' , '10.0.*' , '10.0.X' ] ) . test (
2023-05-15 14:09:29 +02:00
` should supply 'channel' argument to the installation script if version (%s) isn't in A.B.C syntax ` ,
async inputVersion = > {
const inputQuality = '' as QualityOptions ;
const exitCode = 0 ;
2026-01-14 04:37:38 +05:30
const stdout = ` Fictitious dotnet version ${ inputVersion } is installed ` ;
2023-05-15 14:09:29 +02:00
getExecOutputSpy . mockImplementation ( ( ) = > {
return Promise . resolve ( {
exitCode : exitCode ,
2023-05-15 14:24:28 +02:00
stdout : ` ${ stdout } ` ,
2023-05-15 14:09:29 +02:00
stderr : ''
} ) ;
} ) ;
maxSatisfyingSpy . mockImplementation ( ( ) = > inputVersion ) ;
const dotnetInstaller = new installer . DotnetCoreInstaller (
inputVersion ,
inputQuality
) ;
await dotnetInstaller . installDotnet ( ) ;
2023-05-24 17:57:28 +02:00
/ * *
* First time script would be called to
* install runtime , here we checking only the
* second one that installs actual SDK . i . e . 1
* /
const callIndex = 1 ;
2023-05-15 14:09:29 +02:00
const scriptArguments = (
2023-05-24 17:57:28 +02:00
getExecOutputSpy . mock . calls [ callIndex ] [ 1 ] as string [ ]
2023-05-15 14:09:29 +02:00
) . join ( ' ' ) ;
const expectedArgument = IS_WINDOWS
2026-01-14 04:37:38 +05:30
? ` -Channel 10.0 `
: ` --channel 10.0 ` ;
2023-05-15 14:09:29 +02:00
expect ( scriptArguments ) . toContain ( expectedArgument ) ;
}
2023-05-05 10:44:54 +02:00
) ;
2023-05-15 14:09:29 +02:00
if ( IS_WINDOWS ) {
it ( ` should supply '-ProxyAddress' argument to the installation script if env.variable 'https_proxy' is set ` , async ( ) = > {
process . env [ 'https_proxy' ] = 'https://proxy.com' ;
2026-01-14 04:37:38 +05:30
const inputVersion = '10.0.101' ;
2023-05-15 14:09:29 +02:00
const inputQuality = '' as QualityOptions ;
2023-05-15 14:24:28 +02:00
const stdout = ` Fictitious dotnet version ${ inputVersion } is installed ` ;
2023-05-15 14:09:29 +02:00
getExecOutputSpy . mockImplementation ( ( ) = > {
2023-05-15 14:24:28 +02:00
return Promise . resolve ( {
exitCode : 0 ,
stdout : ` ${ stdout } ` ,
stderr : ''
} ) ;
2023-05-15 14:09:29 +02:00
} ) ;
maxSatisfyingSpy . mockImplementation ( ( ) = > inputVersion ) ;
const dotnetInstaller = new installer . DotnetCoreInstaller (
inputVersion ,
inputQuality
) ;
await dotnetInstaller . installDotnet ( ) ;
2023-05-24 17:57:28 +02:00
/ * *
* First time script would be called to
* install runtime , here we checking only the
* second one that installs actual SDK . i . e . 1
* /
const callIndex = 1 ;
2023-05-15 14:09:29 +02:00
const scriptArguments = (
2023-05-24 17:57:28 +02:00
getExecOutputSpy . mock . calls [ callIndex ] [ 1 ] as string [ ]
2023-05-15 14:09:29 +02:00
) . join ( ' ' ) ;
expect ( scriptArguments ) . toContain (
` -ProxyAddress ${ process . env [ 'https_proxy' ] } `
) ;
} ) ;
it ( ` should supply '-ProxyBypassList' argument to the installation script if env.variable 'no_proxy' is set ` , async ( ) = > {
process . env [ 'no_proxy' ] = 'first.url,second.url' ;
2026-01-14 04:37:38 +05:30
const inputVersion = '10.0.101' ;
2023-05-15 14:09:29 +02:00
const inputQuality = '' as QualityOptions ;
2026-01-14 04:37:38 +05:30
const stdout = ` Fictitious dotnet version ${ inputVersion } is installed ` ;
2023-05-15 14:09:29 +02:00
getExecOutputSpy . mockImplementation ( ( ) = > {
2023-05-15 14:24:28 +02:00
return Promise . resolve ( {
exitCode : 0 ,
stdout : ` ${ stdout } ` ,
stderr : ''
} ) ;
2023-05-15 14:09:29 +02:00
} ) ;
maxSatisfyingSpy . mockImplementation ( ( ) = > inputVersion ) ;
const dotnetInstaller = new installer . DotnetCoreInstaller (
inputVersion ,
inputQuality
) ;
await dotnetInstaller . installDotnet ( ) ;
2023-05-24 17:57:28 +02:00
/ * *
* First time script would be called to
* install runtime , here we checking only the
* second one that installs actual SDK . i . e . 1
* /
const callIndex = 1 ;
2023-05-15 14:09:29 +02:00
const scriptArguments = (
2023-05-24 17:57:28 +02:00
getExecOutputSpy . mock . calls [ callIndex ] [ 1 ] as string [ ]
2023-05-15 14:09:29 +02:00
) . join ( ' ' ) ;
expect ( scriptArguments ) . toContain (
` -ProxyBypassList ${ process . env [ 'no_proxy' ] } `
) ;
} ) ;
}
2026-02-27 00:47:54 +05:30
it ( ` should supply 'architecture' argument to the installation script when architecture is provided ` , async ( ) = > {
const inputVersion = '10.0.101' ;
const inputQuality = '' as QualityOptions ;
const inputArchitecture = 'x64' ;
const stdout = ` Fictitious dotnet version ${ inputVersion } is installed ` ;
getExecOutputSpy . mockImplementation ( ( ) = > {
return Promise . resolve ( {
exitCode : 0 ,
stdout : ` ${ stdout } ` ,
stderr : ''
} ) ;
} ) ;
maxSatisfyingSpy . mockImplementation ( ( ) = > inputVersion ) ;
const dotnetInstaller = new installer . DotnetCoreInstaller (
inputVersion ,
inputQuality ,
inputArchitecture
) ;
await dotnetInstaller . installDotnet ( ) ;
const callIndex = 1 ;
const scriptArguments = (
getExecOutputSpy . mock . calls [ callIndex ] [ 1 ] as string [ ]
) . join ( ' ' ) ;
const expectedArgument = IS_WINDOWS
? ` -Architecture ${ inputArchitecture } `
: ` --architecture ${ inputArchitecture } ` ;
expect ( scriptArguments ) . toContain ( expectedArgument ) ;
} ) ;
it ( ` should NOT supply 'architecture' argument when architecture is not provided ` , async ( ) = > {
const inputVersion = '10.0.101' ;
const inputQuality = '' as QualityOptions ;
const stdout = ` Fictitious dotnet version ${ inputVersion } is installed ` ;
getExecOutputSpy . mockImplementation ( ( ) = > {
return Promise . resolve ( {
exitCode : 0 ,
stdout : ` ${ stdout } ` ,
stderr : ''
} ) ;
} ) ;
maxSatisfyingSpy . mockImplementation ( ( ) = > inputVersion ) ;
const dotnetInstaller = new installer . DotnetCoreInstaller (
inputVersion ,
inputQuality
) ;
await dotnetInstaller . installDotnet ( ) ;
const callIndex = 1 ;
const scriptArguments = (
getExecOutputSpy . mock . calls [ callIndex ] [ 1 ] as string [ ]
) . join ( ' ' ) ;
expect ( scriptArguments ) . not . toContain ( '--architecture' ) ;
expect ( scriptArguments ) . not . toContain ( '-Architecture' ) ;
} ) ;
it ( ` should supply 'install-dir' with arch subdirectory for cross-arch install ` , async ( ) = > {
const inputVersion = '10.0.101' ;
const inputQuality = '' as QualityOptions ;
const inputArchitecture = 'x64' ;
const stdout = ` Fictitious dotnet version ${ inputVersion } is installed ` ;
getExecOutputSpy . mockImplementation ( ( ) = > {
return Promise . resolve ( {
exitCode : 0 ,
stdout : ` ${ stdout } ` ,
stderr : ''
} ) ;
} ) ;
maxSatisfyingSpy . mockImplementation ( ( ) = > inputVersion ) ;
// Mock os.arch() to return a different arch to simulate cross-arch
const archSpy = jest . spyOn ( os , 'arch' ) . mockReturnValue ( 'arm64' ) ;
const dotnetInstaller = new installer . DotnetCoreInstaller (
inputVersion ,
inputQuality ,
inputArchitecture
) ;
await dotnetInstaller . installDotnet ( ) ;
const callIndex = 1 ;
const scriptArguments = (
getExecOutputSpy . mock . calls [ callIndex ] [ 1 ] as string [ ]
) . join ( ' ' ) ;
const expectedInstallDirFlag = IS_WINDOWS
? '-InstallDir'
: '--install-dir' ;
expect ( scriptArguments ) . toContain ( expectedInstallDirFlag ) ;
expect ( scriptArguments ) . toContain ( inputArchitecture ) ;
archSpy . mockRestore ( ) ;
} ) ;
it ( ` should NOT supply 'install-dir' when architecture matches runner's native arch ` , async ( ) = > {
const inputVersion = '10.0.101' ;
const inputQuality = '' as QualityOptions ;
const nativeArch = os . arch ( ) . toLowerCase ( ) ;
const stdout = ` Fictitious dotnet version ${ inputVersion } is installed ` ;
getExecOutputSpy . mockImplementation ( ( ) = > {
return Promise . resolve ( {
exitCode : 0 ,
stdout : ` ${ stdout } ` ,
stderr : ''
} ) ;
} ) ;
maxSatisfyingSpy . mockImplementation ( ( ) = > inputVersion ) ;
const dotnetInstaller = new installer . DotnetCoreInstaller (
inputVersion ,
inputQuality ,
nativeArch
) ;
await dotnetInstaller . installDotnet ( ) ;
const callIndex = 1 ;
const scriptArguments = (
getExecOutputSpy . mock . calls [ callIndex ] [ 1 ] as string [ ]
) . join ( ' ' ) ;
expect ( scriptArguments ) . not . toContain ( '--install-dir' ) ;
expect ( scriptArguments ) . not . toContain ( '-InstallDir' ) ;
} ) ;
2020-01-26 01:37:54 -05:00
} ) ;
2019-06-21 08:21:08 -04:00
2023-05-15 14:09:29 +02:00
describe ( 'addToPath() tests' , ( ) = > {
it ( ` should export DOTNET_ROOT env.var with value from DOTNET_INSTALL_DIR env.var ` , async ( ) = > {
process . env [ 'DOTNET_INSTALL_DIR' ] = 'fictitious/dotnet/install/dir' ;
2023-05-30 12:45:38 +02:00
installer . DotnetInstallDir . addToPath ( ) ;
2023-05-15 14:09:29 +02:00
const dotnet_root = process . env [ 'DOTNET_ROOT' ] ;
expect ( dotnet_root ) . toBe ( process . env [ 'DOTNET_INSTALL_DIR' ] ) ;
} ) ;
it ( ` should export value from DOTNET_INSTALL_DIR env.var to the PATH ` , async ( ) = > {
process . env [ 'DOTNET_INSTALL_DIR' ] = 'fictitious/dotnet/install/dir' ;
2023-05-30 12:45:38 +02:00
installer . DotnetInstallDir . addToPath ( ) ;
2023-05-15 14:09:29 +02:00
const path = process . env [ 'PATH' ] ;
expect ( path ) . toContain ( process . env [ 'DOTNET_INSTALL_DIR' ] ) ;
} ) ;
} ) ;
} ) ;
2026-02-27 00:47:54 +05:30
describe ( 'normalizeArch() tests' , ( ) = > {
it ( ` should normalize 'amd64' to 'x64' ` , ( ) = > {
expect ( installer . normalizeArch ( 'amd64' ) ) . toBe ( 'x64' ) ;
} ) ;
it ( ` should normalize 'AMD64' to 'x64' (case-insensitive) ` , ( ) = > {
expect ( installer . normalizeArch ( 'AMD64' ) ) . toBe ( 'x64' ) ;
} ) ;
it ( ` should pass through 'x64' unchanged ` , ( ) = > {
expect ( installer . normalizeArch ( 'x64' ) ) . toBe ( 'x64' ) ;
} ) ;
it ( ` should pass through 'arm64' unchanged ` , ( ) = > {
expect ( installer . normalizeArch ( 'arm64' ) ) . toBe ( 'arm64' ) ;
} ) ;
it ( ` should lowercase 'ARM64' ` , ( ) = > {
expect ( installer . normalizeArch ( 'ARM64' ) ) . toBe ( 'arm64' ) ;
} ) ;
it ( ` should pass through 'x86' unchanged ` , ( ) = > {
expect ( installer . normalizeArch ( 'x86' ) ) . toBe ( 'x86' ) ;
} ) ;
} ) ;
2023-05-15 14:09:29 +02:00
describe ( 'DotnetVersionResolver tests' , ( ) = > {
2023-05-24 16:59:05 +02:00
describe ( 'createDotnetVersion() tests' , ( ) = > {
2023-05-15 14:09:29 +02:00
each ( [
2026-01-14 04:37:38 +05:30
'10.0' ,
'10.x' ,
'10.0.x' ,
'10.0.*' ,
'10.0.X' ,
'10.0.0' ,
'10.0.0-preview7' ,
'10.0.1xx'
2023-05-15 14:09:29 +02:00
] ) . test (
'if valid version is supplied (%s), it should return version object with some value' ,
async version = > {
const dotnetVersionResolver = new installer . DotnetVersionResolver (
version
) ;
const versionObject =
2023-05-24 16:59:05 +02:00
await dotnetVersionResolver . createDotnetVersion ( ) ;
2023-05-15 14:09:29 +02:00
expect ( ! ! versionObject . value ) . toBe ( true ) ;
}
2023-05-05 10:44:54 +02:00
) ;
2023-05-15 14:09:29 +02:00
each ( [
'.' ,
'..' ,
' . ' ,
'. ' ,
' .' ,
' . . ' ,
' .. ' ,
' . ' ,
'-1.-1' ,
'-1' ,
'-1.-1.-1' ,
'..3' ,
'1..3' ,
'1..' ,
'.2.3' ,
'.2.x' ,
'*.' ,
'1.2.' ,
'1.2.-abc' ,
'a.b' ,
'a.b.c' ,
'a.b.c-preview' ,
' 0 . 1 . 2 ' ,
'invalid'
] ) . test (
'if invalid version is supplied (%s), it should throw' ,
async version = > {
const dotnetVersionResolver = new installer . DotnetVersionResolver (
version
) ;
await expect (
2023-05-24 16:59:05 +02:00
async ( ) = > await dotnetVersionResolver . createDotnetVersion ( )
2023-05-15 14:09:29 +02:00
) . rejects . toThrow ( ) ;
}
2023-03-09 14:43:05 +02:00
) ;
2023-05-05 10:44:54 +02:00
2026-01-14 04:37:38 +05:30
each ( [ '10' , '10.0' , '10.0.x' , '10.0.*' , '10.0.X' , '10.0.1xx' ] ) . test (
2023-05-15 14:09:29 +02:00
"if version that can be resolved to 'channel' option is supplied (%s), it should set type to 'channel' in version object" ,
async version = > {
const dotnetVersionResolver = new installer . DotnetVersionResolver (
version
) ;
const versionObject =
2023-05-24 16:59:05 +02:00
await dotnetVersionResolver . createDotnetVersion ( ) ;
2023-05-15 14:09:29 +02:00
expect ( versionObject . type . toLowerCase ( ) . includes ( 'channel' ) ) . toBe (
true
) ;
}
2023-05-05 10:44:54 +02:00
) ;
2023-05-15 14:09:29 +02:00
2026-01-14 04:37:38 +05:30
each ( [ '10.0' , '10.0.x' , '10.0.*' , '10.0.X' , '10.0.1xx' ] ) . test (
2023-05-15 14:09:29 +02:00
"if version that can be resolved to 'channel' option is supplied and its major tag is >= 6 (%s), it should set type to 'channel' and qualityFlag to 'true' in version object" ,
async version = > {
const dotnetVersionResolver = new installer . DotnetVersionResolver (
version
) ;
const versionObject =
2023-05-24 16:59:05 +02:00
await dotnetVersionResolver . createDotnetVersion ( ) ;
2023-05-15 14:09:29 +02:00
expect ( versionObject . type . toLowerCase ( ) . includes ( 'channel' ) ) . toBe (
true
) ;
expect ( versionObject . qualityFlag ) . toBe ( true ) ;
}
2023-05-05 10:44:54 +02:00
) ;
2023-05-15 14:09:29 +02:00
2026-01-14 04:37:38 +05:30
each ( [ '10.0.0' , '10.0.0-preview7' ] ) . test (
2023-05-15 14:09:29 +02:00
"if version that can be resolved to 'version' option is supplied (%s), it should set quality flag to 'false' and type to 'version' in version object" ,
async version = > {
const dotnetVersionResolver = new installer . DotnetVersionResolver (
version
) ;
const versionObject =
2023-05-24 16:59:05 +02:00
await dotnetVersionResolver . createDotnetVersion ( ) ;
2023-05-15 14:09:29 +02:00
expect ( versionObject . type . toLowerCase ( ) . includes ( 'version' ) ) . toBe (
true
) ;
expect ( versionObject . qualityFlag ) . toBe ( false ) ;
}
2023-05-05 10:44:54 +02:00
) ;
2026-01-14 04:37:38 +05:30
each ( [ '10.0.0' , '10.0' ] ) . test (
2023-05-15 14:09:29 +02:00
'it should create proper line arguments for powershell/bash installation scripts' ,
async version = > {
const dotnetVersionResolver = new installer . DotnetVersionResolver (
version
) ;
const versionObject =
2023-05-24 16:59:05 +02:00
await dotnetVersionResolver . createDotnetVersion ( ) ;
2023-05-15 14:09:29 +02:00
const windowsRegEx = new RegExp ( /^-(Version|Channel)/ ) ;
const nonWindowsRegEx = new RegExp ( /^--(version|channel)/ ) ;
if ( IS_WINDOWS ) {
expect ( windowsRegEx . test ( versionObject . type ) ) . toBe ( true ) ;
expect ( nonWindowsRegEx . test ( versionObject . type ) ) . toBe ( false ) ;
} else {
expect ( nonWindowsRegEx . test ( versionObject . type ) ) . toBe ( true ) ;
expect ( windowsRegEx . test ( versionObject . type ) ) . toBe ( false ) ;
}
}
) ;
2023-05-18 11:11:51 +02:00
it ( ` should throw if dotnet-version is supplied in A.B.Cxx syntax with major tag lower that 5 ` , async ( ) = > {
const version = '3.0.1xx' ;
const dotnetVersionResolver = new installer . DotnetVersionResolver (
version
) ;
await expect (
2023-05-24 16:59:05 +02:00
async ( ) = > await dotnetVersionResolver . createDotnetVersion ( )
2023-05-18 11:11:51 +02:00
) . rejects . toThrow (
` 'dotnet-version' was supplied in invalid format: ${ version } ! The A.B.Cxx syntax is available since the .NET 5.0 release. `
) ;
} ) ;
2023-05-15 14:09:29 +02:00
} ) ;
} ) ;
2023-05-15 14:24:28 +02:00
} ) ;