@@ -184,6 +184,7 @@ mod relative {
184
184
// For comparison, a few are the same as in: https://github.com/git/git/blob/master/t/t0006-date.sh
185
185
let cases = [
186
186
( "5 seconds ago" , 5 . seconds ( ) ) ,
187
+ ( "12345 florx ago" , 12_345 . seconds ( ) ) , // Anything parses as seconds
187
188
( "5 minutes ago" , 5 . minutes ( ) ) ,
188
189
( "5 hours ago" , 5 . hours ( ) ) ,
189
190
( "5 days ago" , 5 . days ( ) ) ,
@@ -226,21 +227,33 @@ mod relative {
226
227
let time = gix_date:: parse ( input, Some ( now) ) . expect ( "relative time string should parse to a Time" ) ;
227
228
( input, time)
228
229
} ) ;
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
+ ) ;
231
240
232
241
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 ( ) ;
244
257
245
258
( input, expected)
246
259
} ) ;
0 commit comments