修复VersionComparator传入空字符串报错问题

This commit is contained in:
Looly
2024-06-12 00:34:16 +08:00
parent 59dc7dec39
commit 3a78b7d461
4 changed files with 93 additions and 19 deletions

View File

@@ -12,6 +12,7 @@
package org.dromara.hutool.core.lang;
import org.dromara.hutool.core.collection.ListUtil;
import org.dromara.hutool.core.comparator.CompareUtil;
import org.dromara.hutool.core.text.CharUtil;
@@ -61,7 +62,11 @@ public class Version implements Comparable<Version>, Serializable {
Assert.notNull(v, "Null version string");
final int n = v.length();
if (n == 0){
throw new IllegalArgumentException("Empty version string");
this.version = v;
this.sequence = ListUtil.empty();
this.pre = ListUtil.empty();
this.build = ListUtil.empty();
return;
}
this.version = v;
this.sequence = new ArrayList<>(4);

View File

@@ -15,6 +15,8 @@ package org.dromara.hutool.core.comparator;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertTrue;
/**
* 版本比较单元测试
*
@@ -23,63 +25,74 @@ import org.junit.jupiter.api.Test;
*/
public class VersionComparatorTest {
@Test
public void compareEmptyTest() {
int compare = VersionComparator.INSTANCE.compare("", "1.12.1");
assertTrue(compare < 0);
compare = VersionComparator.INSTANCE.compare("", null);
assertTrue(compare > 0);
compare = VersionComparator.INSTANCE.compare(null, "");
assertTrue(compare < 0);
}
@Test
public void versionComparatorTest1() {
int compare = VersionComparator.INSTANCE.compare("1.2.1", "1.12.1");
Assertions.assertTrue(compare < 0);
assertTrue(compare < 0);
// 自反测试
compare = VersionComparator.INSTANCE.compare("1.12.1", "1.2.1");
Assertions.assertTrue(compare > 0);
assertTrue(compare > 0);
}
@Test
public void versionComparatorTest2() {
int compare = VersionComparator.INSTANCE.compare("1.12.1", "1.12.1c");
Assertions.assertTrue(compare < 0);
assertTrue(compare < 0);
compare = VersionComparator.INSTANCE.compare("1.12.1c", "1.12.1");
Assertions.assertTrue(compare > 0);
assertTrue(compare > 0);
}
@Test
public void versionComparatorTest3() {
int compare = VersionComparator.INSTANCE.compare(null, "1.12.1c");
Assertions.assertTrue(compare < 0);
assertTrue(compare < 0);
// 自反测试
compare = VersionComparator.INSTANCE.compare("1.12.1c", null);
Assertions.assertTrue(compare > 0);
assertTrue(compare > 0);
}
@Test
public void versionComparatorTest4() {
int compare = VersionComparator.INSTANCE.compare("1.13.0", "1.12.1c");
Assertions.assertTrue(compare > 0);
assertTrue(compare > 0);
// 自反测试
compare = VersionComparator.INSTANCE.compare("1.12.1c", "1.13.0");
Assertions.assertTrue(compare < 0);
assertTrue(compare < 0);
}
@Test
public void versionComparatorTest5() {
int compare = VersionComparator.INSTANCE.compare("V1.2", "V1.1");
Assertions.assertTrue(compare > 0);
assertTrue(compare > 0);
// 自反测试
compare = VersionComparator.INSTANCE.compare("V1.1", "V1.2");
Assertions.assertTrue(compare < 0);
assertTrue(compare < 0);
}
@Test
public void versionComparatorTes6() {
int compare = VersionComparator.INSTANCE.compare("V0.0.20170102", "V0.0.20170101");
Assertions.assertTrue(compare > 0);
assertTrue(compare > 0);
// 自反测试
compare = VersionComparator.INSTANCE.compare("V0.0.20170101", "V0.0.20170102");
Assertions.assertTrue(compare < 0);
assertTrue(compare < 0);
}
@Test
@@ -92,11 +105,11 @@ public class VersionComparatorTest {
@Test
public void versionComparatorTest7() {
int compare = VersionComparator.INSTANCE.compare("1.12.2", "1.12.1c");
Assertions.assertTrue(compare > 0);
assertTrue(compare > 0);
// 自反测试
compare = VersionComparator.INSTANCE.compare("1.12.1c", "1.12.2");
Assertions.assertTrue(compare < 0);
assertTrue(compare < 0);
}
@Test
@@ -109,16 +122,16 @@ public class VersionComparatorTest {
void I8Z3VETest() {
// 传递性测试
int compare = VersionComparator.INSTANCE.compare("260", "a-34");
Assertions.assertTrue(compare > 0);
assertTrue(compare > 0);
compare = VersionComparator.INSTANCE.compare("a-34", "a-3");
Assertions.assertTrue(compare > 0);
assertTrue(compare > 0);
compare = VersionComparator.INSTANCE.compare("260", "a-3");
Assertions.assertTrue(compare > 0);
assertTrue(compare > 0);
}
@Test
void startWithNoneNumberTest() {
final int compare = VersionComparator.INSTANCE.compare("V1", "A1");
Assertions.assertTrue(compare > 0);
assertTrue(compare > 0);
}
}