@@ -184,6 +184,7 @@ mod relative {
184184 // For comparison, a few are the same as in: https://github.com/git/git/blob/master/t/t0006-date.sh
185185 let cases = [
186186 ( "5 seconds ago" , 5 . seconds ( ) ) ,
187+ ( "12345 florx ago" , 12_345 . seconds ( ) ) , // Anything parses as seconds
187188 ( "5 minutes ago" , 5 . minutes ( ) ) ,
188189 ( "5 hours ago" , 5 . hours ( ) ) ,
189190 ( "5 days ago" , 5 . days ( ) ) ,
@@ -222,34 +223,46 @@ mod relative {
222223 ( "630720000 seconds ago" , 630_720_000 . seconds ( ) ) , // 20 years
223224 ] ;
224225
225- let with_times = cases. map ( |( input, _) | {
226+ let cases_with_times = cases. map ( |( input, _) | {
226227 let time = gix_date:: parse ( input, Some ( now) ) . expect ( "relative time string should parse to a Time" ) ;
227228 ( input, time)
228229 } ) ;
229- assert_eq ! ( with_times. map( |_| Sign :: Plus ) , with_times. map( |( _, time) | time. sign) ) ;
230- assert_eq ! ( with_times. map( |_| 0 ) , with_times. map( |( _, time) | time. offset) ) ;
230+ assert_eq ! (
231+ cases_with_times. map( |( _, time) | time. sign) ,
232+ cases_with_times. map( |_| Sign :: Plus ) ,
233+ "Despite being in the past, the dates produced are positive, as they are still post-epoch"
234+ ) ;
235+ assert_eq ! (
236+ cases_with_times. map( |( _, time) | time. offset) ,
237+ cases_with_times. map( |_| 0 ) ,
238+ "They don't pick up local time"
239+ ) ;
231240
232- let with_expected = cases. map ( |( input, span) | {
233- let expected = Zoned :: try_from ( now)
234- . expect ( "test needs to convert current time to a timestamp" )
235- // account for the loss of precision when creating `Time` with seconds
236- . round (
237- jiff:: ZonedRound :: new ( )
238- . smallest ( jiff:: Unit :: Second )
239- . mode ( jiff:: RoundMode :: Trunc ) ,
240- )
241- . expect ( "test needs to truncate current timestamp to seconds" )
242- . saturating_sub ( span)
243- . timestamp ( ) ;
241+ let expected = cases. map ( |( input, span) | {
242+ let expected = Zoned :: new (
243+ now. try_into ( ) . expect ( "system time is representable" ) ,
244+ // As relative dates are always UTC in Git, we do the same, and must
245+ // compare to UTC as well or else time might be off due to daylight savings, etc.
246+ jiff:: tz:: TimeZone :: UTC ,
247+ )
248+ // account for the loss of precision when creating `Time` with seconds
249+ . round (
250+ jiff:: ZonedRound :: new ( )
251+ . smallest ( jiff:: Unit :: Second )
252+ . mode ( jiff:: RoundMode :: Trunc ) ,
253+ )
254+ . expect ( "test needs to truncate current timestamp to seconds" )
255+ . saturating_sub ( span)
256+ . timestamp ( ) ;
244257
245258 ( input, expected)
246259 } ) ;
247- let with_actual = with_times . map ( |( input, time) | {
260+ let actual = cases_with_times . map ( |( input, time) | {
248261 let actual = jiff:: Timestamp :: from_second ( time. seconds )
249262 . expect ( "seconds obtained from a Time should convert to Timestamp" ) ;
250263 ( input, actual)
251264 } ) ;
252- assert_eq ! ( with_actual , with_expected , "relative times differ" ) ;
265+ assert_eq ! ( actual , expected ) ;
253266 }
254267}
255268
0 commit comments