From 808370e0aa4871e07d07b1faebf32b71c2c73aef Mon Sep 17 00:00:00 2001 From: Andrew Seguin Date: Tue, 6 Aug 2019 11:50:59 -0700 Subject: [PATCH] feat(material-experimental): add progress bar test harness skeleton (#16619) * feat(material-experimental): add progress bar test harness skeleton * use number coercion --- .github/CODEOWNERS | 1 + .../mdc-progress-bar/BUILD.bazel | 30 ++++++++++ .../harness/progress-bar-harness.spec.ts | 60 +++++++++++++++++++ .../harness/progress-bar-harness.ts | 30 ++++++++++ 4 files changed, 121 insertions(+) create mode 100644 src/material-experimental/mdc-progress-bar/BUILD.bazel create mode 100644 src/material-experimental/mdc-progress-bar/harness/progress-bar-harness.spec.ts create mode 100644 src/material-experimental/mdc-progress-bar/harness/progress-bar-harness.ts diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index c31d5bd6660..799fe51e8ce 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -94,6 +94,7 @@ /src/material-experimental/mdc-chips/** @mmalerba /src/material-experimental/mdc-helpers/** @mmalerba /src/material-experimental/mdc-menu/** @crisbeto +/src/material-experimental/mdc-progress-bar/** @andrewseguin # Note to implementer: please repossess /src/material-experimental/mdc-radio/** @mmalerba /src/material-experimental/mdc-slide-toggle/** @crisbeto diff --git a/src/material-experimental/mdc-progress-bar/BUILD.bazel b/src/material-experimental/mdc-progress-bar/BUILD.bazel new file mode 100644 index 00000000000..79c3513fdac --- /dev/null +++ b/src/material-experimental/mdc-progress-bar/BUILD.bazel @@ -0,0 +1,30 @@ +package(default_visibility = ["//visibility:public"]) + +load("//tools:defaults.bzl", "ng_test_library", "ts_library") + +ts_library( + name = "harness", + srcs = glob( + ["harness/**/*.ts"], + exclude = ["**/*.spec.ts"], + ), + deps = [ + "//src/cdk-experimental/testing", + "//src/cdk/coercion", + ], +) + +ng_test_library( + name = "progress_bar_tests_lib", + srcs = glob( + ["**/*.spec.ts"], + ), + deps = [ + ":harness", + "//src/cdk-experimental/testing", + "//src/cdk-experimental/testing/testbed", + "//src/cdk/coercion", + "//src/cdk/testing", + "//src/material/progress-bar", + ], +) diff --git a/src/material-experimental/mdc-progress-bar/harness/progress-bar-harness.spec.ts b/src/material-experimental/mdc-progress-bar/harness/progress-bar-harness.spec.ts new file mode 100644 index 00000000000..d8b520061cf --- /dev/null +++ b/src/material-experimental/mdc-progress-bar/harness/progress-bar-harness.spec.ts @@ -0,0 +1,60 @@ +import {HarnessLoader} from '@angular/cdk-experimental/testing'; +import {TestbedHarnessEnvironment} from '@angular/cdk-experimental/testing/testbed'; +import {Component} from '@angular/core'; +import {ComponentFixture, TestBed} from '@angular/core/testing'; +import {MatProgressBarModule} from '@angular/material/progress-bar'; + +import {MatProgressBarHarness} from './progress-bar-harness'; + +let fixture: ComponentFixture; +let loader: HarnessLoader; +let progressBarHarness: typeof MatProgressBarHarness; + +describe('MatProgressBarHarness', () => { + beforeEach(async () => { + await TestBed + .configureTestingModule({ + imports: [MatProgressBarModule], + declarations: [ProgressBarHarnessTest], + }) + .compileComponents(); + + fixture = TestBed.createComponent(ProgressBarHarnessTest); + fixture.detectChanges(); + loader = TestbedHarnessEnvironment.loader(fixture); + progressBarHarness = MatProgressBarHarness; + }); + + runTests(); +}); + +function runTests() { + it('should load all progress bar harnesses', async () => { + const progressBars = await loader.getAllHarnesses(progressBarHarness); + expect(progressBars.length).toBe(2); + }); + + it('should get the value', async () => { + fixture.componentInstance.value = 50; + const [determinate, indeterminate] = await loader.getAllHarnesses(progressBarHarness); + expect(await determinate.getValue()).toBe(50); + expect(await indeterminate.getValue()).toBe(null); + }); + + it('should get the mode', async () => { + const [determinate, indeterminate] = await loader.getAllHarnesses(progressBarHarness); + expect(await determinate.getMode()).toBe('determinate'); + expect(await indeterminate.getMode()).toBe('indeterminate'); + }); +} + +// TODO: Add and test progress bars with modes `buffer` and `query`. +@Component({ + template: ` + + + ` +}) +class ProgressBarHarnessTest { + value: number; +} diff --git a/src/material-experimental/mdc-progress-bar/harness/progress-bar-harness.ts b/src/material-experimental/mdc-progress-bar/harness/progress-bar-harness.ts new file mode 100644 index 00000000000..d60a5cc7d91 --- /dev/null +++ b/src/material-experimental/mdc-progress-bar/harness/progress-bar-harness.ts @@ -0,0 +1,30 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +import {ComponentHarness} from '@angular/cdk-experimental/testing'; +import {coerceNumberProperty} from '@angular/cdk/coercion'; + +/** + * Harness for interacting with a standard mat-progress-bar in tests. + * @dynamic + */ +export class MatProgressBarHarness extends ComponentHarness { + static hostSelector = 'mat-progress-bar'; + + /** Gets a promise for the progress bar's value. */ + async getValue(): Promise { + const host = await this.host(); + const ariaValue = await host.getAttribute('aria-valuenow'); + return ariaValue ? coerceNumberProperty(ariaValue) : null; + } + + /** Gets a promise for the progress bar's mode. */ + async getMode(): Promise { + return (await this.host()).getAttribute('mode'); + } +}