From 245d3d6d9ac09417485278d30c186003896007f0 Mon Sep 17 00:00:00 2001 From: Chris Krycho Date: Fri, 22 Jul 2022 10:52:51 -0600 Subject: [PATCH] Get rid of a couple unsafe casts - use `assert`s in `setup-application-context` for router lookups - bind an intermediate term in a conditional in `build-registry` to preserve the control-flow-based narrowing in the loop --- .../test-helpers/-internal/build-registry.ts | 11 +++++------ .../test-helpers/setup-application-context.ts | 15 ++++++++++++--- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/addon-test-support/@ember/test-helpers/-internal/build-registry.ts b/addon-test-support/@ember/test-helpers/-internal/build-registry.ts index 26d8fcd2a..45777ccfe 100644 --- a/addon-test-support/@ember/test-helpers/-internal/build-registry.ts +++ b/addon-test-support/@ember/test-helpers/-internal/build-registry.ts @@ -29,13 +29,12 @@ function exposeRegistryMethodsWithoutDeprecations(container: any) { ]; for (let i = 0, l = methods.length; i < l; i++) { - let method = methods[i]; + let methodName = methods[i]; - if (method && method in container) { - container[method] = function (...args: unknown[]) { - // SAFETY: `method` is defined because we *just* checked that it is in - // the conditional wrapping this. - return container._registry[method!](...args); + if (methodName && methodName in container) { + const knownMethod = methodName; + container[knownMethod] = function (...args: unknown[]) { + return container._registry[knownMethod](...args); }; } } diff --git a/addon-test-support/@ember/test-helpers/setup-application-context.ts b/addon-test-support/@ember/test-helpers/setup-application-context.ts index 1b4f949cb..cccfb3228 100644 --- a/addon-test-support/@ember/test-helpers/setup-application-context.ts +++ b/addon-test-support/@ember/test-helpers/setup-application-context.ts @@ -12,6 +12,8 @@ import settled from './settled'; import getTestMetadata from './test-metadata'; import { runHooks } from './-internal/helper-hooks'; import { Router } from '@ember/routing'; +import { RouterService } from '@ember/routing/router-service'; +import { assert } from '@ember/debug'; export interface ApplicationTestContext extends TestContext { element?: Element | null; @@ -88,9 +90,14 @@ export function setupRouterSettlednessTracking() { HAS_SETUP_ROUTER.set(context, true); let { owner } = context; - let router: Router; + let router: Router | RouterService; if (CAN_USE_ROUTER_EVENTS) { - router = owner.lookup('service:router') as Router; + let routerService = owner.lookup('service:router'); + assert( + 'router service is not available', + routerService instanceof RouterService + ); + router = routerService; // track pending transitions via the public routeWillChange / routeDidChange APIs // routeWillChange can fire many times and is only useful to know when we have _started_ @@ -98,7 +105,9 @@ export function setupRouterSettlednessTracking() { router.on('routeWillChange', () => (routerTransitionsPending = true)); router.on('routeDidChange', () => (routerTransitionsPending = false)); } else { - router = owner.lookup('router:main') as Router; + let mainRouter = owner.lookup('router:main'); + assert('router:main is not available', mainRouter instanceof Router); + router = mainRouter; ROUTER.set(context, router); }