Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 32b7d56

Browse files
committed
Version isGreaterThanOrEqual and isLessOrEqual treat NULL in base version
as being equal to anything in comparing version
1 parent 4afca5f commit 32b7d56

File tree

2 files changed

+68
-7
lines changed

2 files changed

+68
-7
lines changed

src/main/java/org/utplsql/api/Version.java

+25-7
Original file line numberDiff line numberDiff line change
@@ -167,10 +167,14 @@ public String getNormalizedString() {
167167
}
168168

169169
private int compareToWithNulls(@Nullable Integer i1, @Nullable Integer i2) {
170+
return compareToWithNulls(i1, i2, false);
171+
}
172+
173+
private int compareToWithNulls(@Nullable Integer i1, @Nullable Integer i2, boolean nullMeansEqual) {
170174
if (i1 == null && i2 == null) {
171175
return 0;
172176
} else if (i1 == null) {
173-
return -1;
177+
return nullMeansEqual ? 0 : -1;
174178
} else if (i2 == null) {
175179
return 1;
176180
} else {
@@ -180,26 +184,30 @@ private int compareToWithNulls(@Nullable Integer i1, @Nullable Integer i2) {
180184

181185
@Override
182186
public int compareTo(Version o) {
187+
return compareTo(o, false);
188+
}
189+
190+
public int compareTo(Version o, boolean nullMeansEqual) {
183191
int curResult;
184192

185193
if (isValid() && o.isValid()) {
186194

187-
curResult = compareToWithNulls(getMajor(), o.getMajor());
195+
curResult = compareToWithNulls(getMajor(), o.getMajor(), nullMeansEqual);
188196
if (curResult != 0) {
189197
return curResult;
190198
}
191199

192-
curResult = compareToWithNulls(getMinor(), o.getMinor());
200+
curResult = compareToWithNulls(getMinor(), o.getMinor(), nullMeansEqual);
193201
if (curResult != 0) {
194202
return curResult;
195203
}
196204

197-
curResult = compareToWithNulls(getBugfix(), o.getBugfix());
205+
curResult = compareToWithNulls(getBugfix(), o.getBugfix(), nullMeansEqual);
198206
if (curResult != 0) {
199207
return curResult;
200208
}
201209

202-
curResult = compareToWithNulls(getBuild(), o.getBuild());
210+
curResult = compareToWithNulls(getBuild(), o.getBuild(), nullMeansEqual);
203211
if (curResult != 0) {
204212
return curResult;
205213
}
@@ -220,6 +228,7 @@ private void versionsAreValid(Version v) throws InvalidVersionException {
220228

221229
/**
222230
* Compares this version to a given version and returns true if this version is greater or equal than the given one
231+
* If one of the version parts of the base version is null, this level is assumed equal no matter the comparing level's version part
223232
* Throws an InvalidVersionException if either this or the given version are invalid
224233
*
225234
* @param v Version to compare with
@@ -230,7 +239,7 @@ public boolean isGreaterOrEqualThan(Version v) throws InvalidVersionException {
230239

231240
versionsAreValid(v);
232241

233-
return compareTo(v) >= 0;
242+
return compareTo(v, true) >= 0;
234243
}
235244

236245

@@ -240,11 +249,20 @@ public boolean isGreaterThan(Version v) throws InvalidVersionException {
240249
return compareTo(v) > 0;
241250
}
242251

252+
/**
253+
* Compares this version to a given version and returns true if this version is less or equal than the given one
254+
* If one of the version parts of the base version is null, this level is assumed equal no matter the comparing level's version part
255+
* Throws an InvalidVersionException if either this or the given version are invalid
256+
*
257+
* @param v Version to compare with
258+
* @return
259+
* @throws InvalidVersionException
260+
*/
243261
public boolean isLessOrEqualThan(Version v) throws InvalidVersionException {
244262

245263
versionsAreValid(v);
246264

247-
return compareTo(v) <= 0;
265+
return compareTo(v, true) <= 0;
248266
}
249267

250268
public boolean isLessThan(Version v) throws InvalidVersionException {

src/test/java/org/utplsql/api/VersionObjectTest.java

+43
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,29 @@ void versionCompareTo() {
7878
assertEquals(0, base.compareTo(Version.create("2.3.4.5")));
7979
}
8080

81+
@Test
82+
void versionCompareToWithBaseNull() {
83+
Version base = Version.create("2.3.4");
84+
85+
// Less than
86+
assertEquals(-1, base.compareTo(Version.create("3")));
87+
assertEquals(-1, base.compareTo(Version.create("3.2")));
88+
assertEquals(-1, base.compareTo(Version.create("2.4.1")));
89+
assertEquals(-1, base.compareTo(Version.create("2.3.9.1")));
90+
assertEquals(-1, base.compareTo(Version.create("2.3.4.1")));
91+
assertEquals(-1, base.compareTo(Version.create("2.3.4.5")));
92+
assertEquals(-1, base.compareTo(Version.create("2.3.4.9")));
93+
94+
// Greater than
95+
assertEquals(1, base.compareTo(Version.create("1")));
96+
assertEquals(1, base.compareTo(Version.create("1.6")));
97+
assertEquals(1, base.compareTo(Version.create("2.2.4")));
98+
assertEquals(1, base.compareTo(Version.create("2.3.3")));
99+
100+
// Equal
101+
assertEquals(0, base.compareTo(Version.create("2.3.4")));
102+
}
103+
81104
@Test
82105
void isGreaterOrEqualThan() throws InvalidVersionException {
83106
Version base = Version.create("2.3.4.5");
@@ -98,6 +121,26 @@ void isGreaterOrEqualThan() throws InvalidVersionException {
98121

99122
}
100123

124+
@Test
125+
void isGreaterOrEqualThanWithBaseNull() throws InvalidVersionException {
126+
Version base = Version.create("2.3.4");
127+
128+
assertTrue(base.isGreaterOrEqualThan(Version.create("1")));
129+
assertTrue(base.isGreaterOrEqualThan(Version.create("2")));
130+
assertTrue(base.isGreaterOrEqualThan(Version.create("2.3")));
131+
assertTrue(base.isGreaterOrEqualThan(Version.create("2.2")));
132+
assertTrue(base.isGreaterOrEqualThan(Version.create("2.3.4")));
133+
assertTrue(base.isGreaterOrEqualThan(Version.create("2.3.3")));
134+
assertTrue(base.isGreaterOrEqualThan(Version.create("2.3.4.5")));
135+
assertTrue(base.isGreaterOrEqualThan(Version.create("2.3.4.4")));
136+
assertTrue(base.isGreaterOrEqualThan(Version.create("2.3.4.6")));
137+
138+
assertFalse(base.isGreaterOrEqualThan(Version.create("2.3.5")));
139+
assertFalse(base.isGreaterOrEqualThan(Version.create("2.4")));
140+
assertFalse(base.isGreaterOrEqualThan(Version.create("3")));
141+
142+
}
143+
101144
@Test
102145
void isGreaterOrEqualThanFails() {
103146
// Given version is invalid

0 commit comments

Comments
 (0)