@@ -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