Create Version.Builder class
This commit is contained in:
parent
b39868a540
commit
5f7593b377
|
@ -44,19 +44,65 @@ public class Version implements Comparable<Version> {
|
|||
static {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("^")
|
||||
.append(NormalVersion.FORMAT)
|
||||
.append("(?<normal>")
|
||||
.append(NormalVersion.FORMAT)
|
||||
.append(")")
|
||||
.append("(?:")
|
||||
.append(PRE_RELEASE_PREFIX)
|
||||
.append(MetadataVersion.FORMAT)
|
||||
.append("(?<preRelease>")
|
||||
.append(MetadataVersion.FORMAT)
|
||||
.append(")")
|
||||
.append(")?").append("(?:")
|
||||
.append("\\").append(BUILD_PREFIX)
|
||||
.append(MetadataVersion.FORMAT)
|
||||
.append("(?<build>")
|
||||
.append(MetadataVersion.FORMAT)
|
||||
.append(")")
|
||||
.append(")?")
|
||||
.append("$");
|
||||
|
||||
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) {
|
||||
this(normal, null, null);
|
||||
}
|
||||
|
@ -81,23 +127,10 @@ public class Version implements Comparable<Version> {
|
|||
throw new IllegalArgumentException("Illegal version format");
|
||||
}
|
||||
|
||||
NormalVersion normal = new NormalVersion(
|
||||
Integer.parseInt(matcher.group(1)),
|
||||
Integer.parseInt(matcher.group(2)),
|
||||
Integer.parseInt(matcher.group(3))
|
||||
);
|
||||
|
||||
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);
|
||||
Builder builder = new Builder(matcher.group("normal"));
|
||||
builder.setPreReleaseVersion(matcher.group("preRelease"));
|
||||
builder.setBuildMetadata(matcher.group("build"));
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
public Version incrementMajorVersion() {
|
||||
|
|
|
@ -249,7 +249,6 @@ public class VersionTest {
|
|||
assertEquals("1.0.0-beta.2", v2.toString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void shouldProvideIncrementBuildMetadataMethod() {
|
||||
Version v1 = Version.valueOf("1.0.0+build.1");
|
||||
|
@ -364,4 +363,45 @@ public class VersionTest {
|
|||
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