Sitelet https://github.com/angular/angular/commit/2d68c17a95ecaef3c3df822623c85f768448f028
Skip to content

Commit 2d68c17

Browse files
MeAkibatscott
authored andcommitted
refactor(core): use native Promise.withResolvers() in remaining test files
Replaces the remaining hand-rolled deferred promises in test-only files with the native `Promise.withResolvers()` API. Follow-up to #69739. (cherry picked from commit c8d6971)
1 parent 8b6dd5e commit 2d68c17

9 files changed

Lines changed: 124 additions & 140 deletions

File tree

‎packages/core/primitives/dom-navigation/testing/test/fake_platform_navigation.spec.ts‎

Lines changed: 51 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,8 @@ describe('navigation', () => {
5050
beforeEach(() => {
5151
const navigation = new FakeNavigation(document, 'https://test.com');
5252
const navigateEvents: FakeNavigateEvent[] = [];
53-
let nextNavigateEventResolve!: (value: FakeNavigateEvent) => void;
54-
let nextNavigateEventPromise = new Promise<FakeNavigateEvent>((resolve) => {
55-
nextNavigateEventResolve = resolve;
56-
});
53+
let {promise: nextNavigateEventPromise, resolve: nextNavigateEventResolve} =
54+
Promise.withResolvers<FakeNavigateEvent>();
5755
const navigationCurrentEntryChangeEvents: FakeNavigationCurrentEntryChangeEvent[] = [];
5856
const popStateEvents: PopStateEvent[] = [];
5957
const pendingInterceptOptions: NavigationInterceptOptions[] = [];
@@ -62,9 +60,8 @@ describe('navigation', () => {
6260
navigation.addEventListener('navigate', (event: Event) => {
6361
const navigateEvent = event as FakeNavigateEvent;
6462
nextNavigateEventResolve(navigateEvent);
65-
nextNavigateEventPromise = new Promise<FakeNavigateEvent>((resolve) => {
66-
nextNavigateEventResolve = resolve;
67-
});
63+
({promise: nextNavigateEventPromise, resolve: nextNavigateEventResolve} =
64+
Promise.withResolvers<FakeNavigateEvent>());
6865
locals.navigateEvents.push(navigateEvent);
6966
const interceptOptions = pendingInterceptOptions.shift();
7067
if (interceptOptions) {
@@ -378,10 +375,8 @@ describe('navigation', () => {
378375
});
379376

380377
it('push URL with handler', async () => {
381-
let handlerFinishedResolve!: (value: Promise<undefined> | undefined) => void;
382-
const handlerFinished = new Promise<undefined>((resolve) => {
383-
handlerFinishedResolve = resolve;
384-
});
378+
const {promise: handlerFinished, resolve: handlerFinishedResolve} =
379+
Promise.withResolvers<undefined>();
385380
locals.pendingInterceptOptions.push({
386381
handler: () => handlerFinished,
387382
});
@@ -406,10 +401,8 @@ describe('navigation', () => {
406401
});
407402

408403
it('replace URL with handler', async () => {
409-
let handlerFinishedResolve!: (value: Promise<undefined> | undefined) => void;
410-
const handlerFinished = new Promise<undefined>((resolve) => {
411-
handlerFinishedResolve = resolve;
412-
});
404+
const {promise: handlerFinished, resolve: handlerFinishedResolve} =
405+
Promise.withResolvers<undefined>();
413406
locals.pendingInterceptOptions.push({
414407
handler: () => handlerFinished,
415408
});
@@ -436,14 +429,10 @@ describe('navigation', () => {
436429
});
437430

438431
it('deferred commit', async () => {
439-
let handlerFinishedResolve!: (value: Promise<undefined> | undefined) => void;
440-
const handlerFinished = new Promise<undefined>((resolve) => {
441-
handlerFinishedResolve = resolve;
442-
});
443-
let precommitHandlerFinishedResolve!: () => void;
444-
const precommitHandlerFinished = new Promise<void>((resolve) => {
445-
precommitHandlerFinishedResolve = resolve;
446-
});
432+
const {promise: handlerFinished, resolve: handlerFinishedResolve} =
433+
Promise.withResolvers<undefined>();
434+
const {promise: precommitHandlerFinished, resolve: precommitHandlerFinishedResolve} =
435+
Promise.withResolvers<void>();
447436
locals.pendingInterceptOptions.push({
448437
handler: () => handlerFinished,
449438
precommitHandler: () => precommitHandlerFinished,
@@ -472,10 +461,8 @@ describe('navigation', () => {
472461
});
473462

474463
it('deferred commit early resolve', async () => {
475-
let handlerFinishedResolve!: (value: Promise<undefined> | undefined) => void;
476-
const handlerFinished = new Promise<undefined>((resolve) => {
477-
handlerFinishedResolve = resolve;
478-
});
464+
const {promise: handlerFinished, resolve: handlerFinishedResolve} =
465+
Promise.withResolvers<undefined>();
479466
locals.pendingInterceptOptions.push({
480467
precommitHandler: () => handlerFinished,
481468
});
@@ -529,14 +516,10 @@ describe('navigation', () => {
529516
});
530517

531518
it('deferred commit resolves on finished', async () => {
532-
let handlerFinishedResolve!: () => void;
533-
let precommitHandlerResolve!: () => void;
534-
const handlerFinished = new Promise<void>((resolve) => {
535-
handlerFinishedResolve = resolve;
536-
});
537-
const precommitHandlerFinished = new Promise<void>((resolve) => {
538-
precommitHandlerResolve = resolve;
539-
});
519+
const {promise: handlerFinished, resolve: handlerFinishedResolve} =
520+
Promise.withResolvers<void>();
521+
const {promise: precommitHandlerFinished, resolve: precommitHandlerResolve} =
522+
Promise.withResolvers<void>();
540523
locals.pendingInterceptOptions.push({
541524
handler: () => handlerFinished,
542525
precommitHandler: () => precommitHandlerFinished,
@@ -623,10 +606,11 @@ describe('navigation', () => {
623606
it('push with handler reject', async () => {
624607
let handlerFinishedReject!: (reason: unknown) => void;
625608
locals.pendingInterceptOptions.push({
626-
handler: () =>
627-
new Promise<undefined>((resolve, reject) => {
628-
handlerFinishedReject = reject;
629-
}),
609+
handler: () => {
610+
const {promise, reject} = Promise.withResolvers<undefined>();
611+
handlerFinishedReject = reject;
612+
return promise;
613+
},
630614
});
631615

632616
const {committed, finished} = locals.navigation.navigate('/test');
@@ -645,10 +629,11 @@ describe('navigation', () => {
645629
it('replace with reject', async () => {
646630
let handlerFinishedReject!: (reason: unknown) => void;
647631
locals.pendingInterceptOptions.push({
648-
handler: () =>
649-
new Promise<undefined>((resolve, reject) => {
650-
handlerFinishedReject = reject;
651-
}),
632+
handler: () => {
633+
const {promise, reject} = Promise.withResolvers<undefined>();
634+
handlerFinishedReject = reject;
635+
return promise;
636+
},
652637
});
653638

654639
const {committed, finished} = locals.navigation.navigate('/test', {
@@ -1108,10 +1093,8 @@ describe('navigation', () => {
11081093

11091094
it('traverses with handler', async () => {
11101095
const [firstPageEntry] = await setUpEntries();
1111-
let handlerFinishedResolve!: (value: Promise<undefined> | undefined) => void;
1112-
const handlerFinished = new Promise<undefined>((resolve) => {
1113-
handlerFinishedResolve = resolve;
1114-
});
1096+
const {promise: handlerFinished, resolve: handlerFinishedResolve} =
1097+
Promise.withResolvers<undefined>();
11151098
locals.pendingInterceptOptions.push({
11161099
handler: () => handlerFinished,
11171100
});
@@ -1154,10 +1137,11 @@ describe('navigation', () => {
11541137
const [firstPageEntry] = await setUpEntries();
11551138
let handlerFinishedReject!: (reason: unknown) => void;
11561139
locals.pendingInterceptOptions.push({
1157-
handler: () =>
1158-
new Promise<undefined>((resolve, reject) => {
1159-
handlerFinishedReject = reject;
1160-
}),
1140+
handler: () => {
1141+
const {promise, reject} = Promise.withResolvers<undefined>();
1142+
handlerFinishedReject = reject;
1143+
return promise;
1144+
},
11611145
});
11621146

11631147
const {committed, finished} = locals.navigation.traverseTo(firstPageEntry.key);
@@ -1675,10 +1659,8 @@ describe('navigation', () => {
16751659
});
16761660

16771661
it('push URL with handler', async () => {
1678-
let handlerFinishedResolve!: (value: Promise<undefined> | undefined) => void;
1679-
const handlerFinished = new Promise<undefined>((resolve) => {
1680-
handlerFinishedResolve = resolve;
1681-
});
1662+
const {promise: handlerFinished, resolve: handlerFinishedResolve} =
1663+
Promise.withResolvers<undefined>();
16821664
locals.pendingInterceptOptions.push({
16831665
handler: () => handlerFinished,
16841666
});
@@ -1698,10 +1680,8 @@ describe('navigation', () => {
16981680
});
16991681

17001682
it('replace URL with handler', async () => {
1701-
let handlerFinishedResolve!: (value: Promise<undefined> | undefined) => void;
1702-
const handlerFinished = new Promise<undefined>((resolve) => {
1703-
handlerFinishedResolve = resolve;
1704-
});
1683+
const {promise: handlerFinished, resolve: handlerFinishedResolve} =
1684+
Promise.withResolvers<undefined>();
17051685
locals.pendingInterceptOptions.push({
17061686
handler: () => handlerFinished,
17071687
});
@@ -1759,10 +1739,8 @@ describe('navigation', () => {
17591739
});
17601740

17611741
it('push with handler reject', async () => {
1762-
let handlerFinishedReject!: (reason: unknown) => void;
1763-
const handlerPromise = new Promise<undefined>((resolve, reject) => {
1764-
handlerFinishedReject = reject;
1765-
});
1742+
const {promise: handlerPromise, reject: handlerFinishedReject} =
1743+
Promise.withResolvers<undefined>();
17661744
locals.pendingInterceptOptions.push({
17671745
handler: () => handlerPromise,
17681746
});
@@ -1779,10 +1757,8 @@ describe('navigation', () => {
17791757
});
17801758

17811759
it('replace with reject', async () => {
1782-
let handlerFinishedReject!: (reason: unknown) => void;
1783-
const handlerPromise = new Promise<undefined>((resolve, reject) => {
1784-
handlerFinishedReject = reject;
1785-
});
1760+
const {promise: handlerPromise, reject: handlerFinishedReject} =
1761+
Promise.withResolvers<undefined>();
17861762
locals.pendingInterceptOptions.push({
17871763
handler: () => handlerPromise,
17881764
});
@@ -1951,10 +1927,8 @@ describe('navigation', () => {
19511927

19521928
it('go with handler', async () => {
19531929
const [firstPageEntry] = await setUpEntries();
1954-
let handlerFinishedResolve!: (value: Promise<undefined> | undefined) => void;
1955-
const handlerFinished = new Promise<undefined>((resolve) => {
1956-
handlerFinishedResolve = resolve;
1957-
});
1930+
const {promise: handlerFinished, resolve: handlerFinishedResolve} =
1931+
Promise.withResolvers<undefined>();
19581932
locals.pendingInterceptOptions.push({
19591933
handler: () => handlerFinished,
19601934
});
@@ -1990,10 +1964,11 @@ describe('navigation', () => {
19901964
const [firstPageEntry] = await setUpEntries();
19911965
let handlerFinishedReject!: (reason: unknown) => void;
19921966
locals.pendingInterceptOptions.push({
1993-
handler: () =>
1994-
new Promise<undefined>((resolve, reject) => {
1995-
handlerFinishedReject = reject;
1996-
}),
1967+
handler: () => {
1968+
const {promise, reject} = Promise.withResolvers<undefined>();
1969+
handlerFinishedReject = reject;
1970+
return promise;
1971+
},
19971972
});
19981973

19991974
locals.navigation.go(-2);
@@ -2210,10 +2185,7 @@ describe('navigation', () => {
22102185
});
22112186

22122187
it('waits for async handlers added via addHandler before finished resolves', async () => {
2213-
let resolveHandler!: () => void;
2214-
const handlerPromise = new Promise<void>((resolve) => {
2215-
resolveHandler = resolve;
2216-
});
2188+
const {promise: handlerPromise, resolve: resolveHandler} = Promise.withResolvers<void>();
22172189
locals.pendingInterceptOptions.push({
22182190
precommitHandler: (controller) => {
22192191
controller.addHandler(() => handlerPromise);

‎packages/forms/signals/test/node/compat/compat.spec.ts‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -187,10 +187,10 @@ describe('Forms compat', () => {
187187
const formControl = new FormControl<number>(5, {
188188
nonNullable: true,
189189
asyncValidators: () => {
190-
// can't use promiseWithResolver here, because this runs multiple times across tests.
191-
return new Promise<null>((r) => {
192-
resolve = r;
193-
});
190+
// Create a new promise on every run, because the validator runs multiple times across tests.
191+
const {promise, resolve: r} = Promise.withResolvers<null>();
192+
resolve = r;
193+
return promise;
194194
},
195195
});
196196
const cat = signal({

‎packages/platform-browser/test/testing_public_spec.ts‎

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -965,8 +965,7 @@ describe('public testing API', () => {
965965

966966
it('should fail with an error from a promise', waitForAsync(
967967
inject([], () => {
968-
let reject: (error: any) => void = undefined!;
969-
const promise = new Promise((_, rej) => (reject = rej));
968+
const {promise, reject} = Promise.withResolvers();
970969
const p = promise.then(() => expect(1).toEqual(2));
971970

972971
reject('baz');

‎packages/router/test/bootstrap.spec.ts‎

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,9 @@ describe('bootstrap', () => {
6969
@Injectable({providedIn: 'root'})
7070
class TestResolver {
7171
resolve() {
72-
let resolve: (value: unknown) => void;
73-
const res = new Promise((r) => (resolve = r));
72+
const {promise, resolve} = Promise.withResolvers();
7473
setTimeout(() => resolve('test-data'), 0);
75-
return res;
74+
return promise;
7675
}
7776
}
7877

‎packages/router/test/integration/guards.spec.ts‎

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -935,8 +935,7 @@ export function guardsIntegrationSuite() {
935935
});
936936

937937
function delayPromise(delay: number): Promise<boolean> {
938-
let resolve: (val: boolean) => void;
939-
const promise = new Promise<boolean>((res) => (resolve = res));
938+
const {promise, resolve} = Promise.withResolvers<boolean>();
940939
setTimeout(() => resolve(true), delay);
941940
return promise;
942941
}
@@ -1290,8 +1289,7 @@ export function guardsIntegrationSuite() {
12901289
canDeactivate: [
12911290
() => {
12921291
log.push('called');
1293-
let resolve: (result: boolean) => void;
1294-
const promise = new Promise((res) => (resolve = res));
1292+
const {promise, resolve} = Promise.withResolvers<boolean>();
12951293
setTimeout(() => resolve(false), 0);
12961294
return promise;
12971295
},

0 commit comments

Comments
 (0)