Create Version.Builder class

This commit is contained in:
Zafar Khaja 2013-03-30 22:30:25 +04:00
parent b39868a540
commit 5f7593b377
2 changed files with 94 additions and 21 deletions

View File

@ -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() {

View File

@ -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());
}
}
}