{"version":3,"file":"testing.mjs","sources":["../../../../../../../src/material/table/testing/cell-harness.ts","../../../../../../../src/material/table/testing/row-harness.ts","../../../../../../../src/material/table/testing/table-harness.ts","../../../../../../../src/material/table/testing/public-api.ts","../../../../../../../src/material/table/testing/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {\n  ComponentHarnessConstructor,\n  ContentContainerComponentHarness,\n  HarnessPredicate,\n} from '@angular/cdk/testing';\nimport {CellHarnessFilters} from './table-harness-filters';\n\nexport abstract class _MatCellHarnessBase extends ContentContainerComponentHarness {\n  /** Gets the cell's text. */\n  async getText(): Promise<string> {\n    return (await this.host()).text();\n  }\n\n  /** Gets the name of the column that the cell belongs to. */\n  async getColumnName(): Promise<string> {\n    const host = await this.host();\n    const classAttribute = await host.getAttribute('class');\n\n    if (classAttribute) {\n      const prefix = 'mat-column-';\n      const name = classAttribute\n        .split(' ')\n        .map(c => c.trim())\n        .find(c => c.startsWith(prefix));\n\n      if (name) {\n        return name.split(prefix)[1];\n      }\n    }\n\n    throw Error('Could not determine column name of cell.');\n  }\n\n  protected static _getCellPredicate<T extends MatCellHarness>(\n    type: ComponentHarnessConstructor<T>,\n    options: CellHarnessFilters,\n  ): HarnessPredicate<T> {\n    return new HarnessPredicate(type, options)\n      .addOption('text', options.text, (harness, text) =>\n        HarnessPredicate.stringMatches(harness.getText(), text),\n      )\n      .addOption('columnName', options.columnName, (harness, name) =>\n        HarnessPredicate.stringMatches(harness.getColumnName(), name),\n      );\n  }\n}\n\n/** Harness for interacting with an MDC-based Angular Material table cell. */\nexport class MatCellHarness extends _MatCellHarnessBase {\n  /** The selector for the host element of a `MatCellHarness` instance. */\n  static hostSelector = '.mat-mdc-cell';\n\n  /**\n   * Gets a `HarnessPredicate` that can be used to search for a table cell with specific attributes.\n   * @param options Options for narrowing the search\n   * @return a `HarnessPredicate` configured with the given options.\n   */\n  static with(options: CellHarnessFilters = {}): HarnessPredicate<MatCellHarness> {\n    return _MatCellHarnessBase._getCellPredicate(this, options);\n  }\n}\n\n/** Harness for interacting with an MDC-based Angular Material table header cell. */\nexport class MatHeaderCellHarness extends _MatCellHarnessBase {\n  /** The selector for the host element of a `MatHeaderCellHarness` instance. */\n  static hostSelector = '.mat-mdc-header-cell';\n\n  /**\n   * Gets a `HarnessPredicate` that can be used to search for a table header cell with specific\n   * attributes.\n   * @param options Options for narrowing the search\n   * @return a `HarnessPredicate` configured with the given options.\n   */\n  static with(options: CellHarnessFilters = {}): HarnessPredicate<MatHeaderCellHarness> {\n    return _MatCellHarnessBase._getCellPredicate(this, options);\n  }\n}\n\n/** Harness for interacting with an MDC-based Angular Material table footer cell. */\nexport class MatFooterCellHarness extends _MatCellHarnessBase {\n  /** The selector for the host element of a `MatFooterCellHarness` instance. */\n  static hostSelector = '.mat-mdc-footer-cell';\n\n  /**\n   * Gets a `HarnessPredicate` that can be used to search for a table footer cell with specific\n   * attributes.\n   * @param options Options for narrowing the search\n   * @return a `HarnessPredicate` configured with the given options.\n   */\n  static with(options: CellHarnessFilters = {}): HarnessPredicate<MatFooterCellHarness> {\n    return _MatCellHarnessBase._getCellPredicate(this, options);\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {\n  ComponentHarness,\n  ComponentHarnessConstructor,\n  HarnessPredicate,\n  parallel,\n} from '@angular/cdk/testing';\nimport {\n  _MatCellHarnessBase,\n  MatCellHarness,\n  MatFooterCellHarness,\n  MatHeaderCellHarness,\n} from './cell-harness';\nimport {CellHarnessFilters, RowHarnessFilters} from './table-harness-filters';\n\n/** Text extracted from a table row organized by columns. */\nexport interface MatRowHarnessColumnsText {\n  [columnName: string]: string;\n}\n\nexport abstract class _MatRowHarnessBase<\n  CellType extends ComponentHarnessConstructor<Cell> & {\n    with: (options?: CellHarnessFilters) => HarnessPredicate<Cell>;\n  },\n  Cell extends _MatCellHarnessBase,\n> extends ComponentHarness {\n  protected abstract _cellHarness: CellType;\n\n  /** Gets a list of `MatCellHarness` for all cells in the row. */\n  async getCells(filter: CellHarnessFilters = {}): Promise<Cell[]> {\n    return this.locatorForAll(this._cellHarness.with(filter))();\n  }\n\n  /** Gets the text of the cells in the row. */\n  async getCellTextByIndex(filter: CellHarnessFilters = {}): Promise<string[]> {\n    const cells = await this.getCells(filter);\n    return parallel(() => cells.map(cell => cell.getText()));\n  }\n\n  /** Gets the text inside the row organized by columns. */\n  async getCellTextByColumnName(): Promise<MatRowHarnessColumnsText> {\n    const output: MatRowHarnessColumnsText = {};\n    const cells = await this.getCells();\n    const cellsData = await parallel(() =>\n      cells.map(cell => {\n        return parallel(() => [cell.getColumnName(), cell.getText()]);\n      }),\n    );\n    cellsData.forEach(([columnName, text]) => (output[columnName] = text));\n    return output;\n  }\n}\n\n/** Harness for interacting with an MDC-based Angular Material table row. */\nexport class MatRowHarness extends _MatRowHarnessBase<typeof MatCellHarness, MatCellHarness> {\n  /** The selector for the host element of a `MatRowHarness` instance. */\n  static hostSelector = '.mat-mdc-row';\n  protected _cellHarness = MatCellHarness;\n\n  /**\n   * Gets a `HarnessPredicate` that can be used to search for a table row with specific attributes.\n   * @param options Options for narrowing the search\n   * @return a `HarnessPredicate` configured with the given options.\n   */\n  static with<T extends MatRowHarness>(\n    this: ComponentHarnessConstructor<T>,\n    options: RowHarnessFilters = {},\n  ): HarnessPredicate<T> {\n    return new HarnessPredicate(this, options);\n  }\n}\n\n/** Harness for interacting with an MDC-based Angular Material table header row. */\nexport class MatHeaderRowHarness extends _MatRowHarnessBase<\n  typeof MatHeaderCellHarness,\n  MatHeaderCellHarness\n> {\n  /** The selector for the host element of a `MatHeaderRowHarness` instance. */\n  static hostSelector = '.mat-mdc-header-row';\n  protected _cellHarness = MatHeaderCellHarness;\n\n  /**\n   * Gets a `HarnessPredicate` that can be used to search for a table header row with specific\n   * attributes.\n   * @param options Options for narrowing the search\n   * @return a `HarnessPredicate` configured with the given options.\n   */\n  static with<T extends MatHeaderRowHarness>(\n    this: ComponentHarnessConstructor<T>,\n    options: RowHarnessFilters = {},\n  ): HarnessPredicate<T> {\n    return new HarnessPredicate(this, options);\n  }\n}\n\n/** Harness for interacting with an MDC-based Angular Material table footer row. */\nexport class MatFooterRowHarness extends _MatRowHarnessBase<\n  typeof MatFooterCellHarness,\n  MatFooterCellHarness\n> {\n  /** The selector for the host element of a `MatFooterRowHarness` instance. */\n  static hostSelector = '.mat-mdc-footer-row';\n  protected _cellHarness = MatFooterCellHarness;\n\n  /**\n   * Gets a `HarnessPredicate` that can be used to search for a table footer row cell with specific\n   * attributes.\n   * @param options Options for narrowing the search\n   * @return a `HarnessPredicate` configured with the given options.\n   */\n  static with<T extends MatFooterRowHarness>(\n    this: ComponentHarnessConstructor<T>,\n    options: RowHarnessFilters = {},\n  ): HarnessPredicate<T> {\n    return new HarnessPredicate(this, options);\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {\n  ComponentHarness,\n  ComponentHarnessConstructor,\n  ContentContainerComponentHarness,\n  HarnessPredicate,\n  parallel,\n} from '@angular/cdk/testing';\nimport {\n  MatFooterRowHarness,\n  MatHeaderRowHarness,\n  MatRowHarness,\n  MatRowHarnessColumnsText,\n} from './row-harness';\nimport {RowHarnessFilters, TableHarnessFilters} from './table-harness-filters';\n\n/** Text extracted from a table organized by columns. */\nexport interface MatTableHarnessColumnsText {\n  [columnName: string]: {\n    text: string[];\n    headerText: string[];\n    footerText: string[];\n  };\n}\n\ninterface RowBase extends ComponentHarness {\n  getCellTextByColumnName(): Promise<MatRowHarnessColumnsText>;\n  getCellTextByIndex(): Promise<string[]>;\n}\n\nexport abstract class _MatTableHarnessBase<\n  HeaderRowType extends ComponentHarnessConstructor<HeaderRow> & {\n    with: (options?: RowHarnessFilters) => HarnessPredicate<HeaderRow>;\n  },\n  HeaderRow extends RowBase,\n  RowType extends ComponentHarnessConstructor<Row> & {\n    with: (options?: RowHarnessFilters) => HarnessPredicate<Row>;\n  },\n  Row extends RowBase,\n  FooterRowType extends ComponentHarnessConstructor<FooterRow> & {\n    with: (options?: RowHarnessFilters) => HarnessPredicate<FooterRow>;\n  },\n  FooterRow extends RowBase,\n> extends ContentContainerComponentHarness<string> {\n  protected abstract _headerRowHarness: HeaderRowType;\n  protected abstract _rowHarness: RowType;\n  protected abstract _footerRowHarness: FooterRowType;\n\n  /** Gets all of the header rows in a table. */\n  async getHeaderRows(filter: RowHarnessFilters = {}): Promise<HeaderRow[]> {\n    return this.locatorForAll(this._headerRowHarness.with(filter))();\n  }\n\n  /** Gets all of the regular data rows in a table. */\n  async getRows(filter: RowHarnessFilters = {}): Promise<Row[]> {\n    return this.locatorForAll(this._rowHarness.with(filter))();\n  }\n\n  /** Gets all of the footer rows in a table. */\n  async getFooterRows(filter: RowHarnessFilters = {}): Promise<FooterRow[]> {\n    return this.locatorForAll(this._footerRowHarness.with(filter))();\n  }\n\n  /** Gets the text inside the entire table organized by rows. */\n  async getCellTextByIndex(): Promise<string[][]> {\n    const rows = await this.getRows();\n    return parallel(() => rows.map(row => row.getCellTextByIndex()));\n  }\n\n  /** Gets the text inside the entire table organized by columns. */\n  async getCellTextByColumnName(): Promise<MatTableHarnessColumnsText> {\n    const [headerRows, footerRows, dataRows] = await parallel(() => [\n      this.getHeaderRows(),\n      this.getFooterRows(),\n      this.getRows(),\n    ]);\n\n    const text: MatTableHarnessColumnsText = {};\n    const [headerData, footerData, rowsData] = await parallel(() => [\n      parallel(() => headerRows.map(row => row.getCellTextByColumnName())),\n      parallel(() => footerRows.map(row => row.getCellTextByColumnName())),\n      parallel(() => dataRows.map(row => row.getCellTextByColumnName())),\n    ]);\n\n    rowsData.forEach(data => {\n      Object.keys(data).forEach(columnName => {\n        const cellText = data[columnName];\n\n        if (!text[columnName]) {\n          text[columnName] = {\n            headerText: getCellTextsByColumn(headerData, columnName),\n            footerText: getCellTextsByColumn(footerData, columnName),\n            text: [],\n          };\n        }\n\n        text[columnName].text.push(cellText);\n      });\n    });\n\n    return text;\n  }\n}\n\n/** Harness for interacting with an MDC-based mat-table in tests. */\nexport class MatTableHarness extends _MatTableHarnessBase<\n  typeof MatHeaderRowHarness,\n  MatHeaderRowHarness,\n  typeof MatRowHarness,\n  MatRowHarness,\n  typeof MatFooterRowHarness,\n  MatFooterRowHarness\n> {\n  /** The selector for the host element of a `MatTableHarness` instance. */\n  static hostSelector = '.mat-mdc-table';\n  protected _headerRowHarness = MatHeaderRowHarness;\n  protected _rowHarness = MatRowHarness;\n  protected _footerRowHarness = MatFooterRowHarness;\n\n  /**\n   * Gets a `HarnessPredicate` that can be used to search for a table with specific attributes.\n   * @param options Options for narrowing the search\n   * @return a `HarnessPredicate` configured with the given options.\n   */\n  static with<T extends MatTableHarness>(\n    this: ComponentHarnessConstructor<T>,\n    options: TableHarnessFilters = {},\n  ): HarnessPredicate<T> {\n    return new HarnessPredicate(this, options);\n  }\n}\n\n/** Extracts the text of cells only under a particular column. */\nfunction getCellTextsByColumn(rowsData: MatRowHarnessColumnsText[], column: string): string[] {\n  const columnTexts: string[] = [];\n\n  rowsData.forEach(data => {\n    Object.keys(data).forEach(columnName => {\n      if (columnName === column) {\n        columnTexts.push(data[columnName]);\n      }\n    });\n  });\n\n  return columnTexts;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './table-harness';\nexport * from './row-harness';\nexport * from './cell-harness';\nexport * from './table-harness-filters';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}