Skip to content

fix(cdk/testing): require at least one argument locator functions #23384

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 12 additions & 12 deletions src/cdk/testing/component-harness.ts
Original file line number Diff line number Diff line change
Expand Up @@ -137,8 +137,8 @@ export interface LocatorFactory {
* - `await lf.locatorFor('div', DivHarness)()` gets a `TestElement` instance for `#d1`
* - `await lf.locatorFor('span')()` throws because the `Promise` rejects.
*/
locatorFor<T extends (HarnessQuery<any> | string)[]>(...queries: T):
AsyncFactoryFn<LocatorFnResult<T>>;
locatorFor<T extends (HarnessQuery<any> | string)>(...queries: [T, ...T[]]):
AsyncFactoryFn<LocatorFnResult<T[]>>;

/**
* Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance
Expand All @@ -161,8 +161,8 @@ export interface LocatorFactory {
* - `await lf.locatorForOptional('div', DivHarness)()` gets a `TestElement` instance for `#d1`
* - `await lf.locatorForOptional('span')()` gets `null`.
*/
locatorForOptional<T extends (HarnessQuery<any> | string)[]>(...queries: T):
AsyncFactoryFn<LocatorFnResult<T> | null>;
locatorForOptional<T extends (HarnessQuery<any> | string)>(...queries: [T, ...T[]]):
AsyncFactoryFn<LocatorFnResult<T[]> | null>;

/**
* Creates an asynchronous locator function that can be used to find `ComponentHarness` instances
Expand Down Expand Up @@ -200,8 +200,8 @@ export interface LocatorFactory {
* ]`
* - `await lf.locatorForAll('span')()` gets `[]`.
*/
locatorForAll<T extends (HarnessQuery<any> | string)[]>(...queries: T):
AsyncFactoryFn<LocatorFnResult<T>[]>;
locatorForAll<T extends (HarnessQuery<any> | string)>(...queries: [T, ...T[]]):
AsyncFactoryFn<LocatorFnResult<T[]>[]>;

/** @return A `HarnessLoader` rooted at the root element of this `LocatorFactory`. */
rootHarnessLoader(): Promise<HarnessLoader>;
Expand Down Expand Up @@ -286,8 +286,8 @@ export abstract class ComponentHarness {
* - `await ch.locatorFor('div', DivHarness)()` gets a `TestElement` instance for `#d1`
* - `await ch.locatorFor('span')()` throws because the `Promise` rejects.
*/
protected locatorFor<T extends (HarnessQuery<any> | string)[]>(...queries: T):
AsyncFactoryFn<LocatorFnResult<T>> {
protected locatorFor<T extends (HarnessQuery<any> | string)>(...queries: [T, ...T[]]):
AsyncFactoryFn<LocatorFnResult<T[]>> {
return this.locatorFactory.locatorFor(...queries);
}

Expand All @@ -312,8 +312,8 @@ export abstract class ComponentHarness {
* - `await ch.locatorForOptional('div', DivHarness)()` gets a `TestElement` instance for `#d1`
* - `await ch.locatorForOptional('span')()` gets `null`.
*/
protected locatorForOptional<T extends (HarnessQuery<any> | string)[]>(...queries: T):
AsyncFactoryFn<LocatorFnResult<T> | null> {
protected locatorForOptional<T extends (HarnessQuery<any> | string)>(...queries: [T, ...T[]]):
AsyncFactoryFn<LocatorFnResult<T[]> | null> {
return this.locatorFactory.locatorForOptional(...queries);
}

Expand Down Expand Up @@ -353,8 +353,8 @@ export abstract class ComponentHarness {
* ]`
* - `await ch.locatorForAll('span')()` gets `[]`.
*/
protected locatorForAll<T extends (HarnessQuery<any> | string)[]>(...queries: T):
AsyncFactoryFn<LocatorFnResult<T>[]> {
protected locatorForAll<T extends (HarnessQuery<any> | string)>(...queries: [T, ...T[]]):
AsyncFactoryFn<LocatorFnResult<T[]>[]> {
return this.locatorFactory.locatorForAll(...queries);
}

Expand Down
12 changes: 6 additions & 6 deletions src/cdk/testing/harness-environment.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,22 +57,22 @@ export abstract class HarnessEnvironment<E> implements HarnessLoader, LocatorFac
}

// Implemented as part of the `LocatorFactory` interface.
locatorFor<T extends (HarnessQuery<any> | string)[]>(...queries: T):
AsyncFactoryFn<LocatorFnResult<T>> {
locatorFor<T extends (HarnessQuery<any> | string)>(...queries: [T, ...T[]]):
AsyncFactoryFn<LocatorFnResult<T[]>> {
return () => _assertResultFound(
this._getAllHarnessesAndTestElements(queries),
_getDescriptionForLocatorForQueries(queries));
}

// Implemented as part of the `LocatorFactory` interface.
locatorForOptional<T extends (HarnessQuery<any> | string)[]>(...queries: T):
AsyncFactoryFn<LocatorFnResult<T> | null> {
locatorForOptional<T extends (HarnessQuery<any> | string)>(...queries: [T, ...T[]]):
AsyncFactoryFn<LocatorFnResult<T[]> | null> {
return async () => (await this._getAllHarnessesAndTestElements(queries))[0] || null;
}

// Implemented as part of the `LocatorFactory` interface.
locatorForAll<T extends (HarnessQuery<any> | string)[]>(...queries: T):
AsyncFactoryFn<LocatorFnResult<T>[]> {
locatorForAll<T extends (HarnessQuery<any> | string)>(...queries: [T, ...T[]]):
AsyncFactoryFn<LocatorFnResult<T[]>[]> {
return () => this._getAllHarnessesAndTestElements(queries);
}

Expand Down
18 changes: 9 additions & 9 deletions tools/public_api_guard/cdk/testing.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,9 @@ export abstract class ComponentHarness {
host(): Promise<TestElement>;
// (undocumented)
protected readonly locatorFactory: LocatorFactory;
protected locatorFor<T extends (HarnessQuery<any> | string)[]>(...queries: T): AsyncFactoryFn<LocatorFnResult<T>>;
protected locatorForAll<T extends (HarnessQuery<any> | string)[]>(...queries: T): AsyncFactoryFn<LocatorFnResult<T>[]>;
protected locatorForOptional<T extends (HarnessQuery<any> | string)[]>(...queries: T): AsyncFactoryFn<LocatorFnResult<T> | null>;
protected locatorFor<T extends (HarnessQuery<any> | string)>(...queries: [T, ...T[]]): AsyncFactoryFn<LocatorFnResult<T[]>>;
protected locatorForAll<T extends (HarnessQuery<any> | string)>(...queries: [T, ...T[]]): AsyncFactoryFn<LocatorFnResult<T[]>[]>;
protected locatorForOptional<T extends (HarnessQuery<any> | string)>(...queries: [T, ...T[]]): AsyncFactoryFn<LocatorFnResult<T[]> | null>;
protected waitForTasksOutsideAngular(): Promise<void>;
}

Expand Down Expand Up @@ -109,11 +109,11 @@ export abstract class HarnessEnvironment<E> implements HarnessLoader, LocatorFac
// (undocumented)
harnessLoaderForOptional(selector: string): Promise<HarnessLoader | null>;
// (undocumented)
locatorFor<T extends (HarnessQuery<any> | string)[]>(...queries: T): AsyncFactoryFn<LocatorFnResult<T>>;
locatorFor<T extends (HarnessQuery<any> | string)>(...queries: [T, ...T[]]): AsyncFactoryFn<LocatorFnResult<T[]>>;
// (undocumented)
locatorForAll<T extends (HarnessQuery<any> | string)[]>(...queries: T): AsyncFactoryFn<LocatorFnResult<T>[]>;
locatorForAll<T extends (HarnessQuery<any> | string)>(...queries: [T, ...T[]]): AsyncFactoryFn<LocatorFnResult<T[]>[]>;
// (undocumented)
locatorForOptional<T extends (HarnessQuery<any> | string)[]>(...queries: T): AsyncFactoryFn<LocatorFnResult<T> | null>;
locatorForOptional<T extends (HarnessQuery<any> | string)>(...queries: [T, ...T[]]): AsyncFactoryFn<LocatorFnResult<T[]> | null>;
// (undocumented)
protected rawRootElement: E;
// (undocumented)
Expand Down Expand Up @@ -156,9 +156,9 @@ export interface LocatorFactory {
harnessLoaderFor(selector: string): Promise<HarnessLoader>;
harnessLoaderForAll(selector: string): Promise<HarnessLoader[]>;
harnessLoaderForOptional(selector: string): Promise<HarnessLoader | null>;
locatorFor<T extends (HarnessQuery<any> | string)[]>(...queries: T): AsyncFactoryFn<LocatorFnResult<T>>;
locatorForAll<T extends (HarnessQuery<any> | string)[]>(...queries: T): AsyncFactoryFn<LocatorFnResult<T>[]>;
locatorForOptional<T extends (HarnessQuery<any> | string)[]>(...queries: T): AsyncFactoryFn<LocatorFnResult<T> | null>;
locatorFor<T extends (HarnessQuery<any> | string)>(...queries: [T, ...T[]]): AsyncFactoryFn<LocatorFnResult<T[]>>;
locatorForAll<T extends (HarnessQuery<any> | string)>(...queries: [T, ...T[]]): AsyncFactoryFn<LocatorFnResult<T[]>[]>;
locatorForOptional<T extends (HarnessQuery<any> | string)>(...queries: [T, ...T[]]): AsyncFactoryFn<LocatorFnResult<T[]> | null>;
rootElement: TestElement;
rootHarnessLoader(): Promise<HarnessLoader>;
waitForTasksOutsideAngular(): Promise<void>;
Expand Down