@@ -31,6 +31,7 @@ interface IChildProcessResults {
3131 npmV : IChildProcessResultDescription ;
3232 nodeV : IChildProcessResultDescription ;
3333 javacVersion : IChildProcessResultDescription ;
34+ javaVersion : IChildProcessResultDescription ;
3435 nodeGypVersion : IChildProcessResultDescription ;
3536 xCodeVersion : IChildProcessResultDescription ;
3637 adbVersion : IChildProcessResultDescription ;
@@ -82,8 +83,11 @@ function createChildProcessResults(childProcessResult: IChildProcessResults): ID
8283 "npm -v" : childProcessResult . npmV ,
8384 "node -v" : childProcessResult . nodeV ,
8485 '"javac" -version' : childProcessResult . javacVersion ,
86+ '"java" -version' : childProcessResult . javaVersion ,
8587 'which javac' : { result : '' } ,
8688 'where javac' : { result : '' } ,
89+ 'which java' : { result : '' } ,
90+ 'where java' : { result : '' } ,
8791 "node-gyp -v" : childProcessResult . nodeGypVersion ,
8892 "xcodebuild -version" : childProcessResult . xCodeVersion ,
8993 "pod --version" : childProcessResult . podVersion ,
@@ -246,6 +250,38 @@ describe("SysInfo unit tests", () => {
246250 process . env [ JavaHomeName ] = originalJavaHome ;
247251 assert . deepEqual ( execCommands , [ 'where javac' , '"javac" -version' ] ) ;
248252 } ) ;
253+
254+ it ( "java version when there is JAVA_HOME." , async ( ) => {
255+ const originalJavaHome = process . env [ JavaHomeName ] ;
256+ process . env [ JavaHomeName ] = "mock" ;
257+
258+ const pathToJava = path . join ( process . env [ JavaHomeName ] , "bin" , "java" ) ;
259+ fileSystem . exists = ( ) => true ;
260+ await sysInfo . getJavaVersion ( ) ;
261+
262+ process . env [ JavaHomeName ] = originalJavaHome ;
263+ assert . deepEqual ( execCommands [ 0 ] , `"${ pathToJava } " -version` ) ;
264+ } ) ;
265+
266+ it ( "java version when there is no JAVA_HOME on non-Windows OS" , async ( ) => {
267+ const originalJavaHome = process . env [ JavaHomeName ] ;
268+
269+ delete process . env [ JavaHomeName ] ;
270+ await sysInfo . getJavaVersion ( ) ;
271+
272+ process . env [ JavaHomeName ] = originalJavaHome ;
273+ assert . deepEqual ( execCommands , [ 'which java' , '"java" -version' ] ) ;
274+ } ) ;
275+
276+ it ( "java version when there is no JAVA_HOME on Window OS" , async ( ) => {
277+ const originalJavaHome = process . env [ JavaHomeName ] ;
278+ hostInfo . isWindows = true ;
279+ delete process . env [ JavaHomeName ] ;
280+ await sysInfo . getJavaVersion ( ) ;
281+
282+ process . env [ JavaHomeName ] = originalJavaHome ;
283+ assert . deepEqual ( execCommands , [ 'where java' , '"java" -version' ] ) ;
284+ } ) ;
249285 } ) ;
250286
251287 describe ( "getSysInfo" , ( ) => {
@@ -259,6 +295,11 @@ describe("SysInfo unit tests", () => {
259295 npmV : { result : setStdOut ( "2.14.1" ) } ,
260296 nodeV : { result : setStdOut ( "v6.0.0" ) } ,
261297 javacVersion : { result : setStdErr ( "javac 1.8.0_60" ) } ,
298+ javaVersion : {
299+ result : setStdErr ( `java version "1.8.0_202"
300+ Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
301+ Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)` )
302+ } ,
262303 nodeGypVersion : { result : setStdOut ( "2.0.0" ) } ,
263304 xCodeVersion : { result : setStdOut ( "Xcode 6.4.0" ) } ,
264305 adbVersion : { result : setStdOut ( "Android Debug Bridge version 1.0.32" ) } ,
@@ -286,6 +327,7 @@ describe("SysInfo unit tests", () => {
286327 assert . deepEqual ( result . npmVer , childProcessResult . npmV . result . stdout ) ;
287328 assert . deepEqual ( result . nodeVer , "6.0.0" ) ;
288329 assert . deepEqual ( result . javacVersion , "1.8.0_60" ) ;
330+ assert . deepEqual ( result . javaVersion , "1.8.0_202" ) ;
289331 assert . deepEqual ( result . nodeGypVer , childProcessResult . nodeGypVersion . result . stdout ) ;
290332 assert . deepEqual ( result . adbVer , "1.0.32" ) ;
291333 assert . deepEqual ( result . androidInstalled , true ) ;
@@ -477,6 +519,7 @@ ${expectedCliVersion}`;
477519 npmV : { shouldThrowError : true } ,
478520 nodeV : { shouldThrowError : true } ,
479521 javacVersion : { shouldThrowError : true } ,
522+ javaVersion : { shouldThrowError : true } ,
480523 nodeGypVersion : { shouldThrowError : true } ,
481524 xCodeVersion : { shouldThrowError : true } ,
482525 adbVersion : { shouldThrowError : true } ,
@@ -594,5 +637,31 @@ ${expectedCliVersion}`;
594637 assertiOSSysInfo ( result ) ;
595638 } ) ;
596639 } ) ;
640+
641+ describe ( "getJavaVersion" , ( ) => {
642+ it ( "parses correctly OpenJDK output" , async ( ) => {
643+ childProcessResult . javaVersion = {
644+ result : setStdOut ( `openjdk version "1.8.0_64"
645+ OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_64-b08)
646+ OpenJDK 64-Bit Server VM (build 25.202-b08, mixed mode)` )
647+ } ;
648+
649+ sysInfo = mockSysInfo ( childProcessResult , { isWindows : false , isDarwin : true , dotNetVersion } ) ;
650+ const result = await sysInfo . getJavaVersion ( ) ;
651+ assert . equal ( result , "1.8.0_64" ) ;
652+ } ) ;
653+
654+ it ( "parses correctly OpenJDK output" , async ( ) => {
655+ childProcessResult . javaVersion = {
656+ result : setStdOut ( `java version "1.8.0_25"
657+ Java(TM) SE Runtime Environment (build 1.8.0_25-b08)
658+ Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)` )
659+ } ;
660+
661+ sysInfo = mockSysInfo ( childProcessResult , { isWindows : false , isDarwin : true , dotNetVersion } ) ;
662+ const result = await sysInfo . getJavaVersion ( ) ;
663+ assert . equal ( result , "1.8.0_25" ) ;
664+ } ) ;
665+ } ) ;
597666 } ) ;
598667} ) ;
0 commit comments