diff --git a/app/src/main/java/org/mian/gitnex/helpers/Version.java b/app/src/main/java/org/mian/gitnex/helpers/Version.java
index 455e3c8b..0fd014e5 100644
--- a/app/src/main/java/org/mian/gitnex/helpers/Version.java
+++ b/app/src/main/java/org/mian/gitnex/helpers/Version.java
@@ -1,5 +1,7 @@
package org.mian.gitnex.helpers;
+import org.jetbrains.annotations.NotNull;
+import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -19,59 +21,6 @@ public class Version {
// if its a dev release or a rc or stable ...
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) {
- *
- * final Pattern pattern_stable_release = Pattern.compile("^(\\d)\\.(\\d+)\\.(\\d+)$");
- * final Pattern pattern_dev_release = Pattern.compile("^(\\d).(\\d+).(\\d+)(\\D)(.+)");
- * Matcher match;
- *
- * 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");
- * }
- *
- * match = pattern_stable_release.matcher(value);
- * if(match.find()) {
- *
- * 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;
- * }
- *
- * }
- *
- * match = pattern_dev_release.matcher(value);
- * if(match.find()) {
- *
- * match = Pattern.compile("^(\\d)\\.(\\d+)\\.(\\d+)").matcher(value);
- * match.find();
- *
- * if(correlate(min, last, match.group()) > 0) {
- * return DEVELOPMENT;
- * }
- * else {
- * return UNSUPPORTED_OLD;
- * }
- *
- * }
- *
- * return UNKNOWN;
- *
- * }
- **/
-
public Version(String value) {
raw = value;
@@ -79,128 +28,208 @@ public class Version {
}
- /**
- * HELPER
- **/
-
/**
* init parse and store values for other functions of an Version instance
* it use the raw variable as base
*
* @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();
+ 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;
}
/**
- * @param min
- * @param last
+ * lessOrEqual return true if version is less or equal
+ *
* @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);
- 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;
- }
+ return this.lessOrEqual(new Version(value));
}
/**
- * @param A doted formatted Versions
- * @param B doted formatted Versions
- * @return 0|1|2
- * 0 = less
- * 1 = same
- * 2 = more
- * @description compare doted formatted Versions
+ * lessOrEqual return true if version is less or equal
+ *
+ * @param v
+ * @return
*/
- public static int compareVersion(String A, String B) {
+ public boolean lessOrEqual(@NotNull Version v) {
- final Pattern pattern_stable_release = Pattern.compile("^(\\d)\\.(\\d+)\\.(\\d+)");
- final Pattern pattern_dev_release = Pattern.compile("^(\\d).(\\d+).(\\d+)(\\D)(.+)");
- Matcher match;
- match = pattern_dev_release.matcher(A);
- 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();
+ 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;
- //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(".")));
- int b = Integer.parseInt(B.substring(0, B.indexOf(".")));
- if(a < b) {
- return 0;
+ /**
+ * higherOrEqual return true if version is higher or equal
+ *
+ * @param value
+ * @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;
+
}
}
\ No newline at end of file
diff --git a/app/src/test/java/org/mian/gitnex/helpers/VersionTest.java b/app/src/test/java/org/mian/gitnex/helpers/VersionTest.java
index 21e81947..ce1b0511 100644
--- a/app/src/test/java/org/mian/gitnex/helpers/VersionTest.java
+++ b/app/src/test/java/org/mian/gitnex/helpers/VersionTest.java
@@ -4,19 +4,111 @@ package org.mian.gitnex.helpers;
* Author 6543
*/
-import org.junit.Assert;
import org.junit.Test;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
public class VersionTest {
@Test
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")));
- Assert.assertFalse(new Version("1.12.0").equals("1.12"));
- Assert.assertFalse(new Version("1.12.0").equals("1.12.0+dev-211-g316db0fe7"));
- Assert.assertFalse(new Version("1.12.0").equals("v1.12"));
- Assert.assertFalse(new Version("v1.12.0").equals("1.12.0"));
+
+ assertTrue(new Version("1.12.0").equal("1.12.0"));
+ assertTrue(new Version("1.12.0").equal(new Version("1.12.0")));
+ assertTrue(new Version("1.12.0").equal("1.12"));
+ assertTrue(new Version("1.12.0").equal("1.12.0+dev-211-g316db0fe7"));
+ 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"));
}