Skip to content

Commit b93a57c

Browse files
Better testing of DottedVersion: verify exception error messages
1 parent bb24d5f commit b93a57c

File tree

2 files changed

+73
-25
lines changed

2 files changed

+73
-25
lines changed

src/jdk.jpackage/share/classes/jdk/jpackage/internal/DottedVersion.java

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,7 @@ private DottedVersion(String version, boolean greedy) {
5757
if (!greedy) {
5858
return null;
5959
} else {
60-
throw new IllegalArgumentException(MessageFormat.format(I18N.
61-
getString("error.version-string-zero-length-component"),
62-
version));
60+
ds.throwException();
6361
}
6462
}
6563

@@ -77,8 +75,7 @@ private DottedVersion(String version, boolean greedy) {
7775
}).takeWhile(Objects::nonNull).toArray(BigInteger[]::new);
7876
suffix = ds.getUnprocessedString();
7977
if (!suffix.isEmpty() && greedy) {
80-
throw new IllegalArgumentException(MessageFormat.format(I18N.getString(
81-
"error.version-string-invalid-component"), version, suffix));
78+
ds.throwException();
8279
}
8380
}
8481
}
@@ -89,7 +86,7 @@ private static class DigitsSupplier {
8986
this.input = input;
9087
}
9188

92-
public String getNextDigits() {
89+
String getNextDigits() {
9390
if (stoped) {
9491
return null;
9592
}
@@ -130,10 +127,29 @@ public String getNextDigits() {
130127
return sb.toString();
131128
}
132129

133-
public String getUnprocessedString() {
130+
String getUnprocessedString() {
134131
return input.substring(cursor);
135132
}
136133

134+
void throwException() {
135+
final String tail;
136+
if (lastDotPos >= 0) {
137+
tail = input.substring(lastDotPos + 1);
138+
} else {
139+
tail = getUnprocessedString();
140+
}
141+
142+
final String errMessage;
143+
if (tail.isEmpty()) {
144+
errMessage = MessageFormat.format(I18N.getString(
145+
"error.version-string-zero-length-component"), input);
146+
} else {
147+
errMessage = MessageFormat.format(I18N.getString(
148+
"error.version-string-invalid-component"), input, tail);
149+
}
150+
throw new IllegalArgumentException(errMessage);
151+
}
152+
137153
private int cursor;
138154
private int lastDotPos = -1;
139155
private boolean stoped;

test/jdk/tools/jpackage/junit/share/jdk.jpackage/jdk/jpackage/internal/DottedVersionTest.java

Lines changed: 50 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,10 @@
2222
*/
2323
package jdk.jpackage.internal;
2424

25+
import java.text.MessageFormat;
2526
import java.util.ArrayList;
2627
import java.util.List;
28+
import java.util.Objects;
2729
import java.util.function.Function;
2830
import java.util.stream.Stream;
2931
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -112,28 +114,57 @@ private static List<TestConfig> testValid() {
112114
return data;
113115
}
114116

117+
record InvalidVersionTestSpec(String version, String invalidComponent) {
118+
public InvalidVersionTestSpec {
119+
Objects.requireNonNull(version);
120+
Objects.requireNonNull(invalidComponent);
121+
}
122+
123+
InvalidVersionTestSpec(String version) {
124+
this(version, "");
125+
}
126+
127+
void run() {
128+
final String expectedErrorMsg;
129+
if (invalidComponent.isEmpty()) {
130+
expectedErrorMsg = MessageFormat.format(I18N.getString("error.version-string-zero-length-component"), version);
131+
} else {
132+
expectedErrorMsg = MessageFormat.format(I18N.getString("error.version-string-invalid-component"), version, invalidComponent);
133+
}
134+
135+
final var ex = assertThrowsExactly(IllegalArgumentException.class, () -> new DottedVersion(version));
136+
137+
assertEquals(expectedErrorMsg, ex.getMessage());
138+
}
139+
}
140+
115141
@ParameterizedTest
116142
@MethodSource
117-
public void testInvalid(String str) {
118-
assertThrowsExactly(IllegalArgumentException.class, () -> new DottedVersion(str));
143+
public void testInvalid(InvalidVersionTestSpec testSpec) {
144+
testSpec.run();
119145
}
120146

121-
private static Stream<String> testInvalid() {
147+
private static Stream<InvalidVersionTestSpec> testInvalid() {
122148
return Stream.of(
123-
"1.-1",
124-
"5.",
125-
"4.2.",
126-
"3..2",
127-
"2.a",
128-
"0a",
129-
".",
130-
" ",
131-
" 1",
132-
"1. 2",
133-
"+1",
134-
"-1",
135-
"-0",
136-
"+0"
149+
new InvalidVersionTestSpec("1.-1", "-1"),
150+
new InvalidVersionTestSpec("5."),
151+
new InvalidVersionTestSpec("4.2."),
152+
new InvalidVersionTestSpec("3..2", ".2"),
153+
new InvalidVersionTestSpec("3...2", "..2"),
154+
new InvalidVersionTestSpec("2.a", "a"),
155+
new InvalidVersionTestSpec("0a", "a"),
156+
new InvalidVersionTestSpec("1.0a", "0a"),
157+
new InvalidVersionTestSpec(".", "."),
158+
new InvalidVersionTestSpec("..", ".."),
159+
new InvalidVersionTestSpec(".a.b", ".a.b"),
160+
new InvalidVersionTestSpec(".1.2", ".1.2"),
161+
new InvalidVersionTestSpec(" ", " "),
162+
new InvalidVersionTestSpec(" 1", " 1"),
163+
new InvalidVersionTestSpec("1. 2", " 2"),
164+
new InvalidVersionTestSpec("+1", "+1"),
165+
new InvalidVersionTestSpec("-1", "-1"),
166+
new InvalidVersionTestSpec("-0", "-0"),
167+
new InvalidVersionTestSpec("+0", "+0")
137168
);
138169
}
139170

@@ -145,7 +176,8 @@ public void testNull(Type type) {
145176

146177
@Test
147178
public void testEmptyGreedy() {
148-
assertThrowsExactly(IllegalArgumentException.class, () -> DottedVersion.greedy(""), "Version may not be empty string");
179+
final var ex = assertThrowsExactly(IllegalArgumentException.class, () -> DottedVersion.greedy(""));
180+
assertEquals(I18N.getString("error.version-string-empty"), ex.getMessage());
149181
}
150182

151183
@Test

0 commit comments

Comments
 (0)