Skip to content

Commit c9692c8

Browse files
devversionannieyw
authored andcommitted
refactor(material/list): make test harness base classes abstract and cleanup
Makes base classes for the list and item harnesses abstract based on review feedback for the equivalent MDC list harness. Also cleans up logic for retrieving options of a selection list. The current logic seemed to use a non-idiomatic way of flattening items. We switch that to an idiomatic reduce which is more readable.
1 parent 5362f99 commit c9692c8

File tree

6 files changed

+35
-14
lines changed

6 files changed

+35
-14
lines changed

src/material-experimental/mdc-list/testing/list-harness.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,5 @@ describe('MDC-based list harnesses', () => {
1515
runHarnessTests(
1616
MatListModule, MatListHarness as any, MatActionListHarness as any, MatNavListHarness as any,
1717
MatSelectionListHarness as any, MatListItemHarnessBase as any, MatSubheaderHarness as any,
18-
MatDividerHarness);
18+
MatDividerHarness, {content: MatListItemSection.CONTENT});
1919
});

src/material/list/testing/list-harness-base.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ export interface ListSection<I> {
3131
* @template F The filter type used filter list item harness of type `C`.
3232
* @docs-private
3333
*/
34-
export class MatListHarnessBase
34+
export abstract class MatListHarnessBase
3535
<
3636
T extends (ComponentHarnessConstructor<C> & {with: (options?: F) => HarnessPredicate<C>}),
3737
C extends ComponentHarness,

src/material/list/testing/list-harness.spec.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,16 @@ import {MatActionListHarness} from './action-list-harness';
44
import {MatListHarness} from './list-harness';
55
import {MatNavListHarness} from './nav-list-harness';
66
import {MatSelectionListHarness} from './selection-list-harness';
7-
import {MatListItemHarnessBase, MatSubheaderHarness} from './list-item-harness-base';
7+
import {
8+
MatListItemHarnessBase,
9+
MatListItemSection,
10+
MatSubheaderHarness
11+
} from './list-item-harness-base';
812
import {runHarnessTests} from './shared.spec';
913

1014
describe('Non-MDC-based list harnesses', () => {
1115
runHarnessTests(
1216
MatListModule, MatListHarness, MatActionListHarness, MatNavListHarness,
13-
MatSelectionListHarness, MatListItemHarnessBase, MatSubheaderHarness, MatDividerHarness);
17+
MatSelectionListHarness, MatListItemHarnessBase, MatSubheaderHarness, MatDividerHarness,
18+
{content: MatListItemSection.CONTENT});
1419
});

src/material/list/testing/list-item-harness-base.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,9 @@ export const enum MatListItemSection {
5959
* Shared behavior among the harnesses for the various `MatListItem` flavors.
6060
* @docs-private
6161
*/
62-
export class MatListItemHarnessBase extends ContentContainerComponentHarness<MatListItemSection> {
62+
export abstract class MatListItemHarnessBase
63+
extends ContentContainerComponentHarness<MatListItemSection> {
64+
6365
private _lines = this.locatorForAll('.mat-line');
6466
private _avatar = this.locatorForOptional(avatarSelector);
6567
private _icon = this.locatorForOptional(iconSelector);

src/material/list/testing/selection-list-harness.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,9 @@ export class MatSelectionListHarness extends MatListHarnessBase<
6262
if (!filters.length) {
6363
return this.getItems();
6464
}
65-
return ([] as MatListOptionHarness[]).concat(...await Promise.all(
66-
filters.map(filter => this.locatorForAll(MatListOptionHarness.with(filter))())));
65+
const matches = await Promise.all(
66+
filters.map(filter => this.locatorForAll(MatListOptionHarness.with(filter))()));
67+
return matches.reduce((result, current) => [...result, ...current], []);
6768
}
6869
}
6970

src/material/list/testing/shared.spec.ts

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,11 @@ import {MatActionListHarness, MatActionListItemHarness} from './action-list-harn
1313
import {MatListHarness, MatListItemHarness} from './list-harness';
1414
import {MatListHarnessBase} from './list-harness-base';
1515
import {BaseListItemHarnessFilters} from './list-harness-filters';
16-
import {MatListItemHarnessBase, MatSubheaderHarness} from './list-item-harness-base';
16+
import {
17+
MatListItemHarnessBase,
18+
MatListItemSection,
19+
MatSubheaderHarness
20+
} from './list-item-harness-base';
1721
import {MatNavListHarness, MatNavListItemHarness} from './nav-list-harness';
1822
import {MatListOptionHarness, MatSelectionListHarness} from './selection-list-harness';
1923

@@ -33,7 +37,8 @@ function runBaseListFunctionalityTests<
3337
},
3438
listItemHarnessBase: typeof MatListItemHarnessBase,
3539
subheaderHarness: typeof MatSubheaderHarness,
36-
dividerHarness: typeof MatDividerHarness) {
40+
dividerHarness: typeof MatDividerHarness,
41+
selectors: {content: string}) {
3742
describe('base list functionality', () => {
3843
let simpleListHarness: L;
3944
let emptyListHarness: L;
@@ -183,6 +188,13 @@ function runBaseListFunctionalityTests<
183188
const childHarness = await items[1].getHarness(TestItemContentHarness);
184189
expect(childHarness).not.toBeNull();
185190
});
191+
192+
it('should be able to get content harness loader of list item', async () => {
193+
const items = await simpleListHarness.getItems();
194+
expect(items.length).toBe(3);
195+
const loader = await items[1].getChildLoader(selectors.content as MatListItemSection);
196+
await expectAsync(loader.getHarness(TestItemContentHarness)).toBeResolved();
197+
});
186198
});
187199
}
188200

@@ -199,17 +211,18 @@ export function runHarnessTests(
199211
selectionListHarness: typeof MatSelectionListHarness,
200212
listItemHarnessBase: typeof MatListItemHarnessBase,
201213
subheaderHarness: typeof MatSubheaderHarness,
202-
dividerHarness: typeof MatDividerHarness) {
214+
dividerHarness: typeof MatDividerHarness,
215+
selectors: {content: string}) {
203216
describe('MatListHarness', () => {
204217
runBaseListFunctionalityTests<MatListHarness, MatListItemHarness>(
205218
ListHarnessTest, listModule, listHarness, listItemHarnessBase, subheaderHarness,
206-
dividerHarness);
219+
dividerHarness, selectors);
207220
});
208221

209222
describe('MatActionListHarness', () => {
210223
runBaseListFunctionalityTests<MatActionListHarness, MatActionListItemHarness>(
211224
ActionListHarnessTest, listModule, actionListHarness, listItemHarnessBase, subheaderHarness,
212-
dividerHarness);
225+
dividerHarness, selectors);
213226

214227
describe('additional functionality', () => {
215228
let harness: MatActionListHarness;
@@ -244,7 +257,7 @@ export function runHarnessTests(
244257
describe('MatNavListHarness', () => {
245258
runBaseListFunctionalityTests<MatNavListHarness, MatNavListItemHarness>(
246259
NavListHarnessTest, listModule, navListHarness, listItemHarnessBase, subheaderHarness,
247-
dividerHarness);
260+
dividerHarness, selectors);
248261

249262
describe('additional functionality', () => {
250263
let harness: MatNavListHarness;
@@ -290,7 +303,7 @@ export function runHarnessTests(
290303
describe('MatSelectionListHarness', () => {
291304
runBaseListFunctionalityTests<MatSelectionListHarness, MatListOptionHarness>(
292305
SelectionListHarnessTest, listModule, selectionListHarness, listItemHarnessBase,
293-
subheaderHarness, dividerHarness);
306+
subheaderHarness, dividerHarness, selectors);
294307

295308
describe('additional functionality', () => {
296309
let harness: MatSelectionListHarness;

0 commit comments

Comments
 (0)