Skip to content

Commit

Permalink
handle prereleases and big numbers
Browse files Browse the repository at this point in the history
  • Loading branch information
kmck committed Sep 14, 2019
1 parent 8891263 commit c461822
Show file tree
Hide file tree
Showing 3 changed files with 87 additions and 3 deletions.
4 changes: 4 additions & 0 deletions src/main/java/com/vdurmont/semver4j/Requirement.java
Original file line number Diff line number Diff line change
Expand Up @@ -560,6 +560,10 @@ public boolean isSatisfiedBy(String version) {
public boolean isSatisfiedBy(Semver version) {
if (this.range != null) {
// We are on a leaf
if (version.isPreRelease() && !this.range.version.isPreRelease()) {
// Disqualify pre-releases if this is not a pre-release range
return false;
}
return this.range.isSatisfiedBy(version);
} else {
// We have several sub-requirements
Expand Down
19 changes: 17 additions & 2 deletions src/main/java/com/vdurmont/semver4j/Semver.java
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,15 @@ public boolean satisfies(String requirement) {
return this.satisfies(req);
}

/**
* Checks whether the version is a pre-release
*
* @return true if the current version is a prerelease
*/
public boolean isPreRelease() {
return suffixTokens.length > 0;
}

/**
* @see #isGreaterThan(Semver)
*
Expand Down Expand Up @@ -355,9 +364,15 @@ public boolean isEqualTo(String version) {
*/
public boolean isEqualTo(Semver version) {
if (this.type == SemverType.NPM) {
if (this.getMajor() != version.getMajor()) return false;
if (!this.areSameSuffixes(version.getSuffixTokens())) return false;

if (!Objects.equals(this.major, version.getMajor())) return false;

if (version.getMinor() == null) return true;
if (!Objects.equals(this.minor, version.getMinor())) return false;

if (version.getPatch() == null) return true;
if (!Objects.equals(this.patch, version.getPatch())) return false;
}

return this.equals(version);
Expand Down Expand Up @@ -542,7 +557,7 @@ private static Semver create(SemverType type, int major, Integer minor, Integer

@Override public int compareTo(Semver version) {
if (this.isGreaterThan(version)) return 1;
else if(this.isLowerThan(version)) return -1;
else if (this.isLowerThan(version)) return -1;
return 0;
}

Expand Down
67 changes: 66 additions & 1 deletion src/test/java/com/vdurmont/semver4j/NpmSemverTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,12 @@ public static Iterable<Object[]> getParameters() {
// Fully-qualified versions:
{ "1.2.3", "1.2.3", true, },
{ "1.2.4", "1.2.3", false, },
{ "1.3.3", "1.2.3", false, },
{ "2.2.3", "1.2.3", false, },

// Minor versions:
{ "1.2.3", "1.2", true, },
{ "1.3.3", "1.2", false, },
{ "1.2.4", "1.3", false, },

// Major versions:
Expand All @@ -58,7 +61,7 @@ public static Iterable<Object[]> getParameters() {
{ "3.1.5", "", true, },
{ "3.1.5", "*", true, },
{ "0.0.0", "*", true, },
{ "1.0.0-beta", "*", true, },
{ "1.0.0-beta", "*", false, },
{ "3.1.5-beta", "3.1.x", false, },
{ "3.1.5-beta+exp.sha.5114f85", "3.1.x", false, },
{ "3.1.5+exp.sha.5114f85", "3.1.x", true, },
Expand Down Expand Up @@ -121,6 +124,8 @@ public static Iterable<Object[]> getParameters() {
{ "2.0.1", "=2.0", true, },
{ "2.0.0", "=2", true, },
{ "2.0.1", "=2", true, },
{ "3.0.0", "=2.0", false, },
{ "2.1.0", "=2.0", false, },
{ "2.0.1", "=2.0.0", false, },
{ "1.9.9", "=2.0.0", false, },
{ "1.9.9", "=2.0", false, },
Expand Down Expand Up @@ -176,6 +181,56 @@ public static Iterable<Object[]> getParameters() {
{ "3.0.0", "<=2.0", false, },
{ "3.0.0", "<=2", false, },

// Prerelease versions:
{ "2.0.0-alpha", "=2.0.0-beta", false, },
{ "2.0.0-rc.2", "=2.0.0-rc.2", true, },
{ "2.0.0-rc.2", "=2.0.0-rc.3", false, },
{ "2.0.0-rc.2", "=2.0.0-rc.2.3", false, },
{ "2.0.0-rc.2", "=2.0.0-rc.3.2", false, },
{ "2.0.0-rc.2", "=2.0.0", false, },
{ "2.0.0-rc.2", "=2.0", false, },
{ "2.0.0-rc.2", "=2", false, },

{ "2.0.0-alpha", ">2.0.0-beta", false, },
{ "2.0.0-rc.2", ">2.0.0-rc.1", true, },
{ "2.0.0-rc.2", ">2.0.0-rc.2", false, },
{ "2.0.0-rc.2", ">2.0.0-rc.3", false, },
{ "2.0.0-rc.2", ">2.0.0-rc.2.3", false, },
{ "2.0.0-rc.2", ">2.0.0-rc.3.2", false, },
{ "2.0.0-rc.2", ">2.0.0", false, },
{ "2.0.0-rc.2", ">2.0", false, },
{ "2.0.0-rc.2", ">2", false, },

{ "2.0.0-alpha", "<2.0.0-beta", true, },
{ "2.0.0-rc.2", "<2.0.0-rc.3", true, },
{ "2.0.0-rc.2", "<2.0.0-rc.2.3", true, },
{ "2.0.0-rc.2", "<2.0.0-rc.3.2", true, },
{ "2.0.0-rc.2", "<2.0.0-rc.1", false, },
{ "2.0.0-rc.2", "<2.0.0-rc.2", false, },
{ "2.0.0-rc.2", "<2.0.0", false, },
{ "2.0.0-rc.2", "<2.0", false, },
{ "2.0.0-rc.2", "<2", false, },

{ "2.0.0-alpha", ">=2.0.0-beta", false, },
{ "2.0.0-rc.2", ">=2.0.0-rc.1", true, },
{ "2.0.0-rc.2", ">=2.0.0-rc.2", true, },
{ "2.0.0-rc.2", ">=2.0.0-rc.3", false, },
{ "2.0.0-rc.2", ">=2.0.0-rc.2.3", false, },
{ "2.0.0-rc.2", ">=2.0.0-rc.3.2", false, },
{ "2.0.0-rc.2", ">=2.0.0", false, },
{ "2.0.0-rc.2", ">=2.0", false, },
{ "2.0.0-rc.2", ">=2", false, },

{ "2.0.0-alpha", "<=2.0.0-beta", true, },
{ "2.0.0-rc.2", "<=2.0.0-rc.2", true, },
{ "2.0.0-rc.2", "<=2.0.0-rc.3", true, },
{ "2.0.0-rc.2", "<=2.0.0-rc.2.3", true, },
{ "2.0.0-rc.2", "<=2.0.0-rc.3.2", true, },
{ "2.0.0-rc.2", "<=2.0.0-rc.1", false, },
{ "2.0.0-rc.2", "<=2.0.0", false, },
{ "2.0.0-rc.2", "<=2.0", false, },
{ "2.0.0-rc.2", "<=2", false, },

// AND ranges:
{ "2.0.1", ">2.0.0 <3.0.0", true, },
{ "2.0.1", ">2.0 <3.0", false, },
Expand Down Expand Up @@ -222,6 +277,16 @@ public static Iterable<Object[]> getParameters() {
{ "1.1.0", "1.2 <1.2.8 || >2.0.0", false, },
{ "1.2.9", "1.2 <1.2.8 || >2.0.0", false, },
{ "2.0.0", "1.2 <1.2.8 || >2.0.0", false, },

// Big number equality:
{ "128.0.0", "=128.0.0", true, },
{ "127.127.127", "=127.128", false, },
{ "0.128.0", "=0.128.0", true, },
{ "0.0.128", "=0.0.128", true, },
{ "127.127.127", "=127.127.127", true, },
{ "128.128.128", "=128.128.128", true, },
{ "999.999.999", "=999.999.999", true, },
{ "9999.9999.9999", "=9999.9999.9999", true, },
});
}

Expand Down

0 comments on commit c461822

Please sign in to comment.