Add EIGHTEEN to JavaVersion

Closes gh-29524
pull/30505/head
Andy Wilkinson 3 years ago
parent 20d21d4e58
commit 314acd3407

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2021 the original author or authors. * Copyright 2012-2022 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -18,6 +18,7 @@ package org.springframework.boot.system;
import java.io.Console; import java.io.Console;
import java.lang.invoke.MethodHandles; import java.lang.invoke.MethodHandles;
import java.time.Duration;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
@ -83,7 +84,12 @@ public enum JavaVersion {
/** /**
* Java 17. * Java 17.
*/ */
SEVENTEEN("17", Console.class, "charset"); SEVENTEEN("17", Console.class, "charset"),
/**
* Java 18.
*/
EIGHTEEN("18", Duration.class, "isPositive");
private final String name; private final String name;

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2021 the original author or authors. * Copyright 2012-2022 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -16,9 +16,13 @@
package org.springframework.boot.system; package org.springframework.boot.system;
import java.lang.reflect.Method;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.api.condition.EnabledOnJre; import org.junit.jupiter.api.condition.EnabledOnJre;
import org.junit.jupiter.api.condition.JRE; import org.junit.jupiter.api.condition.JRE;
import org.junit.platform.commons.util.ReflectionUtils;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
@ -139,4 +143,25 @@ class JavaVersionTests {
assertThat(JavaVersion.getJavaVersion()).isEqualTo(JavaVersion.SEVENTEEN); assertThat(JavaVersion.getJavaVersion()).isEqualTo(JavaVersion.SEVENTEEN);
} }
@Test
@EnabledIf(value = "isJava18")
void currentJavaVersionEighteen() {
assertThat(JavaVersion.getJavaVersion()).isEqualTo(JavaVersion.EIGHTEEN);
}
boolean isJava18() throws Exception {
// Same detection mechanism as org.junit.jupiter.api.condition.JRE
// which does not have a JAVA_18 constant in JUnit 5.7.x
try {
Method versionMethod = Runtime.class.getMethod("version");
Object version = ReflectionUtils.invokeMethod(versionMethod, null);
Method majorMethod = version.getClass().getMethod("major");
int major = (int) ReflectionUtils.invokeMethod(majorMethod, version);
return major == 18;
}
catch (Exception ex) {
return false;
}
}
} }

Loading…
Cancel
Save