1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.enforcer.rules.version;
20
21 import java.util.stream.Stream;
22
23 import org.apache.commons.lang3.SystemUtils;
24 import org.apache.maven.enforcer.rule.api.EnforcerLogger;
25 import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
26 import org.junit.jupiter.api.BeforeEach;
27 import org.junit.jupiter.api.Test;
28 import org.junit.jupiter.params.ParameterizedTest;
29 import org.junit.jupiter.params.provider.Arguments;
30 import org.junit.jupiter.params.provider.MethodSource;
31
32 import static org.assertj.core.api.Assertions.assertThat;
33 import static org.assertj.core.api.Assertions.assertThatThrownBy;
34 import static org.mockito.Mockito.mock;
35
36
37
38
39
40
41 class TestRequireJavaVersion {
42
43 private RequireJavaVersion rule;
44
45 @BeforeEach
46 void setup() {
47 rule = new RequireJavaVersion();
48 rule.setLog(mock(EnforcerLogger.class));
49 }
50
51
52
53 @Test
54 void testFixJDKVersion() {
55
56
57 assertThat(RequireJavaVersion.normalizeJDKVersion("1.5.0_11")).isEqualTo("1.5.0-11");
58 assertThat(RequireJavaVersion.normalizeJDKVersion("1.5.1")).isEqualTo("1.5.1");
59 assertThat(RequireJavaVersion.normalizeJDKVersion("1.5.2-1.b11")).isEqualTo("1.5.2-1");
60 assertThat(RequireJavaVersion.normalizeJDKVersion("1.5.3_11")).isEqualTo("1.5.3-11");
61 assertThat(RequireJavaVersion.normalizeJDKVersion("1.5.4.5_11")).isEqualTo("1.5.4-5");
62 assertThat(RequireJavaVersion.normalizeJDKVersion("1.5.5.6_11.2")).isEqualTo("1.5.5-6");
63
64
65 assertThat(RequireJavaVersion.normalizeJDKVersion("1-5-0-11")).isEqualTo("1.5.0-11");
66 assertThat(RequireJavaVersion.normalizeJDKVersion("1-_5-_0-_11")).isEqualTo("1.5.0-11");
67 assertThat(RequireJavaVersion.normalizeJDKVersion("1_5_0_11")).isEqualTo("1.5.0-11");
68 assertThat(RequireJavaVersion.normalizeJDKVersion("1.5.0-07")).isEqualTo("1.5.0-7");
69 assertThat(RequireJavaVersion.normalizeJDKVersion("1.5.0-b7")).isEqualTo("1.5.0-7");
70 assertThat(RequireJavaVersion.normalizeJDKVersion("1.5.0-;7")).isEqualTo("1.5.0-7");
71 assertThat(RequireJavaVersion.normalizeJDKVersion("1.6.0-dp")).isEqualTo("1.6.0");
72 assertThat(RequireJavaVersion.normalizeJDKVersion("1.6.0-dp2")).isEqualTo("1.6.0-2");
73 assertThat(RequireJavaVersion.normalizeJDKVersion("1.8.0_73")).isEqualTo("1.8.0-73");
74 assertThat(RequireJavaVersion.normalizeJDKVersion("9")).isEqualTo("9");
75
76 assertThat(RequireJavaVersion.normalizeJDKVersion("17")).isEqualTo("17");
77 }
78
79
80
81
82
83
84 @Test
85 void settingsTheJavaVersionAsNormalizedVersionShouldNotFail() throws EnforcerRuleException {
86 String normalizedJDKVersion = RequireJavaVersion.normalizeJDKVersion(SystemUtils.JAVA_VERSION);
87
88 rule.setVersion(normalizedJDKVersion);
89
90
91 rule.execute();
92
93 }
94
95 @Test
96 void excludingTheCurrentJavaVersionViaRangeThisShouldFailWithException() {
97 String thisVersion = RequireJavaVersion.normalizeJDKVersion(SystemUtils.JAVA_VERSION);
98 String requiredVersion = "(" + thisVersion;
99 rule.setVersion(requiredVersion);
100
101 assertThatThrownBy(() -> rule.execute())
102 .isInstanceOf(EnforcerRuleException.class)
103 .hasMessage("The requested JDK version %s is invalid.", requiredVersion);
104 }
105
106 @Test
107 void shouldIncludeJavaHomeLocationInTheErrorMessage() {
108 String thisVersion = RequireJavaVersion.normalizeJDKVersion(SystemUtils.JAVA_VERSION);
109 String requiredVersion = "10000";
110 rule.setVersion(requiredVersion);
111
112 assertThatThrownBy(() -> rule.execute())
113 .isInstanceOf(EnforcerRuleException.class)
114 .hasMessage(
115 "Detected JDK version %s (JAVA_HOME=%s) is not in the allowed range %s.",
116 thisVersion, SystemUtils.JAVA_HOME, "[" + requiredVersion + ",)");
117 }
118
119 @Test
120 void shouldUseCustomErrorMessage() {
121 String requiredVersion = "10000";
122 String message = "My custom error message";
123 rule.setVersion(requiredVersion);
124 rule.setMessage(message);
125
126 assertThatThrownBy(() -> rule.execute())
127 .isInstanceOf(EnforcerRuleException.class)
128 .hasMessage(message);
129 }
130
131
132
133
134 @Test
135 void testId() {
136 assertThat(rule.getCacheId()).isEqualTo("0");
137 }
138
139 static Stream<Arguments> fixJava8ShortVersion() {
140 return Stream.of(
141 Arguments.of("1.8", "1.8"),
142 Arguments.of("8", "1.8"),
143 Arguments.of(".8", ".8"),
144 Arguments.of("8.", "8."),
145 Arguments.of("8,)", "1.8,)"),
146 Arguments.of("[8,)", "[1.8,)"),
147 Arguments.of("(1.7,8]", "(1.7,1.8]"),
148 Arguments.of("[1.8,)", "[1.8,)"),
149 Arguments.of("(1.8,8]", "(1.8,1.8]"),
150 Arguments.of("(8,8]", "(1.8,1.8]"),
151 Arguments.of("(8,)", "(1.8,)"),
152 Arguments.of("[8]", "[1.8]"),
153 Arguments.of("(9,11],[8]", "(9,11],[1.8]"),
154 Arguments.of("(11.0.18", "(11.0.18"),
155 Arguments.of("(15.1.8", "(15.1.8"),
156 Arguments.of("(15.1.2", "(15.1.2"),
157 Arguments.of("18", "18"),
158 Arguments.of("18.", "18."),
159 Arguments.of(".18", ".18"),
160 Arguments.of("38", "38"));
161 }
162
163 @ParameterizedTest
164 @MethodSource
165 void fixJava8ShortVersion(String input, String expected) {
166 rule.setVersion(input);
167 assertThat(rule.getVersion()).isEqualTo(expected);
168 }
169 }