JdkSourceLevelSupportTest.java
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.maven.impl;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
class JdkSourceLevelSupportTest {
@Test
void minimumSupportedSourceLevelJdk8AndEarlier() {
assertEquals(1, JdkSourceLevelSupport.minimumSupportedSourceLevel(7));
assertEquals(1, JdkSourceLevelSupport.minimumSupportedSourceLevel(8));
}
@Test
void minimumSupportedSourceLevelJdk9To11() {
assertEquals(6, JdkSourceLevelSupport.minimumSupportedSourceLevel(9));
assertEquals(6, JdkSourceLevelSupport.minimumSupportedSourceLevel(10));
assertEquals(6, JdkSourceLevelSupport.minimumSupportedSourceLevel(11));
}
@Test
void minimumSupportedSourceLevelJdk12To20() {
assertEquals(7, JdkSourceLevelSupport.minimumSupportedSourceLevel(12));
assertEquals(7, JdkSourceLevelSupport.minimumSupportedSourceLevel(15));
assertEquals(7, JdkSourceLevelSupport.minimumSupportedSourceLevel(17));
assertEquals(7, JdkSourceLevelSupport.minimumSupportedSourceLevel(20));
}
@Test
void minimumSupportedSourceLevelJdk21AndLater() {
assertEquals(8, JdkSourceLevelSupport.minimumSupportedSourceLevel(21));
assertEquals(8, JdkSourceLevelSupport.minimumSupportedSourceLevel(22));
assertEquals(8, JdkSourceLevelSupport.minimumSupportedSourceLevel(25));
}
@Test
void supportsSourceLevelJdk8() {
assertTrue(JdkSourceLevelSupport.supportsSourceLevel(8, 1));
assertTrue(JdkSourceLevelSupport.supportsSourceLevel(8, 5));
assertTrue(JdkSourceLevelSupport.supportsSourceLevel(8, 6));
assertTrue(JdkSourceLevelSupport.supportsSourceLevel(8, 8));
assertFalse(JdkSourceLevelSupport.supportsSourceLevel(8, 9));
}
@Test
void supportsSourceLevelJdk11() {
assertFalse(JdkSourceLevelSupport.supportsSourceLevel(11, 5));
assertTrue(JdkSourceLevelSupport.supportsSourceLevel(11, 6));
assertTrue(JdkSourceLevelSupport.supportsSourceLevel(11, 8));
assertTrue(JdkSourceLevelSupport.supportsSourceLevel(11, 11));
assertFalse(JdkSourceLevelSupport.supportsSourceLevel(11, 12));
}
@Test
void supportsSourceLevelJdk17() {
assertFalse(JdkSourceLevelSupport.supportsSourceLevel(17, 5));
assertFalse(JdkSourceLevelSupport.supportsSourceLevel(17, 6));
assertTrue(JdkSourceLevelSupport.supportsSourceLevel(17, 7));
assertTrue(JdkSourceLevelSupport.supportsSourceLevel(17, 8));
assertTrue(JdkSourceLevelSupport.supportsSourceLevel(17, 11));
assertTrue(JdkSourceLevelSupport.supportsSourceLevel(17, 17));
assertFalse(JdkSourceLevelSupport.supportsSourceLevel(17, 18));
}
@Test
void supportsSourceLevelJdk21() {
assertFalse(JdkSourceLevelSupport.supportsSourceLevel(21, 6));
assertFalse(JdkSourceLevelSupport.supportsSourceLevel(21, 7));
assertTrue(JdkSourceLevelSupport.supportsSourceLevel(21, 8));
assertTrue(JdkSourceLevelSupport.supportsSourceLevel(21, 11));
assertTrue(JdkSourceLevelSupport.supportsSourceLevel(21, 17));
assertTrue(JdkSourceLevelSupport.supportsSourceLevel(21, 21));
assertFalse(JdkSourceLevelSupport.supportsSourceLevel(21, 22));
}
@Test
void normalizeSourceLevelLegacyFormat() {
assertEquals(5, JdkSourceLevelSupport.normalizeSourceLevel("1.5"));
assertEquals(6, JdkSourceLevelSupport.normalizeSourceLevel("1.6"));
assertEquals(7, JdkSourceLevelSupport.normalizeSourceLevel("1.7"));
assertEquals(8, JdkSourceLevelSupport.normalizeSourceLevel("1.8"));
}
@Test
void normalizeSourceLevelModernFormat() {
assertEquals(5, JdkSourceLevelSupport.normalizeSourceLevel("5"));
assertEquals(6, JdkSourceLevelSupport.normalizeSourceLevel("6"));
assertEquals(8, JdkSourceLevelSupport.normalizeSourceLevel("8"));
assertEquals(9, JdkSourceLevelSupport.normalizeSourceLevel("9"));
assertEquals(11, JdkSourceLevelSupport.normalizeSourceLevel("11"));
assertEquals(17, JdkSourceLevelSupport.normalizeSourceLevel("17"));
assertEquals(21, JdkSourceLevelSupport.normalizeSourceLevel("21"));
}
@Test
void normalizeSourceLevelDottedVersion() {
assertEquals(21, JdkSourceLevelSupport.normalizeSourceLevel("21.0.1"));
assertEquals(17, JdkSourceLevelSupport.normalizeSourceLevel("17.0.2"));
assertEquals(11, JdkSourceLevelSupport.normalizeSourceLevel("11.0.3"));
}
@Test
void normalizeSourceLevelInvalid() {
assertEquals(-1, JdkSourceLevelSupport.normalizeSourceLevel(null));
assertEquals(-1, JdkSourceLevelSupport.normalizeSourceLevel(""));
assertEquals(-1, JdkSourceLevelSupport.normalizeSourceLevel("abc"));
assertEquals(-1, JdkSourceLevelSupport.normalizeSourceLevel("${java.version}"));
}
@Test
void normalizeSourceLevelWithWhitespace() {
assertEquals(11, JdkSourceLevelSupport.normalizeSourceLevel(" 11 "));
assertEquals(8, JdkSourceLevelSupport.normalizeSourceLevel(" 1.8 "));
}
@Test
void normalizeSourceLevelLegacyFormatWithPatchVersion() {
// "1.8.0_392" format from some JDK distributions
assertEquals(8, JdkSourceLevelSupport.normalizeSourceLevel("1.8.0_392"));
assertEquals(7, JdkSourceLevelSupport.normalizeSourceLevel("1.7.0_80"));
assertEquals(6, JdkSourceLevelSupport.normalizeSourceLevel("1.6.0_45"));
}
@Test
void latestJdkForSourceLevelRetiredLevels() {
// source 1-5 ��� last supported by JDK 8
assertEquals(8, JdkSourceLevelSupport.latestJdkForSourceLevel(1));
assertEquals(8, JdkSourceLevelSupport.latestJdkForSourceLevel(3));
assertEquals(8, JdkSourceLevelSupport.latestJdkForSourceLevel(5));
}
@Test
void latestJdkForSourceLevel6() {
// source 6 ��� last supported by JDK 11
assertEquals(11, JdkSourceLevelSupport.latestJdkForSourceLevel(6));
}
@Test
void latestJdkForSourceLevel7() {
// source 7 ��� last supported by JDK 20
assertEquals(20, JdkSourceLevelSupport.latestJdkForSourceLevel(7));
}
@Test
void latestJdkForSourceLevelStillSupported() {
// source 8+ ��� still supported by current JDKs
assertEquals(-1, JdkSourceLevelSupport.latestJdkForSourceLevel(8));
assertEquals(-1, JdkSourceLevelSupport.latestJdkForSourceLevel(11));
assertEquals(-1, JdkSourceLevelSupport.latestJdkForSourceLevel(17));
assertEquals(-1, JdkSourceLevelSupport.latestJdkForSourceLevel(21));
}
@Test
void getRunningJdkMajorReturnsPositive() {
assertTrue(JdkSourceLevelSupport.getRunningJdkMajor() > 0);
}
}