@@ -1170,6 +1170,81 @@ mod duration_test {
11701170 }
11711171 }
11721172
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+
11731248 #[ test]
11741249 fn fails_on_invalid_input ( ) {
11751250 for input in [
@@ -1178,7 +1253,6 @@ mod duration_test {
11781253 graphql_input_value ! ( "P0" ) ,
11791254 graphql_input_value ! ( "PT" ) ,
11801255 graphql_input_value ! ( "PTS" ) ,
1181- graphql_input_value ! ( "56:34:22" ) ,
11821256 graphql_input_value ! ( "1996-12-19" ) ,
11831257 graphql_input_value ! ( "1996-12-19T14:23:43" ) ,
11841258 graphql_input_value ! ( "1996-12-19T14:23:43Z" ) ,
0 commit comments