Skip to content

Commit 9b3ffd5

Browse files
crisbetoandrewseguin
authored andcommitted
refactor(select): remove async keydown handler (#7532)
Resolves a couple of TODOs for removing the `Promise.resolve` wrappers around a couple of calls.
1 parent 4d04472 commit 9b3ffd5

File tree

2 files changed

+7
-41
lines changed

2 files changed

+7
-41
lines changed

src/lib/select/select.spec.ts

Lines changed: 2 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,6 @@ describe('MatSelect', () => {
286286

287287
const event = dispatchKeyboardEvent(trigger, 'keydown', HOME);
288288
fixture.detectChanges();
289-
tick();
290289

291290
expect(fixture.componentInstance.select._keyManager.activeItemIndex).toBe(0);
292291
expect(event.defaultPrevented).toBe(true);
@@ -302,7 +301,6 @@ describe('MatSelect', () => {
302301

303302
const event = dispatchKeyboardEvent(trigger, 'keydown', END);
304303
fixture.detectChanges();
305-
tick();
306304

307305
expect(fixture.componentInstance.select._keyManager.activeItemIndex).toBe(7);
308306
expect(event.defaultPrevented).toBe(true);
@@ -2037,25 +2035,20 @@ describe('MatSelect', () => {
20372035
expect(formControl.value).toBeFalsy('Expected no initial value.');
20382036

20392037
dispatchKeyboardEvent(select, 'keydown', DOWN_ARROW);
2040-
tick();
20412038

20422039
expect(options[0].selected).toBe(true, 'Expected first option to be selected.');
20432040
expect(formControl.value).toBe(options[0].value,
20442041
'Expected value from first option to have been set on the model.');
20452042

20462043
dispatchKeyboardEvent(select, 'keydown', DOWN_ARROW);
2047-
tick();
2048-
20492044
dispatchKeyboardEvent(select, 'keydown', DOWN_ARROW);
2050-
tick();
20512045

20522046
// Note that the third option is skipped, because it is disabled.
20532047
expect(options[3].selected).toBe(true, 'Expected fourth option to be selected.');
20542048
expect(formControl.value).toBe(options[3].value,
20552049
'Expected value from fourth option to have been set on the model.');
20562050

20572051
dispatchKeyboardEvent(select, 'keydown', UP_ARROW);
2058-
tick();
20592052

20602053
expect(options[1].selected).toBe(true, 'Expected second option to be selected.');
20612054
expect(formControl.value).toBe(options[1].value,
@@ -2089,7 +2082,6 @@ describe('MatSelect', () => {
20892082
expect(formControl.pristine).toBe(true, 'Expected form control to be clean.');
20902083

20912084
dispatchKeyboardEvent(select, 'keydown', 16); // Press a random key.
2092-
tick();
20932085

20942086
expect(formControl.value).toBeNull('Expected form control value to stay empty.');
20952087
expect(formControl.pristine).toBe(true, 'Expected form control to stay clean.');
@@ -2101,10 +2093,8 @@ describe('MatSelect', () => {
21012093

21022094
formControl.setValue('eggs-5');
21032095
fixture.detectChanges();
2104-
tick();
21052096

21062097
dispatchKeyboardEvent(select, 'keydown', DOWN_ARROW);
2107-
tick();
21082098

21092099
expect(formControl.value).toBe('pasta-6');
21102100
expect(fixture.componentInstance.options.toArray()[6].selected).toBe(true);
@@ -2141,7 +2131,6 @@ describe('MatSelect', () => {
21412131
formControl.disable();
21422132

21432133
dispatchKeyboardEvent(select, 'keydown', DOWN_ARROW);
2144-
tick();
21452134

21462135
expect(formControl.value).toBe('eggs-5', 'Expected value to remain unchaged.');
21472136
}));
@@ -2151,13 +2140,11 @@ describe('MatSelect', () => {
21512140

21522141
fixture.componentInstance.options.forEach(() => {
21532142
dispatchKeyboardEvent(select, 'keydown', DOWN_ARROW);
2154-
tick();
21552143
});
21562144

21572145
expect(lastOption.selected).toBe(true, 'Expected last option to be selected.');
21582146

21592147
dispatchKeyboardEvent(select, 'keydown', DOWN_ARROW);
2160-
tick();
21612148

21622149
expect(lastOption.selected).toBe(true, 'Expected last option to stay selected.');
21632150
}));
@@ -2190,7 +2177,6 @@ describe('MatSelect', () => {
21902177
const subscription = map.call(option.onSelectionChange, e => e.isUserInput).subscribe(spy);
21912178

21922179
dispatchKeyboardEvent(select, 'keydown', DOWN_ARROW);
2193-
tick();
21942180
expect(spy).toHaveBeenCalledWith(true);
21952181

21962182
subscription.unsubscribe();
@@ -2269,14 +2255,12 @@ describe('MatSelect', () => {
22692255

22702256
[1, 2, 3].forEach(() => {
22712257
dispatchKeyboardEvent(host, 'keydown', DOWN_ARROW);
2272-
tick();
22732258
fixture.detectChanges();
22742259
});
22752260

22762261
expect(host.getAttribute('aria-activedescendant')).toBe(options[4].id);
22772262

22782263
dispatchKeyboardEvent(host, 'keydown', UP_ARROW);
2279-
tick();
22802264
fixture.detectChanges();
22812265

22822266
expect(host.getAttribute('aria-activedescendant')).toBe(options[3].id);
@@ -2561,7 +2545,6 @@ describe('MatSelect', () => {
25612545
fakeAsync(() => {
25622546
const select = fixture.debugElement.query(By.css('mat-select')).nativeElement;
25632547
dispatchKeyboardEvent(select, 'keydown', DOWN_ARROW);
2564-
tick();
25652548

25662549
expect(fixture.componentInstance.changeListener).toHaveBeenCalledTimes(1);
25672550
}));
@@ -3155,18 +3138,14 @@ describe('MatSelect', () => {
31553138
});
31563139
}));
31573140

3158-
});
3159-
3160-
describe('when using a non-function comparator', () => {
3161-
beforeEach(() => {
3141+
it('should throw an error when using a non-function comparator', () => {
31623142
instance.useNullComparator();
3163-
});
31643143

3165-
it('should throw an error', () => {
31663144
expect(() => {
31673145
fixture.detectChanges();
31683146
}).toThrowError(wrappedErrorMessage(getMatSelectNonFunctionValueError()));
31693147
});
3148+
31703149
});
31713150
});
31723151

@@ -3198,8 +3177,6 @@ describe('MatSelect', () => {
31983177

31993178
[1, 2, 3].forEach(() => {
32003179
dispatchKeyboardEvent(host, 'keydown', DOWN_ARROW);
3201-
tick();
3202-
fixture.detectChanges();
32033180
});
32043181

32053182
expect(panel.scrollTop).toBe(initialScrollPosition, 'Expected scroll position not to change');
@@ -3208,8 +3185,6 @@ describe('MatSelect', () => {
32083185
it('should scroll down to the active option', fakeAsync(() => {
32093186
for (let i = 0; i < 15; i++) {
32103187
dispatchKeyboardEvent(host, 'keydown', DOWN_ARROW);
3211-
tick();
3212-
fixture.detectChanges();
32133188
}
32143189

32153190
// <option index * height> - <panel height> = 16 * 48 - 256 = 512
@@ -3220,14 +3195,10 @@ describe('MatSelect', () => {
32203195
// Scroll to the bottom.
32213196
for (let i = 0; i < fixture.componentInstance.foods.length; i++) {
32223197
dispatchKeyboardEvent(host, 'keydown', DOWN_ARROW);
3223-
tick();
3224-
fixture.detectChanges();
32253198
}
32263199

32273200
for (let i = 0; i < 20; i++) {
32283201
dispatchKeyboardEvent(host, 'keydown', UP_ARROW);
3229-
tick();
3230-
fixture.detectChanges();
32313202
}
32323203

32333204
// <option index * height> = 9 * 48 = 432
@@ -3250,8 +3221,6 @@ describe('MatSelect', () => {
32503221

32513222
for (let i = 0; i < 5; i++) {
32523223
dispatchKeyboardEvent(host, 'keydown', DOWN_ARROW);
3253-
tick();
3254-
groupFixture.detectChanges();
32553224
}
32563225

32573226
// Note that we press down 5 times, but it will skip

src/lib/select/select.ts

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1167,15 +1167,12 @@ export class MatSelect extends _MatSelectMixinBase implements AfterContentInit,
11671167
// however the key manager only supports up/down at the moment.
11681168
this._keyManager.onKeydown(event);
11691169

1170-
// TODO(crisbeto): get rid of the Promise.resolve when #6441 gets in.
1171-
Promise.resolve().then(() => {
1172-
const currentActiveItem = this._keyManager.activeItem;
1170+
const currentActiveItem = this._keyManager.activeItem;
11731171

1174-
if (currentActiveItem && currentActiveItem !== prevActiveItem) {
1175-
this._clearSelection();
1176-
this._setSelectionByValue(currentActiveItem.value, true);
1177-
}
1178-
});
1172+
if (currentActiveItem && currentActiveItem !== prevActiveItem) {
1173+
this._clearSelection();
1174+
this._setSelectionByValue(currentActiveItem.value, true);
1175+
}
11791176
}
11801177
}
11811178

0 commit comments

Comments
 (0)