Skip to content

Commit

Permalink
Address PR feedback
Browse files Browse the repository at this point in the history
(cherry picked from commit 05aa399)

# Conflicts:
#	addon-test-support/@ember/test-helpers/dom/-get-element.ts
#	addon-test-support/@ember/test-helpers/dom/find-all.ts
#	addon-test-support/@ember/test-helpers/dom/find.ts
#	type-tests/api.ts
  • Loading branch information
gitKrystan authored and chriskrycho committed Dec 15, 2022
1 parent 83b7f5f commit 5e87a54
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 0 deletions.
9 changes: 9 additions & 0 deletions addon-test-support/@ember/test-helpers/dom/-get-element.ts
Original file line number Diff line number Diff line change
@@ -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 | SVGElementTagNameMap)[K] | null;
function getElement<K extends keyof HTMLElementTagNameMap>(
target: K
): HTMLElementTagNameMap[K] | null;
function getElement<K extends keyof SVGElementTagNameMap>(
target: K
): SVGElementTagNameMap[K] | null;
function getElement(target: string): Element | null;
function getElement(target: Element): Element;
function getElement(target: Document): Document;
Expand Down
14 changes: 14 additions & 0 deletions addon-test-support/@ember/test-helpers/dom/find-all.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
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`).
/**
Find all elements matched by the given selector. Similar to calling
`querySelectorAll()` on the test root element, but returns an array instead
Expand All @@ -16,6 +20,16 @@ import { toArray } from '../ie-11-polyfills';
</caption>
find('#foo');
*/
export default function findAll<
K extends keyof (HTMLElementTagNameMap | SVGElementTagNameMap)
>(selector: K): Array<(HTMLElementTagNameMap | SVGElementTagNameMap)[K]>;
export default function findAll<K extends keyof HTMLElementTagNameMap>(
selector: K
): Array<HTMLElementTagNameMap[K]>;
export default function findAll<K extends keyof SVGElementTagNameMap>(
selector: K
): Array<SVGElementTagNameMap[K]>;
export default function findAll(selector: string): Element[];
export default function findAll(selector: string): Element[] {
if (!selector) {
throw new Error('Must pass a selector to `findAll`.');
Expand Down
11 changes: 11 additions & 0 deletions addon-test-support/@ember/test-helpers/dom/find.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import getElement from './-get-element';

// Derived from `querySelector` types.
/**
Find the first element matched by the given selector. Equivalent to calling
`querySelector()` on the test root element.
Expand All @@ -15,6 +16,16 @@ import getElement from './-get-element';
findAll('.my-selector');
*/
export default function find<
K extends keyof (HTMLElementTagNameMap | SVGElementTagNameMap)
>(selector: K): (HTMLElementTagNameMap | SVGElementTagNameMap)[K] | null;
export default function find<K extends keyof HTMLElementTagNameMap>(
selector: K
): HTMLElementTagNameMap[K] | null;
export default function find<K extends keyof SVGElementTagNameMap>(
selector: K
): SVGElementTagNameMap[K] | null;
export default function find(selector: string): Element | null;
export default function find(selector: string): Element | null {
if (!selector) {
throw new Error('Must pass a selector to `find`.');
Expand Down
1 change: 1 addition & 0 deletions addon-test-support/@ember/test-helpers/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ export {
default as setupRenderingContext,
render,
clearRender,
RenderingTestContext,
} from './setup-rendering-context';
export type { RenderingTestContext } from './setup-rendering-context';
export { default as rerender } from './rerender';
Expand Down
8 changes: 8 additions & 0 deletions type-tests/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,15 @@ expectTypeOf(typeIn).toEqualTypeOf<

// DOM Query Helpers
expectTypeOf(find).toEqualTypeOf<(selector: string) => Element | null>();
expectTypeOf(find('a')).toEqualTypeOf<HTMLAnchorElement | SVGAElement | null>();
expectTypeOf(find('div')).toEqualTypeOf<HTMLDivElement | null>();
expectTypeOf(find('circle')).toEqualTypeOf<SVGCircleElement | null>();
expectTypeOf(find('.corkscrew')).toEqualTypeOf<Element | null>();
expectTypeOf(findAll).toEqualTypeOf<(selector: string) => Array<Element>>();
expectTypeOf(findAll('a')).toEqualTypeOf<(HTMLAnchorElement | SVGAElement)[]>();
expectTypeOf(findAll('div')).toEqualTypeOf<HTMLDivElement[]>();
expectTypeOf(findAll('circle')).toEqualTypeOf<SVGCircleElement[]>();
expectTypeOf(findAll('.corkscrew')).toEqualTypeOf<Element[]>();
expectTypeOf(getRootElement).toEqualTypeOf<() => Element | Document>();

// Routing Helpers
Expand Down

0 comments on commit 5e87a54

Please sign in to comment.