package org.mockito.internal.util;
import java.util.HashMap;
import java.util.Map;
import org.junit.Test;
import static org.assertj.core.api.Assertions.assertThat;
// Possible description on a IBM J9 VM (see #801)
//
// java.specification.version = 1.8
// java.vm.vendor = IBM Corporation
// java.vm.version = 2.8
// java.vm.name = IBM J9 VM
// java.runtime.version = pwa6480sr1fp10-20150711_01 (SR1 FP10)
// java.vm.info =
// JRE 1.8.0 Windows 7 amd64-64 Compressed References 20150630_255633 (JIT enabled, AOT enabled)
// J9VM - R28_jvm.28_20150630_1742_B255633
// JIT - tr.r14.java_20150625_95081.01
// GC - R28_jvm.28_20150630_1742_B255633_CMPRSS
// J9CL - 20150630_255633
// os.name = Windows 7
// os.version = 6.1
public class PlatformTest {
// TODO use ClassLoaders
@Test
public void const_are_initialized_from_system_properties() {
System.out.println(Platform.describe());
assertThat(Platform.JVM_VERSION).isEqualTo(System.getProperty("java.runtime.version"));
assertThat(Platform.JVM_INFO).isEqualTo(System.getProperty("java.vm.info"));
assertThat(Platform.JVM_NAME).isEqualTo(System.getProperty("java.vm.name"));
assertThat(Platform.JVM_VENDOR).isEqualTo(System.getProperty("java.vm.vendor"));
assertThat(Platform.JVM_VENDOR_VERSION).isEqualTo(System.getProperty("java.vm.version"));
}
@Test
public void should_warn_for_jvm() throws Exception {
assertThat(Platform.warnForVM("Java HotSpot(TM) 64-Bit Server VM",
"HotSpot", "hotspot warning",
"IBM", "ibm warning"))
.isEqualTo("hotspot warning");
assertThat(Platform.warnForVM("IBM J9 VM",
"HotSpot", "hotspot warning",
"IBM", "ibm warning"))
.isEqualTo("ibm warning");
assertThat(Platform.warnForVM("whatever",
null, "should not be returned",
null, "should not be returned"))
.isEqualTo("");
}
@Test
public void should_parse_open_jdk_string_and_report_wether_below_or_nut_update_45() {
// Given
// Sources :
// - http://www.oracle.com/technetwork/java/javase/versioning-naming-139433.html
// - http://www.oracle.com/technetwork/java/javase/jdk7-naming-418744.html
// - http://www.oracle.com/technetwork/java/javase/jdk8-naming-2157130.html
// - http://stackoverflow.com/questions/35844985/how-do-we-get-sr-and-fp-of-ibm-jre-using-java
// - http://www.ibm.com/support/knowledgecenter/SSYKE2_6.0.0/com.ibm.java.doc.user.win32.60/user/java_version_check.html
Map<String, Boolean> versions = new HashMap<String, Boolean>() {{
put("1.8.0_92-b14", false);
put("1.8.0-b24", true);
put("1.8.0_5", true);
put("1.8.0b5_u44", true);
put("1.8.0b5_u92", false);
put("1.7.0_4", false);
put("1.4.0_03-b04", false);
put("1.4.0_03-ea-b01", false);
put("pxi3270_27sr4-20160303_03 (SR4)", false);
put("pwi3260sr11-20120412_01 (SR11)", false);
put("pwa6480sr1fp10-20150711_01 (SR1 FP10)", false);
put("null", false);
}};
assertPlatformParsesCorrectlyVariousVersionScheme(versions);
}
@Test
public void should_parse_open_jdk9_string() {
// The tested method targets Java 8 but should be able to parse other Java version numbers including Java 9
// Given
// Sources :
// - http://openjdk.java.net/jeps/223 (Java 9)
//
// System Property Existing Proposed
// ------------------------------- ------------ --------
// Early Access
// java.runtime.version 1.9.0-ea-b73 9-ea+73
// java.vm.version 1.9.0-ea-b73 9-ea+73
// java.specification.version 1.9 9
// java.vm.specification.version 1.9 9
//
// Major (GA)
// java.version 1.9.0 9
// java.runtime.version 1.9.0-b100 9+100
// java.vm.version 1.9.0-b100 9+100
// java.specification.version 1.9 9
// java.vm.specification.version 1.9 9
//
// Minor #1 (GA)
// java.version 1.9.0_20 9.1.2
// java.runtime.version 1.9.0_20-b62 9.1.2+62
// java.vm.version 1.9.0_20-b62 9.1.2+62
// java.specification.version 1.9 9
// java.vm.specification.version 1.9 9
//
// Security #1 (GA)
// java.version 1.9.0_5 9.0.1
// java.runtime.version 1.9.0_5-b20 9.0.1+20
// java.vm.version 1.9.0_5-b20 9.0.1+20
// java.specification.version 1.9 9
// java.vm.specification.version 1.9 9
//
Map<String, Boolean> versions = new HashMap<String, Boolean>() {{
put("9-ea+73", false);
put("9+100", false);
put("9.1.2+62", false);
put("9.0.1+20", false);
}};
assertPlatformParsesCorrectlyVariousVersionScheme(versions);
}
private void assertPlatformParsesCorrectlyVariousVersionScheme(Map<String, Boolean> versions) {
for (Map.Entry<String, Boolean> version : versions.entrySet()) {
assertThat(Platform.isJava8BelowUpdate45(version.getKey())).describedAs(version.getKey())
.isEqualTo(version.getValue());
}
}
}