| 
									
										
										
										
											2021-04-05 13:02:27 +03:00
										 |  |  | import * as tc from '@actions/tool-cache'; | 
					
						
							|  |  |  | import * as core from '@actions/core'; | 
					
						
							|  |  |  | import * as util from '../../src/util'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import path from 'path'; | 
					
						
							|  |  |  | import * as semver from 'semver'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-09 14:49:35 +02:00
										 |  |  | import {JavaBase} from '../../src/distributions/base-installer'; | 
					
						
							| 
									
										
										
										
											2021-04-05 13:02:27 +03:00
										 |  |  | import { | 
					
						
							|  |  |  |   JavaDownloadRelease, | 
					
						
							|  |  |  |   JavaInstallerOptions, | 
					
						
							|  |  |  |   JavaInstallerResults | 
					
						
							|  |  |  | } from '../../src/distributions/base-models'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-10-10 17:47:17 -06:00
										 |  |  | import os from 'os'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-05 13:02:27 +03:00
										 |  |  | class EmptyJavaBase extends JavaBase { | 
					
						
							|  |  |  |   constructor(installerOptions: JavaInstallerOptions) { | 
					
						
							|  |  |  |     super('Empty', installerOptions); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-09 14:49:35 +02:00
										 |  |  |   protected async downloadTool( | 
					
						
							|  |  |  |     javaRelease: JavaDownloadRelease | 
					
						
							|  |  |  |   ): Promise<JavaInstallerResults> { | 
					
						
							| 
									
										
										
										
											2021-04-05 13:02:27 +03:00
										 |  |  |     return { | 
					
						
							|  |  |  |       version: '11.0.9', | 
					
						
							| 
									
										
										
										
											2023-03-09 14:49:35 +02:00
										 |  |  |       path: path.join( | 
					
						
							|  |  |  |         'toolcache', | 
					
						
							|  |  |  |         this.toolcacheFolderName, | 
					
						
							|  |  |  |         '11.0.9', | 
					
						
							|  |  |  |         this.architecture | 
					
						
							|  |  |  |       ) | 
					
						
							| 
									
										
										
										
											2021-04-05 13:02:27 +03:00
										 |  |  |     }; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-09 14:49:35 +02:00
										 |  |  |   protected async findPackageForDownload( | 
					
						
							|  |  |  |     range: string | 
					
						
							|  |  |  |   ): Promise<JavaDownloadRelease> { | 
					
						
							| 
									
										
										
										
											2021-04-05 13:02:27 +03:00
										 |  |  |     const availableVersion = '11.0.9'; | 
					
						
							|  |  |  |     if (!semver.satisfies(availableVersion, range)) { | 
					
						
							|  |  |  |       throw new Error('Available version not found'); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return { | 
					
						
							|  |  |  |       version: availableVersion, | 
					
						
							|  |  |  |       url: `some/random_url/java/${availableVersion}` | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | describe('findInToolcache', () => { | 
					
						
							|  |  |  |   const actualJavaVersion = '11.0.8'; | 
					
						
							|  |  |  |   const javaPath = path.join('Java_Empty_jdk', actualJavaVersion, 'x64'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   let mockJavaBase: EmptyJavaBase; | 
					
						
							|  |  |  |   let spyGetToolcachePath: jest.SpyInstance; | 
					
						
							|  |  |  |   let spyTcFindAllVersions: jest.SpyInstance; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   beforeEach(() => { | 
					
						
							|  |  |  |     spyGetToolcachePath = jest.spyOn(util, 'getToolcachePath'); | 
					
						
							|  |  |  |     spyTcFindAllVersions = jest.spyOn(tc, 'findAllVersions'); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   afterEach(() => { | 
					
						
							|  |  |  |     jest.resetAllMocks(); | 
					
						
							|  |  |  |     jest.clearAllMocks(); | 
					
						
							|  |  |  |     jest.restoreAllMocks(); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   it.each([ | 
					
						
							|  |  |  |     [ | 
					
						
							| 
									
										
										
										
											2023-03-09 14:49:35 +02:00
										 |  |  |       { | 
					
						
							|  |  |  |         version: '11', | 
					
						
							|  |  |  |         architecture: 'x64', | 
					
						
							|  |  |  |         packageType: 'jdk', | 
					
						
							|  |  |  |         checkLatest: false | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       {version: actualJavaVersion, path: javaPath} | 
					
						
							| 
									
										
										
										
											2021-04-05 13:02:27 +03:00
										 |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							| 
									
										
										
										
											2023-03-09 14:49:35 +02:00
										 |  |  |       { | 
					
						
							|  |  |  |         version: '11.0', | 
					
						
							|  |  |  |         architecture: 'x64', | 
					
						
							|  |  |  |         packageType: 'jdk', | 
					
						
							|  |  |  |         checkLatest: false | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       {version: actualJavaVersion, path: javaPath} | 
					
						
							| 
									
										
										
										
											2021-04-05 13:02:27 +03:00
										 |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							| 
									
										
										
										
											2023-03-09 14:49:35 +02:00
										 |  |  |       { | 
					
						
							|  |  |  |         version: '11.0.8', | 
					
						
							|  |  |  |         architecture: 'x64', | 
					
						
							|  |  |  |         packageType: 'jdk', | 
					
						
							|  |  |  |         checkLatest: false | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       {version: actualJavaVersion, path: javaPath} | 
					
						
							| 
									
										
										
										
											2021-04-05 13:02:27 +03:00
										 |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							| 
									
										
										
										
											2023-03-09 14:49:35 +02:00
										 |  |  |       { | 
					
						
							|  |  |  |         version: '11', | 
					
						
							|  |  |  |         architecture: 'x64', | 
					
						
							|  |  |  |         packageType: 'jdk', | 
					
						
							|  |  |  |         checkLatest: true | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       {version: actualJavaVersion, path: javaPath} | 
					
						
							| 
									
										
										
										
											2021-04-05 13:02:27 +03:00
										 |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							| 
									
										
										
										
											2023-03-09 14:49:35 +02:00
										 |  |  |       { | 
					
						
							|  |  |  |         version: '11.0', | 
					
						
							|  |  |  |         architecture: 'x64', | 
					
						
							|  |  |  |         packageType: 'jdk', | 
					
						
							|  |  |  |         checkLatest: true | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       {version: actualJavaVersion, path: javaPath} | 
					
						
							| 
									
										
										
										
											2021-04-05 13:02:27 +03:00
										 |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							| 
									
										
										
										
											2023-03-09 14:49:35 +02:00
										 |  |  |       { | 
					
						
							|  |  |  |         version: '11.0.8', | 
					
						
							|  |  |  |         architecture: 'x64', | 
					
						
							|  |  |  |         packageType: 'jdk', | 
					
						
							|  |  |  |         checkLatest: true | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       {version: actualJavaVersion, path: javaPath} | 
					
						
							| 
									
										
										
										
											2021-04-05 13:02:27 +03:00
										 |  |  |     ], | 
					
						
							| 
									
										
										
										
											2023-03-09 14:49:35 +02:00
										 |  |  |     [ | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         version: '11', | 
					
						
							|  |  |  |         architecture: 'x64', | 
					
						
							|  |  |  |         packageType: 'jre', | 
					
						
							|  |  |  |         checkLatest: false | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       null | 
					
						
							|  |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         version: '8', | 
					
						
							|  |  |  |         architecture: 'x64', | 
					
						
							|  |  |  |         packageType: 'jdk', | 
					
						
							|  |  |  |         checkLatest: false | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       null | 
					
						
							|  |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         version: '11', | 
					
						
							|  |  |  |         architecture: 'x86', | 
					
						
							|  |  |  |         packageType: 'jdk', | 
					
						
							|  |  |  |         checkLatest: false | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       null | 
					
						
							|  |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         version: '11', | 
					
						
							|  |  |  |         architecture: 'x86', | 
					
						
							|  |  |  |         packageType: 'jre', | 
					
						
							|  |  |  |         checkLatest: false | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       null | 
					
						
							|  |  |  |     ] | 
					
						
							| 
									
										
										
										
											2021-04-05 13:02:27 +03:00
										 |  |  |   ])(`should find java for path %s -> %s`, (input, expected) => { | 
					
						
							|  |  |  |     spyTcFindAllVersions.mockReturnValue([actualJavaVersion]); | 
					
						
							|  |  |  |     spyGetToolcachePath.mockImplementation( | 
					
						
							|  |  |  |       (toolname: string, javaVersion: string, architecture: string) => { | 
					
						
							|  |  |  |         const semverVersion = new semver.Range(javaVersion); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-09 14:49:35 +02:00
										 |  |  |         if ( | 
					
						
							|  |  |  |           path.basename(javaPath) !== architecture || | 
					
						
							|  |  |  |           !javaPath.includes(toolname) | 
					
						
							|  |  |  |         ) { | 
					
						
							| 
									
										
										
										
											2021-04-05 13:02:27 +03:00
										 |  |  |           return ''; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-09 14:49:35 +02:00
										 |  |  |         return semver.satisfies(actualJavaVersion, semverVersion) | 
					
						
							|  |  |  |           ? javaPath | 
					
						
							|  |  |  |           : ''; | 
					
						
							| 
									
										
										
										
											2021-04-05 13:02:27 +03:00
										 |  |  |       } | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |     mockJavaBase = new EmptyJavaBase(input); | 
					
						
							|  |  |  |     expect(mockJavaBase['findInToolcache']()).toEqual(expected); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   it.each([ | 
					
						
							| 
									
										
										
										
											2023-03-09 14:49:35 +02:00
										 |  |  |     ['11', {version: '11.0.3+2', versionInPath: '11.0.3-2'}], | 
					
						
							|  |  |  |     ['11.0', {version: '11.0.3+2', versionInPath: '11.0.3-2'}], | 
					
						
							|  |  |  |     ['11.0.1', {version: '11.0.1', versionInPath: '11.0.1'}], | 
					
						
							|  |  |  |     ['11.0.3', {version: '11.0.3+2', versionInPath: '11.0.3-2'}], | 
					
						
							|  |  |  |     ['15', {version: '15.0.2+4', versionInPath: '15.0.2-4'}], | 
					
						
							|  |  |  |     ['x', {version: '15.0.2+4', versionInPath: '15.0.2-4'}], | 
					
						
							|  |  |  |     ['x-ea', {version: '17.4.4', versionInPath: '17.4.4-ea'}], | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |       '11-ea', | 
					
						
							|  |  |  |       {version: '11.3.3+5.2.1231421', versionInPath: '11.3.3-ea.5.2.1231421'} | 
					
						
							|  |  |  |     ], | 
					
						
							|  |  |  |     ['11.2-ea', {version: '11.2.1', versionInPath: '11.2.1-ea'}], | 
					
						
							|  |  |  |     ['11.2.1-ea', {version: '11.2.1', versionInPath: '11.2.1-ea'}] | 
					
						
							|  |  |  |   ])( | 
					
						
							|  |  |  |     'should choose correct java from tool-cache for input %s', | 
					
						
							|  |  |  |     (input, expected) => { | 
					
						
							|  |  |  |       spyTcFindAllVersions.mockReturnValue([ | 
					
						
							|  |  |  |         '17.4.4-ea', | 
					
						
							|  |  |  |         '11.0.2', | 
					
						
							|  |  |  |         '15.0.2-4', | 
					
						
							|  |  |  |         '11.0.3-2', | 
					
						
							|  |  |  |         '11.2.1-ea', | 
					
						
							|  |  |  |         '11.3.2-ea', | 
					
						
							|  |  |  |         '11.3.2-ea.5', | 
					
						
							|  |  |  |         '11.3.3-ea.5.2.1231421', | 
					
						
							|  |  |  |         '12.3.2-0', | 
					
						
							|  |  |  |         '11.0.1' | 
					
						
							|  |  |  |       ]); | 
					
						
							|  |  |  |       spyGetToolcachePath.mockImplementation( | 
					
						
							|  |  |  |         (toolname: string, javaVersion: string, architecture: string) => | 
					
						
							|  |  |  |           `/hostedtoolcache/${toolname}/${javaVersion}/${architecture}` | 
					
						
							|  |  |  |       ); | 
					
						
							|  |  |  |       mockJavaBase = new EmptyJavaBase({ | 
					
						
							|  |  |  |         version: input, | 
					
						
							|  |  |  |         architecture: 'x64', | 
					
						
							|  |  |  |         packageType: 'jdk', | 
					
						
							|  |  |  |         checkLatest: false | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |       const foundVersion = mockJavaBase['findInToolcache'](); | 
					
						
							|  |  |  |       expect(foundVersion).toEqual({ | 
					
						
							|  |  |  |         version: expected.version, | 
					
						
							|  |  |  |         path: `/hostedtoolcache/Java_Empty_jdk/${expected.versionInPath}/x64` | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   ); | 
					
						
							| 
									
										
										
										
											2021-04-05 13:02:27 +03:00
										 |  |  | }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | describe('setupJava', () => { | 
					
						
							|  |  |  |   const actualJavaVersion = '11.0.9'; | 
					
						
							|  |  |  |   const installedJavaVersion = '11.0.8'; | 
					
						
							|  |  |  |   const javaPath = path.join('Java_Empty_jdk', installedJavaVersion, 'x86'); | 
					
						
							| 
									
										
										
										
											2023-03-09 14:49:35 +02:00
										 |  |  |   const javaPathInstalled = path.join( | 
					
						
							|  |  |  |     'toolcache', | 
					
						
							|  |  |  |     'Java_Empty_jdk', | 
					
						
							|  |  |  |     actualJavaVersion, | 
					
						
							|  |  |  |     'x86' | 
					
						
							|  |  |  |   ); | 
					
						
							| 
									
										
										
										
											2021-04-05 13:02:27 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |   let mockJavaBase: EmptyJavaBase; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   let spyGetToolcachePath: jest.SpyInstance; | 
					
						
							|  |  |  |   let spyTcFindAllVersions: jest.SpyInstance; | 
					
						
							|  |  |  |   let spyCoreDebug: jest.SpyInstance; | 
					
						
							|  |  |  |   let spyCoreInfo: jest.SpyInstance; | 
					
						
							|  |  |  |   let spyCoreExportVariable: jest.SpyInstance; | 
					
						
							|  |  |  |   let spyCoreAddPath: jest.SpyInstance; | 
					
						
							|  |  |  |   let spyCoreSetOutput: jest.SpyInstance; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   beforeEach(() => { | 
					
						
							|  |  |  |     spyGetToolcachePath = jest.spyOn(util, 'getToolcachePath'); | 
					
						
							|  |  |  |     spyGetToolcachePath.mockImplementation( | 
					
						
							|  |  |  |       (toolname: string, javaVersion: string, architecture: string) => { | 
					
						
							|  |  |  |         const semverVersion = new semver.Range(javaVersion); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-09 14:49:35 +02:00
										 |  |  |         if ( | 
					
						
							|  |  |  |           path.basename(javaPath) !== architecture || | 
					
						
							|  |  |  |           !javaPath.includes(toolname) | 
					
						
							|  |  |  |         ) { | 
					
						
							| 
									
										
										
										
											2021-04-05 13:02:27 +03:00
										 |  |  |           return ''; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-09 14:49:35 +02:00
										 |  |  |         return semver.satisfies(installedJavaVersion, semverVersion) | 
					
						
							|  |  |  |           ? javaPath | 
					
						
							|  |  |  |           : ''; | 
					
						
							| 
									
										
										
										
											2021-04-05 13:02:27 +03:00
										 |  |  |       } | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     spyTcFindAllVersions = jest.spyOn(tc, 'findAllVersions'); | 
					
						
							|  |  |  |     spyTcFindAllVersions.mockReturnValue([installedJavaVersion]); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Spy on core methods
 | 
					
						
							|  |  |  |     spyCoreDebug = jest.spyOn(core, 'debug'); | 
					
						
							|  |  |  |     spyCoreDebug.mockImplementation(() => undefined); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     spyCoreInfo = jest.spyOn(core, 'info'); | 
					
						
							|  |  |  |     spyCoreInfo.mockImplementation(() => undefined); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     spyCoreAddPath = jest.spyOn(core, 'addPath'); | 
					
						
							|  |  |  |     spyCoreAddPath.mockImplementation(() => undefined); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     spyCoreExportVariable = jest.spyOn(core, 'exportVariable'); | 
					
						
							|  |  |  |     spyCoreExportVariable.mockImplementation(() => undefined); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     spyCoreSetOutput = jest.spyOn(core, 'setOutput'); | 
					
						
							|  |  |  |     spyCoreSetOutput.mockImplementation(() => undefined); | 
					
						
							| 
									
										
										
										
											2022-10-10 17:47:17 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  |     jest.spyOn(os, 'arch').mockReturnValue('x86'); | 
					
						
							| 
									
										
										
										
											2021-04-05 13:02:27 +03:00
										 |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   afterEach(() => { | 
					
						
							|  |  |  |     jest.resetAllMocks(); | 
					
						
							|  |  |  |     jest.clearAllMocks(); | 
					
						
							|  |  |  |     jest.restoreAllMocks(); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   it.each([ | 
					
						
							|  |  |  |     [ | 
					
						
							| 
									
										
										
										
											2023-03-09 14:49:35 +02:00
										 |  |  |       { | 
					
						
							|  |  |  |         version: '11', | 
					
						
							|  |  |  |         architecture: 'x86', | 
					
						
							|  |  |  |         packageType: 'jdk', | 
					
						
							|  |  |  |         checkLatest: false | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       {version: installedJavaVersion, path: javaPath} | 
					
						
							| 
									
										
										
										
											2021-04-05 13:02:27 +03:00
										 |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							| 
									
										
										
										
											2023-03-09 14:49:35 +02:00
										 |  |  |       { | 
					
						
							|  |  |  |         version: '11.0', | 
					
						
							|  |  |  |         architecture: 'x86', | 
					
						
							|  |  |  |         packageType: 'jdk', | 
					
						
							|  |  |  |         checkLatest: false | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       {version: installedJavaVersion, path: javaPath} | 
					
						
							| 
									
										
										
										
											2021-04-05 13:02:27 +03:00
										 |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							| 
									
										
										
										
											2023-03-09 14:49:35 +02:00
										 |  |  |       { | 
					
						
							|  |  |  |         version: '11.0.8', | 
					
						
							|  |  |  |         architecture: 'x86', | 
					
						
							|  |  |  |         packageType: 'jdk', | 
					
						
							|  |  |  |         checkLatest: false | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       {version: installedJavaVersion, path: javaPath} | 
					
						
							| 
									
										
										
										
											2022-10-10 17:47:17 -06:00
										 |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							| 
									
										
										
										
											2023-03-09 14:49:35 +02:00
										 |  |  |       {version: '11', architecture: '', packageType: 'jdk', checkLatest: false}, | 
					
						
							|  |  |  |       {version: installedJavaVersion, path: javaPath} | 
					
						
							| 
									
										
										
										
											2021-04-05 13:02:27 +03:00
										 |  |  |     ] | 
					
						
							| 
									
										
										
										
											2023-03-09 14:49:35 +02:00
										 |  |  |   ])('should find java locally for %s', async (input, expected) => { | 
					
						
							| 
									
										
										
										
											2021-04-05 13:02:27 +03:00
										 |  |  |     mockJavaBase = new EmptyJavaBase(input); | 
					
						
							| 
									
										
										
										
											2023-03-09 14:49:35 +02:00
										 |  |  |     await expect(mockJavaBase.setupJava()).resolves.toEqual(expected); | 
					
						
							| 
									
										
										
										
											2021-04-05 13:02:27 +03:00
										 |  |  |     expect(spyGetToolcachePath).toHaveBeenCalled(); | 
					
						
							| 
									
										
										
										
											2023-03-09 14:49:35 +02:00
										 |  |  |     expect(spyCoreInfo).toHaveBeenCalledWith( | 
					
						
							|  |  |  |       `Resolved Java ${expected.version} from tool-cache` | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |     expect(spyCoreInfo).toHaveBeenCalledWith( | 
					
						
							|  |  |  |       `Setting Java ${expected.version} as the default` | 
					
						
							|  |  |  |     ); | 
					
						
							| 
									
										
										
										
											2021-04-05 13:02:27 +03:00
										 |  |  |     expect(spyCoreInfo).not.toHaveBeenCalledWith( | 
					
						
							|  |  |  |       'Trying to resolve the latest version from remote' | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |     expect(spyCoreInfo).not.toHaveBeenCalledWith('Trying to download...'); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   it.each([ | 
					
						
							|  |  |  |     [ | 
					
						
							| 
									
										
										
										
											2023-03-09 14:49:35 +02:00
										 |  |  |       { | 
					
						
							|  |  |  |         version: '11', | 
					
						
							|  |  |  |         architecture: 'x86', | 
					
						
							|  |  |  |         packageType: 'jre', | 
					
						
							|  |  |  |         checkLatest: false | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         path: path.join('toolcache', 'Java_Empty_jre', '11.0.9', 'x86'), | 
					
						
							|  |  |  |         version: '11.0.9' | 
					
						
							|  |  |  |       } | 
					
						
							| 
									
										
										
										
											2021-04-05 13:02:27 +03:00
										 |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							| 
									
										
										
										
											2023-03-09 14:49:35 +02:00
										 |  |  |       { | 
					
						
							|  |  |  |         version: '11', | 
					
						
							|  |  |  |         architecture: 'x64', | 
					
						
							|  |  |  |         packageType: 'jdk', | 
					
						
							|  |  |  |         checkLatest: false | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         path: path.join('toolcache', 'Java_Empty_jdk', '11.0.9', 'x64'), | 
					
						
							|  |  |  |         version: '11.0.9' | 
					
						
							|  |  |  |       } | 
					
						
							| 
									
										
										
										
											2021-04-05 13:02:27 +03:00
										 |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							| 
									
										
										
										
											2023-03-09 14:49:35 +02:00
										 |  |  |       { | 
					
						
							|  |  |  |         version: '11', | 
					
						
							|  |  |  |         architecture: 'x64', | 
					
						
							|  |  |  |         packageType: 'jre', | 
					
						
							|  |  |  |         checkLatest: false | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         path: path.join('toolcache', 'Java_Empty_jre', '11.0.9', 'x64'), | 
					
						
							|  |  |  |         version: '11.0.9' | 
					
						
							|  |  |  |       } | 
					
						
							| 
									
										
										
										
											2022-10-10 17:47:17 -06:00
										 |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							| 
									
										
										
										
											2023-03-09 14:49:35 +02:00
										 |  |  |       {version: '11', architecture: '', packageType: 'jre', checkLatest: false}, | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         path: path.join('toolcache', 'Java_Empty_jre', '11.0.9', 'x86'), | 
					
						
							|  |  |  |         version: '11.0.9' | 
					
						
							|  |  |  |       } | 
					
						
							| 
									
										
										
										
											2021-04-05 13:02:27 +03:00
										 |  |  |     ] | 
					
						
							|  |  |  |   ])('download java with configuration %s', async (input, expected) => { | 
					
						
							|  |  |  |     mockJavaBase = new EmptyJavaBase(input); | 
					
						
							|  |  |  |     await expect(mockJavaBase.setupJava()).resolves.toEqual(expected); | 
					
						
							|  |  |  |     expect(spyGetToolcachePath).toHaveBeenCalled(); | 
					
						
							|  |  |  |     expect(spyCoreAddPath).toHaveBeenCalled(); | 
					
						
							|  |  |  |     expect(spyCoreExportVariable).toHaveBeenCalled(); | 
					
						
							| 
									
										
										
										
											2022-09-08 15:26:54 +02:00
										 |  |  |     expect(spyCoreExportVariable).toHaveBeenCalledWith( | 
					
						
							| 
									
										
										
										
											2023-03-09 14:49:35 +02:00
										 |  |  |       `JAVA_HOME_${input.version}_${( | 
					
						
							|  |  |  |         input.architecture || 'x86' | 
					
						
							|  |  |  |       ).toLocaleUpperCase()}`,
 | 
					
						
							| 
									
										
										
										
											2022-09-08 15:26:54 +02:00
										 |  |  |       expected.path | 
					
						
							|  |  |  |     ); | 
					
						
							| 
									
										
										
										
											2021-04-05 13:02:27 +03:00
										 |  |  |     expect(spyCoreSetOutput).toHaveBeenCalled(); | 
					
						
							| 
									
										
										
										
											2023-03-09 14:49:35 +02:00
										 |  |  |     expect(spyCoreInfo).toHaveBeenCalledWith( | 
					
						
							|  |  |  |       'Trying to resolve the latest version from remote' | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |     expect(spyCoreInfo).toHaveBeenCalledWith( | 
					
						
							|  |  |  |       `Resolved latest version as ${expected.version}` | 
					
						
							|  |  |  |     ); | 
					
						
							| 
									
										
										
										
											2021-04-05 13:02:27 +03:00
										 |  |  |     expect(spyCoreInfo).toHaveBeenCalledWith('Trying to download...'); | 
					
						
							| 
									
										
										
										
											2023-03-09 14:49:35 +02:00
										 |  |  |     expect(spyCoreInfo).toHaveBeenCalledWith( | 
					
						
							|  |  |  |       `Java ${expected.version} was downloaded` | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |     expect(spyCoreInfo).toHaveBeenCalledWith( | 
					
						
							|  |  |  |       `Setting Java ${expected.version} as the default` | 
					
						
							|  |  |  |     ); | 
					
						
							| 
									
										
										
										
											2021-04-05 13:02:27 +03:00
										 |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   it.each([ | 
					
						
							|  |  |  |     [ | 
					
						
							| 
									
										
										
										
											2023-03-09 14:49:35 +02:00
										 |  |  |       { | 
					
						
							|  |  |  |         version: '11.0.9', | 
					
						
							|  |  |  |         architecture: 'x86', | 
					
						
							|  |  |  |         packageType: 'jdk', | 
					
						
							|  |  |  |         checkLatest: true | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       {version: '11.0.9', path: javaPathInstalled} | 
					
						
							| 
									
										
										
										
											2022-10-10 17:47:17 -06:00
										 |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							| 
									
										
										
										
											2023-03-09 14:49:35 +02:00
										 |  |  |       { | 
					
						
							|  |  |  |         version: '11.0.9', | 
					
						
							|  |  |  |         architecture: '', | 
					
						
							|  |  |  |         packageType: 'jdk', | 
					
						
							|  |  |  |         checkLatest: true | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       {version: '11.0.9', path: javaPathInstalled} | 
					
						
							| 
									
										
										
										
											2021-04-05 13:02:27 +03:00
										 |  |  |     ] | 
					
						
							| 
									
										
										
										
											2023-03-09 14:49:35 +02:00
										 |  |  |   ])( | 
					
						
							|  |  |  |     'should check the latest java version for %s and resolve locally', | 
					
						
							|  |  |  |     async (input, expected) => { | 
					
						
							|  |  |  |       mockJavaBase = new EmptyJavaBase(input); | 
					
						
							|  |  |  |       mockJavaBase['findInToolcache'] = () => ({ | 
					
						
							|  |  |  |         version: '11.0.9', | 
					
						
							|  |  |  |         path: expected.path | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |       await expect(mockJavaBase.setupJava()).resolves.toEqual(expected); | 
					
						
							|  |  |  |       expect(spyCoreInfo).toHaveBeenCalledWith( | 
					
						
							|  |  |  |         'Trying to resolve the latest version from remote' | 
					
						
							|  |  |  |       ); | 
					
						
							|  |  |  |       expect(spyCoreInfo).toHaveBeenCalledWith( | 
					
						
							|  |  |  |         `Resolved latest version as ${expected.version}` | 
					
						
							|  |  |  |       ); | 
					
						
							|  |  |  |       expect(spyCoreInfo).toHaveBeenCalledWith( | 
					
						
							|  |  |  |         `Resolved Java ${expected.version} from tool-cache` | 
					
						
							|  |  |  |       ); | 
					
						
							|  |  |  |       expect(spyCoreInfo).toHaveBeenCalledWith( | 
					
						
							|  |  |  |         `Setting Java ${expected.version} as the default` | 
					
						
							|  |  |  |       ); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   ); | 
					
						
							| 
									
										
										
										
											2021-04-05 13:02:27 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |   it.each([ | 
					
						
							|  |  |  |     [ | 
					
						
							| 
									
										
										
										
											2023-03-09 14:49:35 +02:00
										 |  |  |       { | 
					
						
							|  |  |  |         version: '11', | 
					
						
							|  |  |  |         architecture: 'x86', | 
					
						
							|  |  |  |         packageType: 'jdk', | 
					
						
							|  |  |  |         checkLatest: true | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       {version: actualJavaVersion, path: javaPathInstalled} | 
					
						
							| 
									
										
										
										
											2021-04-05 13:02:27 +03:00
										 |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							| 
									
										
										
										
											2023-03-09 14:49:35 +02:00
										 |  |  |       { | 
					
						
							|  |  |  |         version: '11.0', | 
					
						
							|  |  |  |         architecture: 'x86', | 
					
						
							|  |  |  |         packageType: 'jdk', | 
					
						
							|  |  |  |         checkLatest: true | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       {version: actualJavaVersion, path: javaPathInstalled} | 
					
						
							| 
									
										
										
										
											2021-04-05 13:02:27 +03:00
										 |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							| 
									
										
										
										
											2023-03-09 14:49:35 +02:00
										 |  |  |       { | 
					
						
							|  |  |  |         version: '11.0.x', | 
					
						
							|  |  |  |         architecture: 'x86', | 
					
						
							|  |  |  |         packageType: 'jdk', | 
					
						
							|  |  |  |         checkLatest: true | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       {version: actualJavaVersion, path: javaPathInstalled} | 
					
						
							| 
									
										
										
										
											2022-10-10 17:47:17 -06:00
										 |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							| 
									
										
										
										
											2023-03-09 14:49:35 +02:00
										 |  |  |       {version: '11', architecture: '', packageType: 'jdk', checkLatest: true}, | 
					
						
							|  |  |  |       {version: actualJavaVersion, path: javaPathInstalled} | 
					
						
							| 
									
										
										
										
											2021-04-05 13:02:27 +03:00
										 |  |  |     ] | 
					
						
							| 
									
										
										
										
											2023-03-09 14:49:35 +02:00
										 |  |  |   ])( | 
					
						
							|  |  |  |     'should check the latest java version for %s and download', | 
					
						
							|  |  |  |     async (input, expected) => { | 
					
						
							|  |  |  |       mockJavaBase = new EmptyJavaBase(input); | 
					
						
							|  |  |  |       await expect(mockJavaBase.setupJava()).resolves.toEqual(expected); | 
					
						
							|  |  |  |       expect(spyGetToolcachePath).toHaveBeenCalled(); | 
					
						
							|  |  |  |       expect(spyCoreInfo).toHaveBeenCalledWith( | 
					
						
							|  |  |  |         'Trying to resolve the latest version from remote' | 
					
						
							|  |  |  |       ); | 
					
						
							|  |  |  |       expect(spyCoreInfo).toHaveBeenCalledWith( | 
					
						
							|  |  |  |         `Resolved latest version as ${actualJavaVersion}` | 
					
						
							|  |  |  |       ); | 
					
						
							|  |  |  |       expect(spyCoreInfo).toHaveBeenCalledWith('Trying to download...'); | 
					
						
							|  |  |  |       expect(spyCoreInfo).toHaveBeenCalledWith( | 
					
						
							|  |  |  |         `Java ${actualJavaVersion} was downloaded` | 
					
						
							|  |  |  |       ); | 
					
						
							|  |  |  |       expect(spyCoreInfo).toHaveBeenCalledWith( | 
					
						
							|  |  |  |         `Setting Java ${expected.version} as the default` | 
					
						
							|  |  |  |       ); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   ); | 
					
						
							| 
									
										
										
										
											2021-04-05 13:02:27 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |   it.each([ | 
					
						
							| 
									
										
										
										
											2023-03-09 14:49:35 +02:00
										 |  |  |     [ | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         version: '15', | 
					
						
							|  |  |  |         architecture: 'x86', | 
					
						
							|  |  |  |         packageType: 'jre', | 
					
						
							|  |  |  |         checkLatest: false | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         version: '11.0.7', | 
					
						
							|  |  |  |         architecture: 'x64', | 
					
						
							|  |  |  |         packageType: 'jre', | 
					
						
							|  |  |  |         checkLatest: false | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     ] | 
					
						
							|  |  |  |   ])( | 
					
						
							|  |  |  |     'should throw an error for Available version not found for %s', | 
					
						
							|  |  |  |     async input => { | 
					
						
							|  |  |  |       mockJavaBase = new EmptyJavaBase(input); | 
					
						
							|  |  |  |       await expect(mockJavaBase.setupJava()).rejects.toThrow( | 
					
						
							|  |  |  |         'Available version not found' | 
					
						
							|  |  |  |       ); | 
					
						
							|  |  |  |       expect(spyTcFindAllVersions).toHaveBeenCalled(); | 
					
						
							|  |  |  |       expect(spyCoreAddPath).not.toHaveBeenCalled(); | 
					
						
							|  |  |  |       expect(spyCoreExportVariable).not.toHaveBeenCalled(); | 
					
						
							|  |  |  |       expect(spyCoreSetOutput).not.toHaveBeenCalled(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   ); | 
					
						
							| 
									
										
										
										
											2021-04-05 13:02:27 +03:00
										 |  |  | }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | describe('normalizeVersion', () => { | 
					
						
							|  |  |  |   const DummyJavaBase = JavaBase as any; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   it.each([ | 
					
						
							| 
									
										
										
										
											2023-03-09 14:49:35 +02:00
										 |  |  |     ['11', {version: '11', stable: true}], | 
					
						
							|  |  |  |     ['11.0', {version: '11.0', stable: true}], | 
					
						
							|  |  |  |     ['11.0.10', {version: '11.0.10', stable: true}], | 
					
						
							|  |  |  |     ['11-ea', {version: '11', stable: false}], | 
					
						
							|  |  |  |     ['11.0.2-ea', {version: '11.0.2', stable: false}] | 
					
						
							| 
									
										
										
										
											2021-04-05 13:02:27 +03:00
										 |  |  |   ])('normalizeVersion from %s to %s', (input, expected) => { | 
					
						
							| 
									
										
										
										
											2023-03-09 14:49:35 +02:00
										 |  |  |     expect(DummyJavaBase.prototype.normalizeVersion.call(null, input)).toEqual( | 
					
						
							|  |  |  |       expected | 
					
						
							|  |  |  |     ); | 
					
						
							| 
									
										
										
										
											2021-04-05 13:02:27 +03:00
										 |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   it('normalizeVersion should throw an error for non semver', () => { | 
					
						
							|  |  |  |     const version = '11g'; | 
					
						
							| 
									
										
										
										
											2023-03-09 14:49:35 +02:00
										 |  |  |     expect( | 
					
						
							|  |  |  |       DummyJavaBase.prototype.normalizeVersion.bind(null, version) | 
					
						
							|  |  |  |     ).toThrow( | 
					
						
							| 
									
										
										
										
											2021-04-05 13:02:27 +03:00
										 |  |  |       `The string '${version}' is not valid SemVer notation for a Java version. Please check README file for code snippets and more detailed information` | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | describe('getToolcacheVersionName', () => { | 
					
						
							|  |  |  |   const DummyJavaBase = JavaBase as any; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   it.each([ | 
					
						
							| 
									
										
										
										
											2023-03-09 14:49:35 +02:00
										 |  |  |     [{version: '11', stable: true}, '11'], | 
					
						
							|  |  |  |     [{version: '11.0.2', stable: true}, '11.0.2'], | 
					
						
							|  |  |  |     [{version: '11.0.2+4', stable: true}, '11.0.2-4'], | 
					
						
							|  |  |  |     [{version: '11.0.2+4.1.2563234', stable: true}, '11.0.2-4.1.2563234'], | 
					
						
							|  |  |  |     [{version: '11.0', stable: false}, '11.0-ea'], | 
					
						
							|  |  |  |     [{version: '11.0.3', stable: false}, '11.0.3-ea'], | 
					
						
							|  |  |  |     [{version: '11.0.3+4', stable: false}, '11.0.3-ea.4'], | 
					
						
							|  |  |  |     [{version: '11.0.3+4.2.256', stable: false}, '11.0.3-ea.4.2.256'] | 
					
						
							| 
									
										
										
										
											2021-04-05 13:02:27 +03:00
										 |  |  |   ])('returns correct version name for %s', (input, expected) => { | 
					
						
							|  |  |  |     const inputVersion = input.stable ? '11' : '11-ea'; | 
					
						
							|  |  |  |     const mockJavaBase = new EmptyJavaBase({ | 
					
						
							|  |  |  |       version: inputVersion, | 
					
						
							|  |  |  |       packageType: 'jdk', | 
					
						
							|  |  |  |       architecture: 'x64', | 
					
						
							|  |  |  |       checkLatest: false | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |     const actual = mockJavaBase['getToolcacheVersionName'](input.version); | 
					
						
							|  |  |  |     expect(actual).toBe(expected); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | }); |