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

Lines changed: 25 additions & 7 deletions
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

Lines changed: 43 additions & 0 deletions
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)