@@ -717,6 +717,7 @@ describe('Date range picker', () => {
717717
718718 dateTimeInputs [ 1 ] . focus ( ) ;
719719 // first arrow sets today, second sets aMonthAgo
720+ dateTimeInputs [ 1 ] . setSelectionRange ( 0 , 1 ) ; // make sure caret is on the month part (MM/dd/yyyy)
720721 simulateKeyboard ( dateTimeInputs [ 1 ] , arrowDown ) ;
721722 simulateKeyboard ( dateTimeInputs [ 1 ] , arrowDown ) ;
722723 await elementUpdated ( picker ) ;
@@ -1259,14 +1260,99 @@ describe('Date range picker', () => {
12591260 simulateKeyboard ( dateTimeInputs [ 0 ] , arrowUp ) ;
12601261 await elementUpdated ( picker ) ;
12611262
1262- expect ( eventSpy ) . calledWith ( 'igcInput' ) ;
1263+ expect ( eventSpy ) . calledWith ( 'igcInput' , {
1264+ detail : { start : today . native , end : null } ,
1265+ } ) ;
12631266 eventSpy . resetHistory ( ) ;
12641267
1268+ dateTimeInputs [ 0 ] . setSelectionRange ( 0 , 1 ) ; // make sure caret is on the month part (MM/dd/yyyy)
12651269 simulateKeyboard ( dateTimeInputs [ 0 ] , arrowDown ) ;
12661270 await elementUpdated ( picker ) ;
1271+
1272+ expect ( eventSpy ) . calledWith ( 'igcInput' , {
1273+ detail : { start : today . add ( 'month' , - 1 ) . native , end : null } ,
1274+ } ) ;
1275+ eventSpy . resetHistory ( ) ;
1276+
1277+ dateTimeInputs [ 0 ] . blur ( ) ;
1278+ expect ( eventSpy ) . calledWith ( 'igcChange' , {
1279+ detail : { start : today . add ( 'month' , - 1 ) . native , end : null } ,
1280+ } ) ;
12671281 } ) ;
12681282
1269- it ( 'should set the calendar active date to the start of the range while typing' , async ( ) => { } ) ;
1283+ it ( 'should set the calendar active date to the altered date of the range while typing' , async ( ) => {
1284+ const eventSpy = spy ( picker , 'emitEvent' ) ;
1285+ const aMonthAgo = today . add ( 'month' , - 1 ) ;
1286+ const twoMonthsAgo = today . add ( 'month' , - 2 ) ;
1287+ picker . value = null ;
1288+ picker . open = true ;
1289+ await elementUpdated ( picker ) ;
1290+
1291+ dateTimeInputs [ 0 ] . focus ( ) ;
1292+ expect ( isFocused ( dateTimeInputs [ 0 ] ) ) . to . be . true ;
1293+
1294+ dateTimeInputs [ 0 ] . setSelectionRange ( 0 , 1 ) ; // make sure caret is on the month part (MM/dd/yyyy)
1295+ simulateKeyboard ( dateTimeInputs [ 0 ] , arrowDown ) ;
1296+ await elementUpdated ( picker ) ;
1297+
1298+ expect ( eventSpy ) . calledWith ( 'igcInput' ) ;
1299+ eventSpy . resetHistory ( ) ;
1300+ checkDatesEqual ( dateTimeInputs [ 0 ] . value ! , today . native ) ;
1301+ // typing a single date does not select a range in the calendar
1302+ checkSelectedRange ( picker , { start : null , end : null } ) ;
1303+ checkDatesEqual ( calendar . activeDate , today . native ) ;
1304+
1305+ dateTimeInputs [ 1 ] . focus ( ) ;
1306+ expect ( isFocused ( dateTimeInputs [ 1 ] ) ) . to . be . true ;
1307+
1308+ dateTimeInputs [ 1 ] . setSelectionRange ( 0 , 1 ) ;
1309+ simulateKeyboard ( dateTimeInputs [ 1 ] , arrowDown ) ;
1310+ await elementUpdated ( picker ) ;
1311+
1312+ expect ( eventSpy ) . calledWith ( 'igcInput' ) ;
1313+ eventSpy . resetHistory ( ) ;
1314+ checkDatesEqual ( dateTimeInputs [ 1 ] . value ! , today . native ) ;
1315+ // typing the end date as well results in a selected range of a single date
1316+ checkSelectedRange ( picker , { start : today . native , end : today . native } ) ;
1317+ checkDatesEqual ( calendar . activeDate , today . native ) ;
1318+
1319+ simulateKeyboard ( dateTimeInputs [ 1 ] , arrowDown ) ;
1320+ await elementUpdated ( picker ) ;
1321+
1322+ expect ( eventSpy ) . calledWith ( 'igcInput' ) ;
1323+ eventSpy . resetHistory ( ) ;
1324+ checkDatesEqual ( dateTimeInputs [ 1 ] . value ! , aMonthAgo . native ) ;
1325+ // changing the end date while typing alters the selected range
1326+ // the active date is set to the typed date, in this case the end one
1327+ checkSelectedRange ( picker , {
1328+ start : today . native ,
1329+ end : aMonthAgo . native ,
1330+ } ) ;
1331+ checkDatesEqual ( calendar . activeDate , aMonthAgo . native ) ;
1332+
1333+ // on losing focus of the end input, the dates are swapped since end is earlier than start
1334+ dateTimeInputs [ 0 ] . focus ( ) ;
1335+ expect ( isFocused ( dateTimeInputs [ 0 ] ) ) . to . be . true ;
1336+ await elementUpdated ( picker ) ;
1337+
1338+ checkSelectedRange ( picker , {
1339+ start : aMonthAgo . native ,
1340+ end : today . native ,
1341+ } ) ;
1342+ checkDatesEqual ( calendar . activeDate , aMonthAgo . native ) ;
1343+
1344+ dateTimeInputs [ 0 ] . setSelectionRange ( 0 , 1 ) ;
1345+ simulateKeyboard ( dateTimeInputs [ 0 ] , arrowDown ) ;
1346+ await elementUpdated ( picker ) ;
1347+
1348+ expect ( eventSpy ) . calledWith ( 'igcInput' ) ;
1349+ checkDatesEqual ( dateTimeInputs [ 0 ] . value ! , twoMonthsAgo . native ) ;
1350+ checkSelectedRange ( picker , {
1351+ start : twoMonthsAgo . native ,
1352+ end : today . native ,
1353+ } ) ;
1354+ checkDatesEqual ( calendar . activeDate , twoMonthsAgo . native ) ;
1355+ } ) ;
12701356 } ) ;
12711357 } ) ;
12721358 describe ( 'Slots' , ( ) => {
0 commit comments