diff --git a/addon-test-support/@ember/test-helpers/dom/-get-element.ts b/addon-test-support/@ember/test-helpers/dom/-get-element.ts index 66c3a9fe6..5f152620b 100644 --- a/addon-test-support/@ember/test-helpers/dom/-get-element.ts +++ b/addon-test-support/@ember/test-helpers/dom/-get-element.ts @@ -1,6 +1,15 @@ import getRootElement from './get-root-element'; import Target, { isDocument, isElement } from './-target'; +function getElement< + K extends keyof (HTMLElementTagNameMap | SVGElementTagNameMap) +>(target: K): (HTMLElementTagNameMap[K] | SVGElementTagNameMap[K]) | null; +function getElement( + target: K +): HTMLElementTagNameMap[K] | null; +function getElement( + target: K +): SVGElementTagNameMap[K] | null; function getElement(target: string): Element | null; function getElement(target: Element): Element; function getElement(target: Document): Document; diff --git a/addon-test-support/@ember/test-helpers/dom/find-all.ts b/addon-test-support/@ember/test-helpers/dom/find-all.ts index 18024b776..9d4353e65 100644 --- a/addon-test-support/@ember/test-helpers/dom/find-all.ts +++ b/addon-test-support/@ember/test-helpers/dom/find-all.ts @@ -1,6 +1,20 @@ import getElements from './-get-elements'; import { toArray } from '../ie-11-polyfills'; +// Derived, with modification, from the types for `querySelectorAll`. These +// would simply be defined as a tweaked re-export as `querySelector` is, but it +// is non-trivial (to say the least!) to preserve overloads like this while also +// changing the return type (from `NodeListOf` to `Array`). +export default function findAll< + K extends keyof (HTMLElementTagNameMap | SVGElementTagNameMap) +>(selector: K): Array; +export default function findAll( + selector: K +): Array; +export default function findAll( + selector: K +): Array; +export default function findAll(selector: string): Element[]; /** Find all elements matched by the given selector. Similar to calling `querySelectorAll()` on the test root element, but returns an array instead diff --git a/addon-test-support/@ember/test-helpers/dom/find.ts b/addon-test-support/@ember/test-helpers/dom/find.ts index 167f841e0..3e0fd98bf 100644 --- a/addon-test-support/@ember/test-helpers/dom/find.ts +++ b/addon-test-support/@ember/test-helpers/dom/find.ts @@ -1,12 +1,23 @@ import getElement from './-get-element'; +// Derived from `querySelector` types. +export default function find< + K extends keyof (HTMLElementTagNameMap | SVGElementTagNameMap) +>(selector: K): HTMLElementTagNameMap[K] | SVGElementTagNameMap[K] | null; +export default function find( + selector: K +): HTMLElementTagNameMap[K] | null; +export default function find( + selector: K +): SVGElementTagNameMap[K] | null; +export default function find(selector: string): Element | null; /** Find the first element matched by the given selector. Equivalent to calling `querySelector()` on the test root element. @public @param {string} selector the selector to search for - @return {Element} matched element or null + @return {Element | null} matched element or null @example diff --git a/addon-test-support/@ember/test-helpers/dom/trigger-event.ts b/addon-test-support/@ember/test-helpers/dom/trigger-event.ts index c38320239..748a3c698 100644 --- a/addon-test-support/@ember/test-helpers/dom/trigger-event.ts +++ b/addon-test-support/@ember/test-helpers/dom/trigger-event.ts @@ -57,7 +57,7 @@ registerHook('triggerEvent', 'start', (target: Target, eventType: string) => { export default function triggerEvent( target: Target, eventType: string, - options?: object + options?: Record ): Promise { return Promise.resolve() .then(() => { diff --git a/addon-test-support/@ember/test-helpers/settled.ts b/addon-test-support/@ember/test-helpers/settled.ts index e5c87b3b1..baa1bea1e 100644 --- a/addon-test-support/@ember/test-helpers/settled.ts +++ b/addon-test-support/@ember/test-helpers/settled.ts @@ -193,7 +193,7 @@ export interface SettledState { hasPendingTransitions: boolean | null; isRenderPending: boolean; pendingRequestCount: number; - debugInfo?: DebugInfo; + debugInfo: DebugInfo; } /** diff --git a/addon-test-support/@ember/test-helpers/setup-context.ts b/addon-test-support/@ember/test-helpers/setup-context.ts index 08bf715f1..ee6689b41 100644 --- a/addon-test-support/@ember/test-helpers/setup-context.ts +++ b/addon-test-support/@ember/test-helpers/setup-context.ts @@ -80,7 +80,7 @@ export interface TestContext extends BaseContext { getProperties(...args: string[]): Pick; pauseTest(): Promise; - resumeTest(): Promise; + resumeTest(): void; } // eslint-disable-next-line require-jsdoc diff --git a/type-tests/api.ts b/type-tests/api.ts index 9e309ef00..ddd859f82 100644 --- a/type-tests/api.ts +++ b/type-tests/api.ts @@ -24,6 +24,7 @@ import { currentURL, // Rendering Helpers render, + rerender, clearRender, // Wait Helpers waitFor, @@ -109,7 +110,11 @@ expectTypeOf(tap).toEqualTypeOf< (target: Target, options?: TouchEventInit) => Promise >(); expectTypeOf(triggerEvent).toEqualTypeOf< - (target: Target, eventType: string, options?: object) => Promise + ( + target: Target, + eventType: string, + options?: Record + ) => Promise >(); expectTypeOf(triggerKeyEvent).toEqualTypeOf< ( @@ -135,8 +140,16 @@ expectTypeOf(typeIn).toEqualTypeOf< >(); // DOM Query Helpers -expectTypeOf(find).toEqualTypeOf<(selector: string) => Element | null>(); +expectTypeOf(find).toEqualTypeOf(); +expectTypeOf(find('a')).toEqualTypeOf(); +expectTypeOf(find('div')).toEqualTypeOf(); +expectTypeOf(find('circle')).toEqualTypeOf(); +expectTypeOf(find('.corkscrew')).toEqualTypeOf(); expectTypeOf(findAll).toEqualTypeOf<(selector: string) => Array>(); +expectTypeOf(findAll('a')).toEqualTypeOf<(HTMLAnchorElement | SVGAElement)[]>(); +expectTypeOf(findAll('div')).toEqualTypeOf(); +expectTypeOf(findAll('circle')).toEqualTypeOf(); +expectTypeOf(findAll('.corkscrew')).toEqualTypeOf(); expectTypeOf(getRootElement).toEqualTypeOf<() => Element | Document>(); // Routing Helpers @@ -153,6 +166,7 @@ expectTypeOf(render).toMatchTypeOf< options?: { owner?: Owner } ) => Promise >(); +expectTypeOf(rerender).toMatchTypeOf<() => Promise>(); expectTypeOf(clearRender).toEqualTypeOf<() => Promise>(); // Wait Helpers @@ -186,7 +200,7 @@ expectTypeOf(getSettledState).toEqualTypeOf< hasPendingTransitions: boolean | null; isRenderPending: boolean; pendingRequestCount: number; - debugInfo?: InternalDebugInfo; + debugInfo: InternalDebugInfo; } >();