From 592215db66a8591878e27d01eda438537dc11cec Mon Sep 17 00:00:00 2001 From: Skylot Date: Mon, 28 Feb 2022 17:22:53 +0000 Subject: [PATCH] fix(gui): handle package version in update check (#1397) --- .../java/jadx/gui/update/VersionComparator.java | 13 +++++++------ .../jadx/gui/update/VersionComparatorTest.java | 14 ++++++++++---- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/jadx-gui/src/main/java/jadx/gui/update/VersionComparator.java b/jadx-gui/src/main/java/jadx/gui/update/VersionComparator.java index a6dc209ea..fa8eebdb4 100644 --- a/jadx-gui/src/main/java/jadx/gui/update/VersionComparator.java +++ b/jadx-gui/src/main/java/jadx/gui/update/VersionComparator.java @@ -6,22 +6,23 @@ public class VersionComparator { } public static int checkAndCompare(String str1, String str2) { - try { - return compare(clean(str1), clean(str2)); - } catch (NumberFormatException e) { - return -2; - } + return compare(clean(str1), clean(str2)); } private static String clean(String str) { + if (str == null || str.isEmpty()) { + return ""; + } String result = str.trim().toLowerCase(); if (result.charAt(0) == 'v') { result = result.substring(1); } + // treat package version as part of version + result = result.replace('-', '.'); return result; } - public static int compare(String str1, String str2) { + private static int compare(String str1, String str2) { String[] s1 = str1.split("\\."); int l1 = s1.length; String[] s2 = str2.split("\\."); diff --git a/jadx-gui/src/test/java/jadx/gui/update/VersionComparatorTest.java b/jadx-gui/src/test/java/jadx/gui/update/VersionComparatorTest.java index f6e95bd5c..ee5973092 100644 --- a/jadx-gui/src/test/java/jadx/gui/update/VersionComparatorTest.java +++ b/jadx-gui/src/test/java/jadx/gui/update/VersionComparatorTest.java @@ -2,8 +2,7 @@ package jadx.gui.update; import org.junit.jupiter.api.Test; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.is; +import static org.assertj.core.api.Assertions.assertThat; class VersionComparatorTest { @@ -24,10 +23,17 @@ class VersionComparatorTest { checkCompare("0.4.8", "0.5", -1); checkCompare("0.4.8", "0.5.0", -1); checkCompare("0.4.8", "0.6", -1); + checkCompare("1.3.3.1", "1.3.3", 1); + checkCompare("1.3.3-1", "1.3.3", 1); + checkCompare("1.3.3.1-1", "1.3.3", 1); } private static void checkCompare(String a, String b, int result) { - assertThat(VersionComparator.compare(a, b), is(result)); - assertThat(VersionComparator.compare(b, a), is(-result)); + assertThat(VersionComparator.checkAndCompare(a, b)) + .as("Compare %s and %s expect %d", a, b, result) + .isEqualTo(result); + assertThat(VersionComparator.checkAndCompare(b, a)) + .as("Compare %s and %s expect %d", b, a, -result) + .isEqualTo(-result); } }