@@ -713,6 +713,7 @@ describe('Date range picker', () => {
713713
714714 dateTimeInputs [ 1 ] . focus ( ) ;
715715 // first arrow sets today, second sets aMonthAgo
716+ dateTimeInputs [ 1 ] . setSelectionRange ( 0 , 1 ) ; // make sure caret is on the month part (MM/dd/yyyy)
716717 simulateKeyboard ( dateTimeInputs [ 1 ] , arrowDown ) ;
717718 simulateKeyboard ( dateTimeInputs [ 1 ] , arrowDown ) ;
718719 await elementUpdated ( picker ) ;
@@ -1223,14 +1224,99 @@ describe('Date range picker', () => {
12231224 simulateKeyboard ( dateTimeInputs [ 0 ] , arrowUp ) ;
12241225 await elementUpdated ( picker ) ;
12251226
1226- expect ( eventSpy ) . calledWith ( 'igcInput' ) ;
1227+ expect ( eventSpy ) . calledWith ( 'igcInput' , {
1228+ detail : { start : today . native , end : null } ,
1229+ } ) ;
12271230 eventSpy . resetHistory ( ) ;
12281231
1232+ dateTimeInputs [ 0 ] . setSelectionRange ( 0 , 1 ) ; // make sure caret is on the month part (MM/dd/yyyy)
12291233 simulateKeyboard ( dateTimeInputs [ 0 ] , arrowDown ) ;
12301234 await elementUpdated ( picker ) ;
1235+
1236+ expect ( eventSpy ) . calledWith ( 'igcInput' , {
1237+ detail : { start : today . add ( 'month' , - 1 ) . native , end : null } ,
1238+ } ) ;
1239+ eventSpy . resetHistory ( ) ;
1240+
1241+ dateTimeInputs [ 0 ] . blur ( ) ;
1242+ expect ( eventSpy ) . calledWith ( 'igcChange' , {
1243+ detail : { start : today . add ( 'month' , - 1 ) . native , end : null } ,
1244+ } ) ;
12311245 } ) ;
12321246
1233- it ( 'should set the calendar active date to the start of the range while typing' , async ( ) => { } ) ;
1247+ it ( 'should set the calendar active date to the altered date of the range while typing' , async ( ) => {
1248+ const eventSpy = spy ( picker , 'emitEvent' ) ;
1249+ const aMonthAgo = today . add ( 'month' , - 1 ) ;
1250+ const twoMonthsAgo = today . add ( 'month' , - 2 ) ;
1251+ picker . value = null ;
1252+ picker . open = true ;
1253+ await elementUpdated ( picker ) ;
1254+
1255+ dateTimeInputs [ 0 ] . focus ( ) ;
1256+ expect ( isFocused ( dateTimeInputs [ 0 ] ) ) . to . be . true ;
1257+
1258+ dateTimeInputs [ 0 ] . setSelectionRange ( 0 , 1 ) ; // make sure caret is on the month part (MM/dd/yyyy)
1259+ simulateKeyboard ( dateTimeInputs [ 0 ] , arrowDown ) ;
1260+ await elementUpdated ( picker ) ;
1261+
1262+ expect ( eventSpy ) . calledWith ( 'igcInput' ) ;
1263+ eventSpy . resetHistory ( ) ;
1264+ checkDatesEqual ( dateTimeInputs [ 0 ] . value ! , today . native ) ;
1265+ // typing a single date does not select a range in the calendar
1266+ checkSelectedRange ( picker , { start : null , end : null } ) ;
1267+ checkDatesEqual ( calendar . activeDate , today . native ) ;
1268+
1269+ dateTimeInputs [ 1 ] . focus ( ) ;
1270+ expect ( isFocused ( dateTimeInputs [ 1 ] ) ) . to . be . true ;
1271+
1272+ dateTimeInputs [ 1 ] . setSelectionRange ( 0 , 1 ) ;
1273+ simulateKeyboard ( dateTimeInputs [ 1 ] , arrowDown ) ;
1274+ await elementUpdated ( picker ) ;
1275+
1276+ expect ( eventSpy ) . calledWith ( 'igcInput' ) ;
1277+ eventSpy . resetHistory ( ) ;
1278+ checkDatesEqual ( dateTimeInputs [ 1 ] . value ! , today . native ) ;
1279+ // typing the end date as well results in a selected range of a single date
1280+ checkSelectedRange ( picker , { start : today . native , end : today . native } ) ;
1281+ checkDatesEqual ( calendar . activeDate , today . native ) ;
1282+
1283+ simulateKeyboard ( dateTimeInputs [ 1 ] , arrowDown ) ;
1284+ await elementUpdated ( picker ) ;
1285+
1286+ expect ( eventSpy ) . calledWith ( 'igcInput' ) ;
1287+ eventSpy . resetHistory ( ) ;
1288+ checkDatesEqual ( dateTimeInputs [ 1 ] . value ! , aMonthAgo . native ) ;
1289+ // changing the end date while typing alters the selected range
1290+ // the active date is set to the typed date, in this case the end one
1291+ checkSelectedRange ( picker , {
1292+ start : today . native ,
1293+ end : aMonthAgo . native ,
1294+ } ) ;
1295+ checkDatesEqual ( calendar . activeDate , aMonthAgo . native ) ;
1296+
1297+ // on losing focus of the end input, the dates are swapped since end is earlier than start
1298+ dateTimeInputs [ 0 ] . focus ( ) ;
1299+ expect ( isFocused ( dateTimeInputs [ 0 ] ) ) . to . be . true ;
1300+ await elementUpdated ( picker ) ;
1301+
1302+ checkSelectedRange ( picker , {
1303+ start : aMonthAgo . native ,
1304+ end : today . native ,
1305+ } ) ;
1306+ checkDatesEqual ( calendar . activeDate , aMonthAgo . native ) ;
1307+
1308+ dateTimeInputs [ 0 ] . setSelectionRange ( 0 , 1 ) ;
1309+ simulateKeyboard ( dateTimeInputs [ 0 ] , arrowDown ) ;
1310+ await elementUpdated ( picker ) ;
1311+
1312+ expect ( eventSpy ) . calledWith ( 'igcInput' ) ;
1313+ checkDatesEqual ( dateTimeInputs [ 0 ] . value ! , twoMonthsAgo . native ) ;
1314+ checkSelectedRange ( picker , {
1315+ start : twoMonthsAgo . native ,
1316+ end : today . native ,
1317+ } ) ;
1318+ checkDatesEqual ( calendar . activeDate , twoMonthsAgo . native ) ;
1319+ } ) ;
12341320 } ) ;
12351321 } ) ;
12361322 describe ( 'Slots' , ( ) => {
0 commit comments