Working + Tests
This commit is contained in:
@ -1,5 +1,7 @@
|
|||||||
package org.mian.gitnex.helpers;
|
package org.mian.gitnex.helpers;
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
@ -19,59 +21,6 @@ public class Version {
|
|||||||
// if its a dev release or a rc or stable ...
|
// if its a dev release or a rc or stable ...
|
||||||
private String type;
|
private String type;
|
||||||
|
|
||||||
/**
|
|
||||||
* regex used to identify the type of version
|
|
||||||
**/
|
|
||||||
final private Pattern pattern_major_minor_patch_release = Pattern.compile("^[v,V]?(\\d+)\\.(\\d+)\\.(\\d+)");
|
|
||||||
final private Pattern pattern_dev_release = Pattern.compile("^[v,V]?(\\d).(\\d+).(\\d+)(\\D)(.+)");
|
|
||||||
|
|
||||||
/**
|
|
||||||
* public static Version check(String min, String last, String value) {
|
|
||||||
* <p>
|
|
||||||
* final Pattern pattern_stable_release = Pattern.compile("^(\\d)\\.(\\d+)\\.(\\d+)$");
|
|
||||||
* final Pattern pattern_dev_release = Pattern.compile("^(\\d).(\\d+).(\\d+)(\\D)(.+)");
|
|
||||||
* Matcher match;
|
|
||||||
* <p>
|
|
||||||
* if(!pattern_stable_release.matcher(min).find() || !pattern_stable_release.matcher(last).find()) {
|
|
||||||
* throw new IllegalArgumentException("VersionCheck: wrong format for min or last version given");
|
|
||||||
* }
|
|
||||||
* <p>
|
|
||||||
* match = pattern_stable_release.matcher(value);
|
|
||||||
* if(match.find()) {
|
|
||||||
* <p>
|
|
||||||
* switch(correlate(min, last, match.group())) {
|
|
||||||
* case 0:
|
|
||||||
* return UNSUPPORTED_OLD;
|
|
||||||
* case 1:
|
|
||||||
* return SUPPORTED_OLD;
|
|
||||||
* case 2:
|
|
||||||
* return SUPPORTED_LATEST;
|
|
||||||
* default:
|
|
||||||
* return UNSUPPORTED_NEW;
|
|
||||||
* }
|
|
||||||
* <p>
|
|
||||||
* }
|
|
||||||
* <p>
|
|
||||||
* match = pattern_dev_release.matcher(value);
|
|
||||||
* if(match.find()) {
|
|
||||||
* <p>
|
|
||||||
* match = Pattern.compile("^(\\d)\\.(\\d+)\\.(\\d+)").matcher(value);
|
|
||||||
* match.find();
|
|
||||||
* <p>
|
|
||||||
* if(correlate(min, last, match.group()) > 0) {
|
|
||||||
* return DEVELOPMENT;
|
|
||||||
* }
|
|
||||||
* else {
|
|
||||||
* return UNSUPPORTED_OLD;
|
|
||||||
* }
|
|
||||||
* <p>
|
|
||||||
* }
|
|
||||||
* <p>
|
|
||||||
* return UNKNOWN;
|
|
||||||
* <p>
|
|
||||||
* }
|
|
||||||
**/
|
|
||||||
|
|
||||||
public Version(String value) {
|
public Version(String value) {
|
||||||
|
|
||||||
raw = value;
|
raw = value;
|
||||||
@ -79,128 +28,208 @@ public class Version {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* HELPER
|
|
||||||
**/
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* init parse and store values for other functions of an Version instance
|
* init parse and store values for other functions of an Version instance
|
||||||
* it use the raw variable as base
|
* it use the raw variable as base
|
||||||
*
|
*
|
||||||
* @return if parse was successfully
|
* @return if parse was successfully
|
||||||
*/
|
*/
|
||||||
private boolean init() {
|
private void init() {
|
||||||
|
|
||||||
this.raw = raw;
|
/**
|
||||||
// ....
|
* regex used to identify the type of version
|
||||||
|
**/
|
||||||
|
final Pattern pattern_valid = Pattern.compile("^[v,V]?(\\d+)+(\\.(\\d+))*([_,\\-,+][\\w,\\d,_,\\-,+]*)?$");
|
||||||
|
// final Pattern pattern_major_minor_patch_release = Pattern.compile("^[v,V]?(\\d+)\\.(\\d+)\\.(\\d+)");
|
||||||
|
// final Pattern pattern_dev_release = Pattern.compile("^[v,V]?(\\d).(\\d+).(\\d+)(\\D)(.+)");
|
||||||
|
|
||||||
|
final Pattern find_number_dot_number = Pattern.compile("^\\d+(\\.(\\d)+)*");
|
||||||
|
|
||||||
|
if(!pattern_valid.matcher(raw).find()) {
|
||||||
|
throw new IllegalArgumentException("Invalid version format");
|
||||||
|
}
|
||||||
|
|
||||||
|
if(raw.charAt(0) == 'v' || raw.charAt(0) == 'V') {
|
||||||
|
raw = raw.substring(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
values = new ArrayList<Integer>();
|
||||||
|
Matcher match = find_number_dot_number.matcher(raw);
|
||||||
|
match.find();
|
||||||
|
for(String i : match.group().split("\\.")) {
|
||||||
|
values.add(Integer.parseInt(i));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// compare functions
|
||||||
|
|
||||||
|
/**
|
||||||
|
* equal return true if version is the same
|
||||||
|
*
|
||||||
|
* @param value
|
||||||
|
* @return true/false
|
||||||
|
*/
|
||||||
|
public boolean equal(String value) {
|
||||||
|
|
||||||
|
return this.equal(new Version(value));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* equal return true if version is the same
|
||||||
|
*
|
||||||
|
* @param v
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public boolean equal(@NotNull Version v) {
|
||||||
|
|
||||||
|
int rounds = Math.min(this.values.size(), v.values.size());
|
||||||
|
for(int i = 0; i < rounds; i++) {
|
||||||
|
if(this.values.get(i) != v.values.get(i)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* less return true if version is less
|
||||||
|
*
|
||||||
|
* @param value
|
||||||
|
* @return true/false
|
||||||
|
*/
|
||||||
|
public boolean less(String value) {
|
||||||
|
|
||||||
|
return this.less(new Version(value));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* less return true if version is less
|
||||||
|
*
|
||||||
|
* @param v
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public boolean less(@NotNull Version v) {
|
||||||
|
|
||||||
|
int rounds = Math.min(this.values.size(), v.values.size());
|
||||||
|
for(int i = 0; i < rounds; i++) {
|
||||||
|
if(i + 1 == rounds) {
|
||||||
|
if(this.values.get(i) >= v.values.get(i)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if(this.values.get(i) > v.values.get(i)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* higher return true if version is higher
|
||||||
|
*
|
||||||
|
* @param value
|
||||||
|
* @return true/false
|
||||||
|
*/
|
||||||
|
public boolean higher(String value) {
|
||||||
|
|
||||||
|
return this.higher(new Version(value));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* higher return true if version is higher
|
||||||
|
*
|
||||||
|
* @param v
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public boolean higher(@NotNull Version v) {
|
||||||
|
|
||||||
|
int rounds = Math.min(this.values.size(), v.values.size());
|
||||||
|
for(int i = 0; i < rounds; i++) {
|
||||||
|
if(i + 1 == rounds) {
|
||||||
|
if(this.values.get(i) <= v.values.get(i)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if(this.values.get(i) < v.values.get(i)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param min
|
* lessOrEqual return true if version is less or equal
|
||||||
* @param last
|
*
|
||||||
* @param value
|
* @param value
|
||||||
* @return 0=less; 1=in-range; 2=max; 3=above
|
* @return true/false
|
||||||
*/
|
*/
|
||||||
private static int correlate(String min, String last, String value) {
|
public boolean lessOrEqual(String value) {
|
||||||
|
|
||||||
int min_check = compareVersion(value, min);
|
return this.lessOrEqual(new Version(value));
|
||||||
int max_check = compareVersion(value, last);
|
|
||||||
int range_check = compareVersion(min, last);
|
|
||||||
|
|
||||||
switch(range_check) {
|
|
||||||
case 2:
|
|
||||||
throw new IllegalArgumentException("Minimum Version higher than Last Version");
|
|
||||||
case 1: //min == last
|
|
||||||
switch(min_check) {
|
|
||||||
case 0:
|
|
||||||
return 0;
|
|
||||||
case 1:
|
|
||||||
return 2;
|
|
||||||
default:
|
|
||||||
return 3;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
if(max_check > 1) {
|
|
||||||
return 3;
|
|
||||||
}
|
|
||||||
if(max_check == 1) {
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
if(min_check < 1) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param A doted formatted Versions
|
* lessOrEqual return true if version is less or equal
|
||||||
* @param B doted formatted Versions
|
*
|
||||||
* @return 0|1|2
|
* @param v
|
||||||
* 0 = less
|
* @return
|
||||||
* 1 = same
|
|
||||||
* 2 = more
|
|
||||||
* @description compare doted formatted Versions
|
|
||||||
*/
|
*/
|
||||||
public static int compareVersion(String A, String B) {
|
public boolean lessOrEqual(@NotNull Version v) {
|
||||||
|
|
||||||
final Pattern pattern_stable_release = Pattern.compile("^(\\d)\\.(\\d+)\\.(\\d+)");
|
int rounds = Math.min(this.values.size(), v.values.size());
|
||||||
final Pattern pattern_dev_release = Pattern.compile("^(\\d).(\\d+).(\\d+)(\\D)(.+)");
|
for(int i = 0; i < rounds; i++) {
|
||||||
Matcher match;
|
if(this.values.get(i) > v.values.get(i)) {
|
||||||
match = pattern_dev_release.matcher(A);
|
return false;
|
||||||
if(match.find()) {
|
}
|
||||||
match = pattern_stable_release.matcher(A);
|
|
||||||
match.find();
|
|
||||||
A = match.group();
|
|
||||||
}
|
|
||||||
match = pattern_dev_release.matcher(B);
|
|
||||||
if(match.find()) {
|
|
||||||
match = pattern_stable_release.matcher(B);
|
|
||||||
match.find();
|
|
||||||
B = match.group();
|
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
|
|
||||||
//throw new IllegalArgumentException
|
}
|
||||||
if((!A.matches("[0-9]+(\\.[0-9]+)*")) || (!B.matches("[0-9]+(\\.[0-9]+)*"))) {
|
|
||||||
throw new IllegalArgumentException("Invalid version format");
|
|
||||||
}
|
|
||||||
|
|
||||||
if(A.contains(".") || B.contains(".")) {
|
|
||||||
// example 2 vs 1.3
|
|
||||||
if(!(A.contains(".") && B.contains("."))) {
|
|
||||||
if(A.contains(".")) {
|
|
||||||
return compareVersion(A, B + ".0");
|
|
||||||
}
|
|
||||||
if(B.contains(".")) {
|
|
||||||
return compareVersion(A + ".0", B);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//normal compare
|
/**
|
||||||
int a = Integer.parseInt(A.substring(0, A.indexOf(".")));
|
* higherOrEqual return true if version is higher or equal
|
||||||
int b = Integer.parseInt(B.substring(0, B.indexOf(".")));
|
*
|
||||||
if(a < b) {
|
* @param value
|
||||||
return 0;
|
* @return true/false
|
||||||
|
*/
|
||||||
|
public boolean higherOrEqual(String value) {
|
||||||
|
|
||||||
|
return this.higherOrEqual(new Version(value));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* higherOrEqual return true if version is higher or equal
|
||||||
|
*
|
||||||
|
* @param v
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public boolean higherOrEqual(@NotNull Version v) {
|
||||||
|
|
||||||
|
int rounds = Math.min(this.values.size(), v.values.size());
|
||||||
|
for(int i = 0; i < rounds; i++) {
|
||||||
|
if(this.values.get(i) < v.values.get(i)) {
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
if(a == b) {
|
|
||||||
return compareVersion(A.substring(A.indexOf(".") + 1), B.substring(B.indexOf(".") + 1));
|
|
||||||
}
|
|
||||||
return 2; //if (a > b)
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
int a = Integer.parseInt(A);
|
|
||||||
int b = Integer.parseInt(B);
|
|
||||||
if(a < b) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if(a == b) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
return 2; //if (a > b)
|
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -4,19 +4,111 @@ package org.mian.gitnex.helpers;
|
|||||||
* Author 6543
|
* Author 6543
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import org.junit.Assert;
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
import static org.junit.Assert.assertFalse;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
public class VersionTest {
|
public class VersionTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void equal() {
|
public void equal() {
|
||||||
Assert.assertFalse(new Version("1.12.0").equals("1.12.0"));
|
|
||||||
Assert.assertFalse(new Version("1.12.0").equals(new Version("1.12.0")));
|
assertTrue(new Version("1.12.0").equal("1.12.0"));
|
||||||
Assert.assertFalse(new Version("1.12.0").equals("1.12"));
|
assertTrue(new Version("1.12.0").equal(new Version("1.12.0")));
|
||||||
Assert.assertFalse(new Version("1.12.0").equals("1.12.0+dev-211-g316db0fe7"));
|
assertTrue(new Version("1.12.0").equal("1.12"));
|
||||||
Assert.assertFalse(new Version("1.12.0").equals("v1.12"));
|
assertTrue(new Version("1.12.0").equal("1.12.0+dev-211-g316db0fe7"));
|
||||||
Assert.assertFalse(new Version("v1.12.0").equals("1.12.0"));
|
assertTrue(new Version("1.12.0").equal("v1.12"));
|
||||||
|
assertTrue(new Version("v1.12.0").equal("1.12.0"));
|
||||||
|
assertTrue(new Version("0").equal("0"));
|
||||||
|
|
||||||
|
assertFalse(new Version("1.12.1").equal("1.12.0+dev-211-g316db0fe7"));
|
||||||
|
assertFalse(new Version("v1.12.0").equal("1.10.0"));
|
||||||
|
assertFalse(new Version("2.12.0").equal("v1.12"));
|
||||||
|
assertFalse(new Version("1.12").equal("2"));
|
||||||
|
assertFalse(new Version("2").equal("1"));
|
||||||
|
assertFalse(new Version("1.2").equal("2.1"));
|
||||||
|
assertFalse(new Version("2.2").equal("2.1.120"));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void less() {
|
||||||
|
|
||||||
|
assertTrue(new Version("1.11.0").less("1.12"));
|
||||||
|
assertTrue(new Version("v1.11").less("1.12.0+dev-211-g316db0fe7"));
|
||||||
|
assertTrue(new Version("1.12.0").less("v2"));
|
||||||
|
assertTrue(new Version("v1.12.0").less("1.12.1-wowowow"));
|
||||||
|
assertTrue(new Version("1.2.3").less("1.2.4"));
|
||||||
|
|
||||||
|
assertFalse(new Version("1").less("1.1.10"));
|
||||||
|
assertFalse(new Version("1.12.1").less("1.12.0+dev-211-g316db0fe7"));
|
||||||
|
assertFalse(new Version("1.12.0").less("1.12.0"));
|
||||||
|
assertFalse(new Version("v1.12.0").less("1.10.0"));
|
||||||
|
assertFalse(new Version("2.12.0").less("v1.12"));
|
||||||
|
assertFalse(new Version("2").less("1"));
|
||||||
|
assertFalse(new Version("1.2").less("2.1"));
|
||||||
|
assertFalse(new Version("2.2").less("2.1.120"));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void lessOrEqual() {
|
||||||
|
|
||||||
|
assertTrue(new Version("1.11.0").lessOrEqual("1.12"));
|
||||||
|
assertTrue(new Version("v1.11").lessOrEqual("1.12.0+dev-211-g316db0fe7"));
|
||||||
|
assertTrue(new Version("1.12.0").lessOrEqual("v2"));
|
||||||
|
assertTrue(new Version("v1.12.0").lessOrEqual("1.12.1-wowowow"));
|
||||||
|
assertTrue(new Version("1.2.3").lessOrEqual("1.2.4"));
|
||||||
|
assertTrue(new Version("1").lessOrEqual("1.1.10"));
|
||||||
|
assertTrue(new Version("1.12.0").lessOrEqual("1.12.0"));
|
||||||
|
|
||||||
|
assertFalse(new Version("1.12.1").lessOrEqual("1.12.0+dev-211-g316db0fe7"));
|
||||||
|
assertFalse(new Version("v1.12.0").lessOrEqual("1.10.0"));
|
||||||
|
assertFalse(new Version("2.12.0").lessOrEqual("v1.12"));
|
||||||
|
assertFalse(new Version("2").lessOrEqual("1"));
|
||||||
|
assertFalse(new Version("1.2").lessOrEqual("2.1"));
|
||||||
|
assertFalse(new Version("2.2").lessOrEqual("2.1.120"));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void higher() {
|
||||||
|
|
||||||
|
assertTrue(new Version("1.12").higher("1.11.0"));
|
||||||
|
assertTrue(new Version("1.12.0+dev-211-g316db0fe7").higher("v1.11"));
|
||||||
|
assertTrue(new Version("v2").higher("1.12.0"));
|
||||||
|
assertTrue(new Version("1.12.1-wowowow").higher("v1.12.0"));
|
||||||
|
assertTrue(new Version("1.2.4").higher("1.2.3"));
|
||||||
|
|
||||||
|
assertFalse(new Version("1").higher("1.1.10"));
|
||||||
|
assertFalse(new Version("1.12.0+dev-211-g316db0fe7").higher("1.12.1"));
|
||||||
|
assertFalse(new Version("1.12.0").higher("1.12.0"));
|
||||||
|
assertFalse(new Version("1.10.0").higher("v1.12.0"));
|
||||||
|
assertFalse(new Version("v1.12").higher("2.12.0"));
|
||||||
|
assertFalse(new Version("1").higher("2"));
|
||||||
|
assertFalse(new Version("2.1").higher("1.2"));
|
||||||
|
assertFalse(new Version("2.1.120").higher("2.2"));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void higherOrEqual() {
|
||||||
|
|
||||||
|
assertTrue(new Version("1.12").higherOrEqual("1.11.0"));
|
||||||
|
assertTrue(new Version("1.12.0+dev-211-g316db0fe7").higherOrEqual("v1.11"));
|
||||||
|
assertTrue(new Version("v2").higherOrEqual("1.12.0"));
|
||||||
|
assertTrue(new Version("1.12.1-wowowow").higherOrEqual("v1.12.0"));
|
||||||
|
assertTrue(new Version("1.2.4").higherOrEqual("1.2.3"));
|
||||||
|
assertTrue(new Version("1").higherOrEqual("1.1.10"));
|
||||||
|
assertTrue(new Version("1.12.0").higherOrEqual("1.12.0"));
|
||||||
|
|
||||||
|
assertFalse(new Version("1.12.0+dev-211-g316db0fe7").higherOrEqual("1.12.1"));
|
||||||
|
assertFalse(new Version("1.10.0").higherOrEqual("v1.12.0"));
|
||||||
|
assertFalse(new Version("v1.12").higherOrEqual("2.12.0"));
|
||||||
|
assertFalse(new Version("1").higherOrEqual("2"));
|
||||||
|
assertFalse(new Version("2.1").higherOrEqual("1.2"));
|
||||||
|
assertFalse(new Version("2.1.120").higherOrEqual("2.2"));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user