Skip to content

Commit 33d54e4

Browse files
authored
Enable roundtrip conformance tests (#331)
Caught a bug where the spec expects constraints to be sorted during parse. Signed-off-by: nscuro <nscuro@protonmail.com>
1 parent cb91f6e commit 33d54e4

3 files changed

Lines changed: 25 additions & 9 deletions

File tree

versatile-conformance/src/test/java/io/github/nscuro/versatile/conformance/VersConformanceTest.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ void executeTest(final VersTest versTest) {
103103
case COMPARISON -> testComparison(versTest);
104104
case CONTAINMENT -> testContainment(versTest);
105105
case EQUALITY -> testEquality(versTest);
106+
case ROUNDTRIP -> testRoundtrip(versTest);
106107
default -> Assumptions.assumeTrue(false, "Test type not supported yet");
107108
}
108109
}
@@ -196,4 +197,21 @@ void testEquality(final VersTest versTest) {
196197
assertThat(versionA).as(versTest.getDescription()).isNotEqualTo(versionB);
197198
}
198199
}
200+
201+
@SuppressWarnings("unchecked")
202+
void testRoundtrip(final VersTest versTest) {
203+
assertThat(versTest.getAdditionalProperties()).isNotNull();
204+
205+
final var inputObject =
206+
(Map<String, Object>) versTest.getAdditionalProperties().get("input");
207+
assertThat(inputObject).isNotNull();
208+
209+
final var versStr = (String) inputObject.get("vers");
210+
assertThat(versStr).isNotNull();
211+
212+
final var expectedOutput = (String) versTest.getAdditionalProperties().get("expected_output");
213+
assertThat(expectedOutput).isNotNull();
214+
215+
assertThat(Vers.parse(versStr).toString()).as(versTest.getDescription()).isEqualTo(expectedOutput);
216+
}
199217
}

versatile-core/src/main/java/io/github/nscuro/versatile/Vers.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,10 @@ public static Vers parse(final String versString) {
8080
throw new VersException("vers string contains no constraints");
8181
}
8282

83-
final List<Constraint> constraints =
84-
Arrays.stream(parts).map(part -> Constraint.parse(scheme, part)).toList();
83+
final List<Constraint> constraints = Arrays.stream(parts)
84+
.map(part -> Constraint.parse(scheme, part))
85+
.sorted()
86+
.toList();
8587

8688
return new Vers(scheme, constraints);
8789
}

versatile-core/src/test/java/io/github/nscuro/versatile/VersTest.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -100,12 +100,8 @@ private static Stream<Arguments> testSplitArguments() {
100100
"vers:generic/1.2.3|>=2.0.0|<5.0.0",
101101
List.of("vers:generic/1.2.3", "vers:generic/>=2.0.0|<5.0.0")),
102102
arguments(
103-
"vers:maven/<0.5.1|>=1.2.3|!=3.2.1|<6.6.6|*",
104-
List.of(
105-
"vers:maven/*",
106-
"vers:maven/<0.5.1|>=1.2.3",
107-
"vers:maven/!=3.2.1",
108-
"vers:maven/<6.6.6")),
103+
"vers:maven/<0.5.1|>=1.2.3|!=3.2.1|<6.6.6",
104+
List.of("vers:maven/<0.5.1|>=1.2.3", "vers:maven/!=3.2.1", "vers:maven/<6.6.6")),
109105
arguments(
110106
"vers:pypi/>0.0.0|>=0.0.1|0.0.2|<0.0.3|0.0.4|<0.0.5|>=0.0.6",
111107
List.of("vers:pypi/>0.0.0|<0.0.5", "vers:pypi/>=0.0.6")),
@@ -242,7 +238,7 @@ void testHasOverlap(String version1, String version2, boolean expected) {
242238
"'vers:generic/<1.5.0|>=2.0.0|!=2.7.0|<3.2.0', 'vers:generic/>=1.5.0|<2.0.0|2.7.0|>=3.2.0'",
243239
"'vers:generic/>=1.0.0|!=1.5.0|<2.5.0|>=3.0.0|!=3.2.0', 'vers:generic/<1.0.0|1.5.0|>=2.5.0|<3.0.0|3.2.0'",
244240
"'vers:generic/>1.2.3|!=2.0.0|<=3.5.1|3.6.2|>4.0.0|<5.0.0', 'vers:generic/<=1.2.3|2.0.0|>3.5.1|!=3.6.2|<=4.0.0|>=5.0.0'",
245-
"'vers:generic/>=1.1.0|<2.2.0|!=2.1.0|>=3.0.0|<4.0.0', 'vers:generic/<1.1.0|>=2.2.0|<3.0.0|>=4.0.0'"
241+
"'vers:generic/>=1.1.0|<2.2.0|!=2.1.0|>=3.0.0|<4.0.0', 'vers:generic/<1.1.0|2.1.0|>=2.2.0|<3.0.0|>=4.0.0'"
246242
})
247243
void testInvert(String version, String expectedInverted) {
248244
var v = Vers.parse(version);

0 commit comments

Comments
 (0)