@@ -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 ( ) ) ,
@@ -226,21 +227,33 @@ mod relative {
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+ with_times. map( |( _, time) | time. sign) ,
232+ 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+ with_times. map( |( _, time) | time. offset) ,
237+ with_times. map( |_| 0 ) ,
238+ "They don't pick up local time"
239+ ) ;
231240
232241 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 ( ) ;
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 } ) ;
0 commit comments