Create Version.Builder class
This commit is contained in:
parent
b39868a540
commit
5f7593b377
|
@ -44,19 +44,65 @@ public class Version implements Comparable<Version> {
|
||||||
static {
|
static {
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
sb.append("^")
|
sb.append("^")
|
||||||
.append(NormalVersion.FORMAT)
|
.append("(?<normal>")
|
||||||
|
.append(NormalVersion.FORMAT)
|
||||||
|
.append(")")
|
||||||
.append("(?:")
|
.append("(?:")
|
||||||
.append(PRE_RELEASE_PREFIX)
|
.append(PRE_RELEASE_PREFIX)
|
||||||
.append(MetadataVersion.FORMAT)
|
.append("(?<preRelease>")
|
||||||
|
.append(MetadataVersion.FORMAT)
|
||||||
|
.append(")")
|
||||||
.append(")?").append("(?:")
|
.append(")?").append("(?:")
|
||||||
.append("\\").append(BUILD_PREFIX)
|
.append("\\").append(BUILD_PREFIX)
|
||||||
.append(MetadataVersion.FORMAT)
|
.append("(?<build>")
|
||||||
|
.append(MetadataVersion.FORMAT)
|
||||||
|
.append(")")
|
||||||
.append(")?")
|
.append(")?")
|
||||||
.append("$");
|
.append("$");
|
||||||
|
|
||||||
SEMVER_PATTERN = Pattern.compile(sb.toString());
|
SEMVER_PATTERN = Pattern.compile(sb.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class Builder {
|
||||||
|
|
||||||
|
private String normal;
|
||||||
|
private String preRelease;
|
||||||
|
private String build;
|
||||||
|
|
||||||
|
public Builder(String normal) {
|
||||||
|
if (normal == null) {
|
||||||
|
throw new NullPointerException(
|
||||||
|
"Normal version MUST NOT be NULL"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
this.normal = normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPreReleaseVersion(String preRelease) {
|
||||||
|
this.preRelease = preRelease;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBuildMetadata(String build) {
|
||||||
|
this.build = build;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Version build() {
|
||||||
|
MetadataVersion preReleaseVersion = null;
|
||||||
|
if (preRelease != null) {
|
||||||
|
preReleaseVersion = new MetadataVersion(preRelease);
|
||||||
|
}
|
||||||
|
MetadataVersion buildMetadata = null;
|
||||||
|
if (build != null) {
|
||||||
|
buildMetadata = new MetadataVersion(build);
|
||||||
|
}
|
||||||
|
return new Version(
|
||||||
|
NormalVersion.valueOf(normal),
|
||||||
|
preReleaseVersion,
|
||||||
|
buildMetadata
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Version(NormalVersion normal) {
|
Version(NormalVersion normal) {
|
||||||
this(normal, null, null);
|
this(normal, null, null);
|
||||||
}
|
}
|
||||||
|
@ -81,23 +127,10 @@ public class Version implements Comparable<Version> {
|
||||||
throw new IllegalArgumentException("Illegal version format");
|
throw new IllegalArgumentException("Illegal version format");
|
||||||
}
|
}
|
||||||
|
|
||||||
NormalVersion normal = new NormalVersion(
|
Builder builder = new Builder(matcher.group("normal"));
|
||||||
Integer.parseInt(matcher.group(1)),
|
builder.setPreReleaseVersion(matcher.group("preRelease"));
|
||||||
Integer.parseInt(matcher.group(2)),
|
builder.setBuildMetadata(matcher.group("build"));
|
||||||
Integer.parseInt(matcher.group(3))
|
return builder.build();
|
||||||
);
|
|
||||||
|
|
||||||
MetadataVersion preRelease =
|
|
||||||
(matcher.group(4) != null) ?
|
|
||||||
new MetadataVersion(matcher.group(4)) :
|
|
||||||
null;
|
|
||||||
|
|
||||||
MetadataVersion build =
|
|
||||||
(matcher.group(5) != null) ?
|
|
||||||
new MetadataVersion(matcher.group(5)) :
|
|
||||||
null;
|
|
||||||
|
|
||||||
return new Version(normal, preRelease, build);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Version incrementMajorVersion() {
|
public Version incrementMajorVersion() {
|
||||||
|
|
|
@ -249,7 +249,6 @@ public class VersionTest {
|
||||||
assertEquals("1.0.0-beta.2", v2.toString());
|
assertEquals("1.0.0-beta.2", v2.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void shouldProvideIncrementBuildMetadataMethod() {
|
public void shouldProvideIncrementBuildMetadataMethod() {
|
||||||
Version v1 = Version.valueOf("1.0.0+build.1");
|
Version v1 = Version.valueOf("1.0.0+build.1");
|
||||||
|
@ -364,4 +363,45 @@ public class VersionTest {
|
||||||
assertEquals(value, v.toString());
|
assertEquals(value, v.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class BuilderTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldThrowNullPointerExceptionIfNormalVersionIsNull() {
|
||||||
|
try {
|
||||||
|
Version.Builder builder = new Version.Builder(null);
|
||||||
|
} catch (NullPointerException e) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
fail("Builder was expected to throw NullPointerException");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldBuildVersionFromNormalVersion() {
|
||||||
|
Version.Builder builder = new Version.Builder("1.0.0");
|
||||||
|
assertEquals(Version.valueOf("1.0.0"), builder.build());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldBuildVersionWithPreReleaseVersion() {
|
||||||
|
Version.Builder builder = new Version.Builder("1.0.0");
|
||||||
|
builder.setPreReleaseVersion("alpha");
|
||||||
|
assertEquals(Version.valueOf("1.0.0-alpha"), builder.build());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldBuildVersionWithBuildMetadata() {
|
||||||
|
Version.Builder builder = new Version.Builder("1.0.0");
|
||||||
|
builder.setBuildMetadata("build");
|
||||||
|
assertEquals(Version.valueOf("1.0.0+build"), builder.build());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldBuildVersionWithPreReleaseVersionAndBuildMetadata() {
|
||||||
|
Version.Builder builder = new Version.Builder("1.0.0");
|
||||||
|
builder.setPreReleaseVersion("alpha");
|
||||||
|
builder.setBuildMetadata("build");
|
||||||
|
assertEquals(Version.valueOf("1.0.0-alpha+build"), builder.build());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user