[jsemver] 30/95: Create Version.Builder class

Alexandre Viau reazem-guest at moszumanska.debian.org
Mon Feb 16 14:58:27 UTC 2015


This is an automated email from the git hooks/post-receive script.

reazem-guest pushed a commit to branch master
in repository jsemver.

commit 5f7593b377bdf4794f15cd8de693826a88f44f09
Author: Zafar Khaja <zafarkhaja at gmail.com>
Date:   Sat Mar 30 22:30:25 2013 +0400

    Create Version.Builder class
---
 .../java/com/github/zafarkhaja/semver/Version.java | 73 ++++++++++++++++------
 .../com/github/zafarkhaja/semver/VersionTest.java  | 42 ++++++++++++-
 2 files changed, 94 insertions(+), 21 deletions(-)

diff --git a/src/main/java/com/github/zafarkhaja/semver/Version.java b/src/main/java/com/github/zafarkhaja/semver/Version.java
index b5efed6..01dc052 100644
--- a/src/main/java/com/github/zafarkhaja/semver/Version.java
+++ b/src/main/java/com/github/zafarkhaja/semver/Version.java
@@ -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() {
diff --git a/src/test/java/com/github/zafarkhaja/semver/VersionTest.java b/src/test/java/com/github/zafarkhaja/semver/VersionTest.java
index fcf3e6d..57997aa 100644
--- a/src/test/java/com/github/zafarkhaja/semver/VersionTest.java
+++ b/src/test/java/com/github/zafarkhaja/semver/VersionTest.java
@@ -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());
+        }
+    }
 }

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/jsemver.git



More information about the pkg-java-commits mailing list