Use parameterized test for version range tests

This commit is contained in:
Stephane Nicoll 2021-01-16 11:17:10 +01:00
parent 0a6ec343ba
commit 50c1c28b1c

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 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,10 +18,14 @@ package io.spring.initializr.generator.version;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.stream.Stream;
import io.spring.initializr.generator.version.Version.Format; import io.spring.initializr.generator.version.Version.Format;
import org.assertj.core.api.Condition; import org.assertj.core.api.Condition;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
@ -32,59 +36,87 @@ import static org.assertj.core.api.Assertions.assertThat;
*/ */
class VersionRangeTests { class VersionRangeTests {
@Test @ParameterizedTest(name = "{0} in {1}")
void simpleStartingRange() { @MethodSource("matchInRangeParameters")
assertThat(new VersionRange(Version.parse("1.3.0.RELEASE")).toString()).isEqualTo(">=1.3.0.RELEASE"); void matchWithVersionInTheRange(String version, String range) {
assertThat(version).is(match(range));
} }
@Test static Stream<Arguments> matchInRangeParameters() {
void matchSimpleRange() { return Stream.of(Arguments.arguments("1.2.2.RELEASE", "[1.2.0.RELEASE,1.2.5.RELEASE]"),
assertThat("1.2.0.RC3").is(match("[1.2.0.RC1,1.2.0.RC5]")); Arguments.arguments("1.2.2", "[1.2.0,1.2.5]"), Arguments.arguments("1.2.0.M3", "[1.2.0.M1,1.2.0.RC1]"),
Arguments.arguments("1.2.0-M3", "[1.2.0-M1,1.2.0-RC1]"),
Arguments.arguments("1.2.0.RC1", "[1.2.0.M1,1.2.0.RC2]"),
Arguments.arguments("1.2.0-RC1", "[1.2.0-M1,1.2.0-RC2]"),
Arguments.arguments("1.2.2.BUILD-SNAPSHOT", "[1.2.0.RELEASE,1.2.5.RELEASE]"),
Arguments.arguments("1.2.2-SNAPSHOT", "[1.2.0,1.2.5]"),
Arguments.arguments("1.2.0.RELEASE", "[1.2.0.RELEASE,1.2.5.RELEASE]"),
Arguments.arguments("1.2.0", "[1.2.0,1.2.5]"), Arguments.arguments("1.2.0.M1", "[1.2.0.M1,1.2.0.RC1]"),
Arguments.arguments("1.2.0-M1", "[1.2.0-M1,1.2.0-RC1]"),
Arguments.arguments("1.2.0.RC1", "[1.2.0.RC1,1.2.0.RC2]"),
Arguments.arguments("1.2.0-RC1", "[1.2.0-RC1,1.2.0-RC2]"),
Arguments.arguments("1.2.2.BUILD-SNAPSHOT", "[1.2.2.BUILD-SNAPSHOT,1.2.5.RELEASE]"),
Arguments.arguments("1.2.2-SNAPSHOT", "[1.2.2-SNAPSHOT,1.2.5]"),
Arguments.arguments("1.2.5.RELEASE", "[1.2.0.RELEASE,1.2.5.RELEASE]"),
Arguments.arguments("1.2.5", "[1.2.0,1.2.5]"), Arguments.arguments("1.2.0.M3", "[1.2.0.M1,1.2.0.M3]"),
Arguments.arguments("1.2.0-M3", "[1.2.0-M1,1.2.0-M3]"),
Arguments.arguments("1.2.0.RC2", "[1.2.0.RC1,1.2.0.RC2]"),
Arguments.arguments("1.2.0-RC2", "[1.2.0-RC1,1.2.0-RC2]"),
Arguments.arguments("1.2.2.BUILD-SNAPSHOT", "[1.2.0.RELEASE,1.2.2.BUILD-SNAPSHOT]"),
Arguments.arguments("1.2.2-SNAPSHOT", "[1.2.0,1.2.2-SNAPSHOT]"),
Arguments.arguments("1.2.0.RELEASE", "1.2.0.RELEASE"), Arguments.arguments("1.2.0", "1.2.0"),
Arguments.arguments("1.2.0.M3", "1.2.0.M3"), Arguments.arguments("1.2.0-M3", "1.2.0-M3"),
Arguments.arguments("1.2.0.RC1", "1.2.0.RC1"), Arguments.arguments("1.2.0-RC1", "1.2.0-RC1"),
Arguments.arguments("1.2.2.BUILD-SNAPSHOT", "1.2.2.BUILD-SNAPSHOT"),
Arguments.arguments("1.2.2-SNAPSHOT", "1.2.2-SNAPSHOT"),
Arguments.arguments("1.2.5.RELEASE", "1.2.0.RELEASE"), Arguments.arguments("1.2.5", "1.2.0"),
Arguments.arguments("2.2.0.M3", "1.2.0.M3"), Arguments.arguments("2.2.0-M3", "1.2.0-M3"),
Arguments.arguments("1.4.0.RC1", "1.2.0.RC1"), Arguments.arguments("1.4.0-RC1", "1.2.0-RC1"),
Arguments.arguments("1.3.2.BUILD-SNAPSHOT", "1.2.2.BUILD-SNAPSHOT"),
Arguments.arguments("1.3.2-SNAPSHOT", "1.2.2-SNAPSHOT"));
} }
@Test @ParameterizedTest(name = "{0} in {1}")
void matchSimpleRangeBefore() { @MethodSource("matchOutRangeParameters")
assertThat("1.1.9.RC3").isNot(match("[1.2.0.RC1,1.2.0.RC5]")); void matchWithVersionOutTheRange(String version, String range) {
assertThat(version).isNot(match(range));
} }
@Test static Stream<Arguments> matchOutRangeParameters() {
void matchSimpleRangeAfter() { return Stream.of(Arguments.arguments("1.1.9.RELEASE", "[1.2.0.RELEASE,1.2.5.RELEASE]"),
assertThat("1.2.0.RC6").isNot(match("[1.2.0.RC1,1.2.0.RC5]")); Arguments.arguments("1.1.9", "[1.2.0,1.2.5]"),
} Arguments.arguments("1.2.6.RELEASE", "[1.2.0.RELEASE,1.2.5.RELEASE]"),
Arguments.arguments("1.2.6", "[1.2.0,1.2.5]"), Arguments.arguments("1.2.0.M2", "[1.2.0.M3,1.2.0.RC1]"),
@Test Arguments.arguments("1.2.0-M2", "[1.2.0-M3,1.2.0-RC1]"),
void matchInclusiveLowerRange() { Arguments.arguments("1.2.0.M4", "[1.2.0.M1,1.2.0.M3]"),
assertThat("1.2.0.RC1").is(match("[1.2.0.RC1,1.2.0.RC5]")); Arguments.arguments("1.2.0-M4", "[1.2.0-M1,1.2.0-M3]"),
} Arguments.arguments("1.2.0.RC1", "[1.2.0.RC2,1.2.0.RC3]"),
Arguments.arguments("1.2.0-RC1", "[1.2.0-RC2,1.2.0-RC3]"),
@Test Arguments.arguments("1.2.0.RC4", "[1.2.0.RC2,1.2.0.RC3]"),
void matchInclusiveHigherRange() { Arguments.arguments("1.2.0-RC4", "[1.2.0-RC2,1.2.0-RC3]"),
assertThat("1.2.0.RC5").is(match("[1.2.0.RC1,1.2.0.RC5]")); Arguments.arguments("1.1.9.BUILD-SNAPSHOT", "[1.2.0.RELEASE,1.2.5.RELEASE]"),
} Arguments.arguments("1.1.9-SNAPSHOT", "[1.2.0,1.2.5]"),
Arguments.arguments("1.2.6.BUILD-SNAPSHOT", "[1.2.0.RELEASE,1.2.5.RELEASE]"),
@Test Arguments.arguments("1.2.6-SNAPSHOT", "[1.2.0,1.2.5]"),
void matchExclusiveLowerRange() { Arguments.arguments("1.2.0.RELEASE", "(1.2.0.RELEASE,1.2.5.RELEASE]"),
assertThat("1.2.0.RC1").isNot(match("(1.2.0.RC1,1.2.0.RC5)")); Arguments.arguments("1.2.0", "(1.2.0,1.2.5]"), Arguments.arguments("1.2.0.M1", "(1.2.0.M1,1.2.0.RC1]"),
} Arguments.arguments("1.2.0-M1", "(1.2.0-M1,1.2.0-RC1]"),
Arguments.arguments("1.2.0.RC1", "(1.2.0.RC1,1.2.0.RC2]"),
@Test Arguments.arguments("1.2.0-RC1", "(1.2.0-RC1,1.2.0-RC2]"),
void matchExclusiveHigherRange() { Arguments.arguments("1.2.2.BUILD-SNAPSHOT", "(1.2.2.BUILD-SNAPSHOT,1.2.5.RELEASE]"),
assertThat("1.2.0.RC5").isNot(match("[1.2.0.RC1,1.2.0.RC5)")); Arguments.arguments("1.2.2-SNAPSHOT", "(1.2.2-SNAPSHOT,1.2.5]"),
} Arguments.arguments("1.2.5.RELEASE", "[1.2.0.RELEASE,1.2.5.RELEASE)"),
Arguments.arguments("1.2.5", "[1.2.0,1.2.5)"), Arguments.arguments("1.2.0.M3", "[1.2.0.M1,1.2.0.M3)"),
@Test Arguments.arguments("1.2.0-M3", "[1.2.0-M1,1.2.0-M3)"),
void matchUnboundedRangeEqual() { Arguments.arguments("1.2.0.RC2", "[1.2.0.RC1,1.2.0.RC2)"),
assertThat("1.2.0.RELEASE").is(match("1.2.0.RELEASE")); Arguments.arguments("1.2.0-RC2", "[1.2.0-RC1,1.2.0-RC2)"),
} Arguments.arguments("1.2.2.BUILD-SNAPSHOT", "[1.2.0.RELEASE,1.2.2.BUILD-SNAPSHOT)"),
Arguments.arguments("1.2.2-SNAPSHOT", "[1.2.0,1.2.2-SNAPSHOT)"),
@Test Arguments.arguments("1.2.0.RELEASE", "1.2.1.RELEASE"), Arguments.arguments("1.2.0", "1.2.1"),
void matchUnboundedRangeAfter() { Arguments.arguments("1.2.0.M2", "1.2.0.M3"), Arguments.arguments("1.2.0-M2", "1.2.0-M3"),
assertThat("2.2.0.RELEASE").is(match("1.2.0.RELEASE")); Arguments.arguments("1.2.0.RC1", "1.2.0.RC2"), Arguments.arguments("1.2.0-RC1", "1.2.0-RC2"),
} Arguments.arguments("1.2.1.BUILD-SNAPSHOT", "1.2.2.BUILD-SNAPSHOT"),
Arguments.arguments("1.2.1-SNAPSHOT", "1.2.2-SNAPSHOT"));
@Test
void matchUnboundedRangeBefore() {
assertThat("1.1.9.RELEASE").isNot(match("1.2.0.RELEASE"));
} }
@Test @Test
@ -116,6 +148,11 @@ class VersionRangeTests {
Arrays.asList(Version.parse("1.3.7.RELEASE"), Version.parse("1.3.6.BUILD-SNAPSHOT"))))); Arrays.asList(Version.parse("1.3.7.RELEASE"), Version.parse("1.3.6.BUILD-SNAPSHOT")))));
} }
@Test
void simpleStartingRange() {
assertThat(new VersionRange(Version.parse("1.3.0.RELEASE")).toString()).isEqualTo(">=1.3.0.RELEASE");
}
@Test @Test
void toVersionRangeWithSimpleVersion() { void toVersionRangeWithSimpleVersion() {
VersionRange range = new VersionParser(Collections.singletonList(Version.parse("1.5.6.RELEASE"))) VersionRange range = new VersionParser(Collections.singletonList(Version.parse("1.5.6.RELEASE")))