Skip to content

Commit da49fa4

Browse files
committed
Backport fix for test failures if test happens at exact multiples of 100 milliseconds.
1 parent fa655ee commit da49fa4

File tree

1 file changed

+35
-8
lines changed

1 file changed

+35
-8
lines changed

src/test/org/firebirdsql/jdbc/FBPreparedStatementTest.java

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -442,14 +442,12 @@ void testTimestampWithCalendar() throws Exception {
442442
switch (rs.getInt(1)) {
443443
case 2:
444444
ts2 = rs.getTimestamp(3);
445-
ts2AsStr = rs.getString(2);
446-
ts2AsStr = ts2AsStr.substring(0, Math.min(ts2AsStr.length(), maxLength));
445+
ts2AsStr = truncate(rs.getString(2), maxLength);
447446
break;
448447

449448
case 3:
450449
ts3 = rs.getTimestamp(3);
451-
ts3AsStr = rs.getString(2);
452-
ts3AsStr = ts3AsStr.substring(0, Math.min(ts3AsStr.length(), maxLength));
450+
ts3AsStr = truncate(rs.getString(2), maxLength);
453451
break;
454452
}
455453
}
@@ -459,16 +457,45 @@ void testTimestampWithCalendar() throws Exception {
459457

460458
assertEquals(3600 * 1000, Math.abs(ts2.getTime() - ts3.getTime()),
461459
"Timestamps 2 and 3 should differ for 3600 seconds");
462-
String ts2ToStr = ts2.toString();
463-
ts2ToStr = ts2ToStr.substring(0, Math.min(ts2ToStr.length(), maxLength));
460+
String ts2ToStr = truncate(fixTimestampString(ts2.toString(), ts2AsStr.length()), maxLength);
464461
assertEquals(ts2AsStr, ts2ToStr, "Server should see the same timestamp");
465-
String ts3ToStr = ts3.toString();
466-
ts3ToStr = ts3ToStr.substring(0, Math.min(ts3ToStr.length(), maxLength));
462+
String ts3ToStr = truncate(fixTimestampString(ts3.toString(), ts3AsStr.length()), maxLength);
467463
assertEquals(ts3AsStr, ts3ToStr, "Server should see the same timestamp");
468464
}
469465
}
470466
}
471467

468+
/**
469+
* Account for presentation difference with trailing 0.
470+
*
471+
* @param timestampString
472+
* timestamp string
473+
* @param expectedLength
474+
* expected length
475+
* @return value padded with one {@code 0} if {@code timestampString} is one character shorter than
476+
* {@code expectedLength}, otherwise {@code timestampString}
477+
*/
478+
private static String fixTimestampString(String timestampString, int expectedLength) {
479+
if (timestampString.length() == expectedLength - 1) {
480+
return timestampString + '0';
481+
}
482+
return timestampString;
483+
}
484+
485+
/**
486+
* Truncate string to {@code maxLength}.
487+
*
488+
* @param stringToTruncate
489+
* string to truncate
490+
* @param maxLength
491+
* maximum length
492+
* @return either {@code stringToTruncate} if shorter than {@code maxLength}, or a string of the requested length
493+
*/
494+
@SuppressWarnings("SameParameterValue")
495+
private static String truncate(String stringToTruncate, int maxLength) {
496+
return stringToTruncate.substring(0, Math.min(stringToTruncate.length(), maxLength));
497+
}
498+
472499
@Test
473500
void testTimeWithCalendar() throws Exception {
474501
executeCreateTable(con, CREATE_TEST_BLOB_TABLE);

0 commit comments

Comments
 (0)