Skip to content

Commit 83a7eaa

Browse files
committed
refactor(material-experimental/mdc-paginator): de-duplicate test harness logic
Changes the MDC-based `MatPaginatorHarness` to extend the non-MDC version since the logic is identical, apart from a few selectors.
1 parent 4b16025 commit 83a7eaa

File tree

6 files changed

+31
-101
lines changed

6 files changed

+31
-101
lines changed

src/material-experimental/mdc-paginator/testing/BUILD.bazel

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ ts_library(
1010
),
1111
module_name = "@angular/material-experimental/mdc-paginator/testing",
1212
deps = [
13-
"//src/cdk/coercion",
1413
"//src/cdk/testing",
1514
"//src/material-experimental/mdc-select/testing",
1615
"//src/material/paginator/testing",

src/material-experimental/mdc-paginator/testing/paginator-harness-filters.ts

Lines changed: 0 additions & 13 deletions
This file was deleted.

src/material-experimental/mdc-paginator/testing/paginator-harness.ts

Lines changed: 16 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -6,98 +6,35 @@
66
* found in the LICENSE file at https://angular.io/license
77
*/
88

9-
import {ComponentHarness, HarnessPredicate} from '@angular/cdk/testing';
9+
import {HarnessPredicate} from '@angular/cdk/testing';
1010
import {MatSelectHarness} from '@angular/material-experimental/mdc-select/testing';
11-
import {coerceNumberProperty} from '@angular/cdk/coercion';
12-
import {PaginatorHarnessFilters} from './paginator-harness-filters';
11+
import {
12+
PaginatorHarnessFilters,
13+
MatPaginatorHarness as NonMdcMatPaginatorHarness,
14+
} from '@angular/material/paginator/testing';
1315

1416

1517
/** Harness for interacting with an MDC-based mat-paginator in tests. */
16-
export class MatPaginatorHarness extends ComponentHarness {
18+
export class MatPaginatorHarness extends NonMdcMatPaginatorHarness {
1719
/** Selector used to find paginator instances. */
1820
static hostSelector = '.mat-mdc-paginator';
19-
private _nextButton = this.locatorFor('.mat-mdc-paginator-navigation-next');
20-
private _previousButton = this.locatorFor('.mat-mdc-paginator-navigation-previous');
21-
private _firstPageButton = this.locatorForOptional('.mat-mdc-paginator-navigation-first');
22-
private _lastPageButton = this.locatorForOptional('.mat-mdc-paginator-navigation-last');
23-
private _select = this.locatorForOptional(MatSelectHarness.with({
21+
protected _nextButton = this.locatorFor('.mat-mdc-paginator-navigation-next');
22+
protected _previousButton = this.locatorFor('.mat-mdc-paginator-navigation-previous');
23+
protected _firstPageButton = this.locatorForOptional('.mat-mdc-paginator-navigation-first');
24+
protected _lastPageButton = this.locatorForOptional('.mat-mdc-paginator-navigation-last');
25+
protected _select = this.locatorForOptional(MatSelectHarness.with({
2426
ancestor: '.mat-mdc-paginator-page-size'
25-
}));
26-
private _pageSizeFallback = this.locatorFor('.mat-mdc-paginator-page-size-value');
27-
private _rangeLabel = this.locatorFor('.mat-mdc-paginator-range-label');
27+
})) as any; // TODO(crisbeto): should be able to remove the `as any` after #21460 is merged in.
28+
protected _pageSizeFallback = this.locatorFor('.mat-mdc-paginator-page-size-value');
29+
protected _rangeLabel = this.locatorFor('.mat-mdc-paginator-range-label');
2830

2931
/**
3032
* Gets a `HarnessPredicate` that can be used to search for a `MatPaginatorHarness` that meets
3133
* certain criteria.
3234
* @param options Options for filtering which paginator instances are considered a match.
3335
* @return a `HarnessPredicate` configured with the given options.
3436
*/
35-
static with(options: PaginatorHarnessFilters = {}): HarnessPredicate<MatPaginatorHarness> {
36-
return new HarnessPredicate(MatPaginatorHarness, options);
37-
}
38-
39-
/** Goes to the next page in the paginator. */
40-
async goToNextPage(): Promise<void> {
41-
return (await this._nextButton()).click();
42-
}
43-
44-
/** Goes to the previous page in the paginator. */
45-
async goToPreviousPage(): Promise<void> {
46-
return (await this._previousButton()).click();
47-
}
48-
49-
/** Goes to the first page in the paginator. */
50-
async goToFirstPage(): Promise<void> {
51-
const button = await this._firstPageButton();
52-
53-
// The first page button isn't enabled by default so we need to check for it.
54-
if (!button) {
55-
throw Error('Could not find first page button inside paginator. ' +
56-
'Make sure that `showFirstLastButtons` is enabled.');
57-
}
58-
59-
return button.click();
60-
}
61-
62-
/** Goes to the last page in the paginator. */
63-
async goToLastPage(): Promise<void> {
64-
const button = await this._lastPageButton();
65-
66-
// The last page button isn't enabled by default so we need to check for it.
67-
if (!button) {
68-
throw Error('Could not find last page button inside paginator. ' +
69-
'Make sure that `showFirstLastButtons` is enabled.');
70-
}
71-
72-
return button.click();
73-
}
74-
75-
/**
76-
* Sets the page size of the paginator.
77-
* @param size Page size that should be select.
78-
*/
79-
async setPageSize(size: number): Promise<void> {
80-
const select = await this._select();
81-
82-
// The select is only available if the `pageSizeOptions` are
83-
// set to an array with more than one item.
84-
if (!select) {
85-
throw Error('Cannot find page size selector in paginator. ' +
86-
'Make sure that the `pageSizeOptions` have been configured.');
87-
}
88-
89-
return select.clickOptions({text: `${size}`});
90-
}
91-
92-
/** Gets the page size of the paginator. */
93-
async getPageSize(): Promise<number> {
94-
const select = await this._select();
95-
const value = select ? select.getValueText() : (await this._pageSizeFallback()).text();
96-
return coerceNumberProperty(await value);
97-
}
98-
99-
/** Gets the text of the range labe of the paginator. */
100-
async getRangeLabel(): Promise<string> {
101-
return (await this._rangeLabel()).text();
37+
static with(options: PaginatorHarnessFilters = {}): HarnessPredicate<NonMdcMatPaginatorHarness> {
38+
return new HarnessPredicate<NonMdcMatPaginatorHarness>(MatPaginatorHarness, options);
10239
}
10340
}

src/material-experimental/mdc-paginator/testing/public-api.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@
77
*/
88

99
export * from './paginator-harness';
10-
export * from './paginator-harness-filters';
10+
export {PaginatorHarnessFilters} from '@angular/material/paginator/testing';

src/material/paginator/testing/paginator-harness.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,15 @@ import {PaginatorHarnessFilters} from './paginator-harness-filters';
1616
export class MatPaginatorHarness extends ComponentHarness {
1717
/** Selector used to find paginator instances. */
1818
static hostSelector = '.mat-paginator';
19-
private _nextButton = this.locatorFor('.mat-paginator-navigation-next');
20-
private _previousButton = this.locatorFor('.mat-paginator-navigation-previous');
21-
private _firstPageButton = this.locatorForOptional('.mat-paginator-navigation-first');
22-
private _lastPageButton = this.locatorForOptional('.mat-paginator-navigation-last');
23-
private _select = this.locatorForOptional(MatSelectHarness.with({
19+
protected _nextButton = this.locatorFor('.mat-paginator-navigation-next');
20+
protected _previousButton = this.locatorFor('.mat-paginator-navigation-previous');
21+
protected _firstPageButton = this.locatorForOptional('.mat-paginator-navigation-first');
22+
protected _lastPageButton = this.locatorForOptional('.mat-paginator-navigation-last');
23+
protected _select = this.locatorForOptional(MatSelectHarness.with({
2424
ancestor: '.mat-paginator-page-size'
2525
}));
26-
private _pageSizeFallback = this.locatorFor('.mat-paginator-page-size-value');
27-
private _rangeLabel = this.locatorFor('.mat-paginator-range-label');
26+
protected _pageSizeFallback = this.locatorFor('.mat-paginator-page-size-value');
27+
protected _rangeLabel = this.locatorFor('.mat-paginator-range-label');
2828

2929
/**
3030
* Gets a `HarnessPredicate` that can be used to search for a `MatPaginatorHarness` that meets

tools/public_api_guard/material/paginator/testing.d.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,11 @@
11
export declare class MatPaginatorHarness extends ComponentHarness {
2+
protected _firstPageButton: import("@angular/cdk/testing").AsyncFactoryFn<import("@angular/cdk/testing").TestElement | null>;
3+
protected _lastPageButton: import("@angular/cdk/testing").AsyncFactoryFn<import("@angular/cdk/testing").TestElement | null>;
4+
protected _nextButton: import("@angular/cdk/testing").AsyncFactoryFn<import("@angular/cdk/testing").TestElement>;
5+
protected _pageSizeFallback: import("@angular/cdk/testing").AsyncFactoryFn<import("@angular/cdk/testing").TestElement>;
6+
protected _previousButton: import("@angular/cdk/testing").AsyncFactoryFn<import("@angular/cdk/testing").TestElement>;
7+
protected _rangeLabel: import("@angular/cdk/testing").AsyncFactoryFn<import("@angular/cdk/testing").TestElement>;
8+
protected _select: import("@angular/cdk/testing").AsyncFactoryFn<MatSelectHarness | null>;
29
getPageSize(): Promise<number>;
310
getRangeLabel(): Promise<string>;
411
goToFirstPage(): Promise<void>;

0 commit comments

Comments
 (0)