@@ -1170,6 +1170,81 @@ mod duration_test {
1170
1170
}
1171
1171
}
1172
1172
1173
+ #[ test]
1174
+ fn parses_jiff_friendly_input ( ) {
1175
+ for ( raw, expected) in [
1176
+ ( "40d" , 40 . days ( ) ) ,
1177
+ ( "40 days" , 40 . days ( ) ) ,
1178
+ ( "1y1d" , 1 . year ( ) . days ( 1 ) ) ,
1179
+ ( "1yr 1d" , 1 . year ( ) . days ( 1 ) ) ,
1180
+ ( "3d4h59m" , 3 . days ( ) . hours ( 4 ) . minutes ( 59 ) ) ,
1181
+ ( "3 days, 4 hours, 59 minutes" , 3 . days ( ) . hours ( 4 ) . minutes ( 59 ) ) ,
1182
+ ( "3d 4h 59m" , 3 . days ( ) . hours ( 4 ) . minutes ( 59 ) ) ,
1183
+ ( "2h30m" , 2 . hours ( ) . minutes ( 30 ) ) ,
1184
+ ( "2h 30m" , 2 . hours ( ) . minutes ( 30 ) ) ,
1185
+ ( "1mo" , 1 . month ( ) ) ,
1186
+ ( "1w" , 1 . week ( ) ) ,
1187
+ ( "1 week" , 1 . week ( ) ) ,
1188
+ ( "1w4d" , 1 . week ( ) . days ( 4 ) ) ,
1189
+ ( "1 wk 4 days" , 1 . week ( ) . days ( 4 ) ) ,
1190
+ ( "1m" , 1 . minute ( ) ) ,
1191
+ ( "0.0021s" , 2 . milliseconds ( ) . microseconds ( 100 ) ) ,
1192
+ ( "0s" , 0 . seconds ( ) ) ,
1193
+ ( "0d" , 0 . seconds ( ) ) ,
1194
+ ( "0 days" , 0 . seconds ( ) ) ,
1195
+ (
1196
+ "1y1mo1d1h1m1.1s" ,
1197
+ 1 . year ( )
1198
+ . months ( 1 )
1199
+ . days ( 1 )
1200
+ . hours ( 1 )
1201
+ . minutes ( 1 )
1202
+ . seconds ( 1 )
1203
+ . milliseconds ( 100 ) ,
1204
+ ) ,
1205
+ (
1206
+ "1yr 1mo 1day 1hr 1min 1.1sec" ,
1207
+ 1 . year ( )
1208
+ . months ( 1 )
1209
+ . days ( 1 )
1210
+ . hours ( 1 )
1211
+ . minutes ( 1 )
1212
+ . seconds ( 1 )
1213
+ . milliseconds ( 100 ) ,
1214
+ ) ,
1215
+ (
1216
+ "1 year, 1 month, 1 day, 1 hour, 1 minute 1.1 seconds" ,
1217
+ 1 . year ( )
1218
+ . months ( 1 )
1219
+ . days ( 1 )
1220
+ . hours ( 1 )
1221
+ . minutes ( 1 )
1222
+ . seconds ( 1 )
1223
+ . milliseconds ( 100 ) ,
1224
+ ) ,
1225
+ (
1226
+ "1 year, 1 month, 1 day, 01:01:01.1" ,
1227
+ 1 . year ( )
1228
+ . months ( 1 )
1229
+ . days ( 1 )
1230
+ . hours ( 1 )
1231
+ . minutes ( 1 )
1232
+ . seconds ( 1 )
1233
+ . milliseconds ( 100 ) ,
1234
+ ) ,
1235
+ ] {
1236
+ let input: InputValue = graphql_input_value ! ( ( raw) ) ;
1237
+ let parsed = Duration :: from_input_value ( & input) ;
1238
+
1239
+ assert ! (
1240
+ parsed. is_ok( ) ,
1241
+ "failed to parse `{raw}`: {:?}" ,
1242
+ parsed. unwrap_err( ) ,
1243
+ ) ;
1244
+ assert_eq ! ( parsed. unwrap( ) , expected, "input: {raw}" ) ;
1245
+ }
1246
+ }
1247
+
1173
1248
#[ test]
1174
1249
fn fails_on_invalid_input ( ) {
1175
1250
for input in [
@@ -1178,7 +1253,6 @@ mod duration_test {
1178
1253
graphql_input_value ! ( "P0" ) ,
1179
1254
graphql_input_value ! ( "PT" ) ,
1180
1255
graphql_input_value ! ( "PTS" ) ,
1181
- graphql_input_value ! ( "56:34:22" ) ,
1182
1256
graphql_input_value ! ( "1996-12-19" ) ,
1183
1257
graphql_input_value ! ( "1996-12-19T14:23:43" ) ,
1184
1258
graphql_input_value ! ( "1996-12-19T14:23:43Z" ) ,
0 commit comments