Skip to content

Commit 4175091

Browse files
committed
docs(material/datepicker): add harness example for datepicker (#21475)
(cherry picked from commit cd018b0)
1 parent 703082d commit 4175091

File tree

5 files changed

+95
-0
lines changed

5 files changed

+95
-0
lines changed

src/components-examples/material/datepicker/BUILD.bazel

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,19 @@ ng_module(
1313
module_name = "@angular/components-examples/material/datepicker",
1414
tsconfig = ":tsconfig",
1515
deps = [
16+
"//src/cdk/testing",
17+
"//src/cdk/testing/testbed",
1618
"//src/material-moment-adapter",
1719
"//src/material/button",
1820
"//src/material/core",
1921
"//src/material/datepicker",
22+
"//src/material/datepicker/testing",
2023
"//src/material/icon",
2124
"//src/material/input",
2225
"@npm//@angular/forms",
26+
"@npm//@angular/platform-browser",
27+
"@npm//@angular/platform-browser-dynamic",
28+
"@npm//@types/jasmine",
2329
"@npm//moment",
2430
],
2531
)
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<input
2+
matInput
3+
[matDatepicker]="picker"
4+
[(ngModel)]="date"
5+
[min]="minDate">
6+
<mat-datepicker #picker></mat-datepicker>
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
import {TestBed, ComponentFixture, waitForAsync} from '@angular/core/testing';
2+
import {TestbedHarnessEnvironment} from '@angular/cdk/testing/testbed';
3+
import {MatDatepickerInputHarness} from '@angular/material/datepicker/testing';
4+
import {HarnessLoader} from '@angular/cdk/testing';
5+
import {BrowserDynamicTestingModule, platformBrowserDynamicTesting}
6+
from '@angular/platform-browser-dynamic/testing';
7+
import {MatDatepickerModule} from '@angular/material/datepicker';
8+
import {DatepickerHarnessExample} from './datepicker-harness-example';
9+
import {NoopAnimationsModule} from '@angular/platform-browser/animations';
10+
import {MatNativeDateModule} from '@angular/material/core';
11+
import {FormsModule} from '@angular/forms';
12+
13+
describe('DatepickerHarnessExample', () => {
14+
let fixture: ComponentFixture<DatepickerHarnessExample>;
15+
let loader: HarnessLoader;
16+
17+
beforeAll(() => {
18+
TestBed.initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting());
19+
});
20+
21+
beforeEach(
22+
waitForAsync(() => {
23+
TestBed.configureTestingModule({
24+
imports: [MatDatepickerModule, NoopAnimationsModule, MatNativeDateModule, FormsModule],
25+
declarations: [DatepickerHarnessExample]
26+
}).compileComponents();
27+
fixture = TestBed.createComponent(DatepickerHarnessExample);
28+
fixture.detectChanges();
29+
loader = TestbedHarnessEnvironment.loader(fixture);
30+
})
31+
);
32+
33+
it('should load all datepicker input harnesses', async () => {
34+
const inputs = await loader.getAllHarnesses(MatDatepickerInputHarness);
35+
expect(inputs.length).toBe(1);
36+
});
37+
38+
it('should get whether the input has an associated calendar', async () => {
39+
const input = await loader.getHarness(MatDatepickerInputHarness);
40+
expect(await input.hasCalendar()).toBeTrue();
41+
});
42+
43+
it('should set the input value', async () => {
44+
const input = await loader.getHarness(MatDatepickerInputHarness);
45+
expect(await input.getValue()).toBeFalsy();
46+
47+
await input.setValue('1/1/2020');
48+
expect(await input.getValue()).toBe('1/1/2020');
49+
});
50+
51+
it('should get the minimum date of the input', async () => {
52+
const input = await loader.getHarness(MatDatepickerInputHarness);
53+
fixture.componentInstance.minDate = new Date(2020, 0, 1, 12, 0, 0);
54+
expect(await input.getMin()).toEqual('2020-01-01');
55+
});
56+
57+
it('should be able to open and close a calendar in popup mode', async () => {
58+
const input = await loader.getHarness(MatDatepickerInputHarness);
59+
expect(await input.isCalendarOpen()).toBe(false);
60+
61+
await input.openCalendar();
62+
expect(await input.isCalendarOpen()).toBe(true);
63+
64+
await input.closeCalendar();
65+
expect(await input.isCalendarOpen()).toBe(false);
66+
});
67+
});
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import {Component} from '@angular/core';
2+
3+
/**
4+
* @title Testing with MatDatepickerInputHarness
5+
*/
6+
@Component({
7+
selector: 'datepicker-harness-example',
8+
templateUrl: 'datepicker-harness-example.html',
9+
})
10+
export class DatepickerHarnessExample {
11+
date: Date|null = null;
12+
minDate: Date|null = null;
13+
}

src/components-examples/material/datepicker/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ import {
4141
import {
4242
DateRangePickerSelectionStrategyExample
4343
} from './date-range-picker-selection-strategy/date-range-picker-selection-strategy-example';
44+
import {DatepickerHarnessExample} from './datepicker-harness/datepicker-harness-example';
4445

4546
export {
4647
DatepickerApiExample,
@@ -52,6 +53,7 @@ export {
5253
DatepickerEventsExample,
5354
DatepickerFilterExample,
5455
DatepickerFormatsExample,
56+
DatepickerHarnessExample,
5557
DatepickerLocaleExample,
5658
DatepickerMinMaxExample,
5759
DatepickerMomentExample,
@@ -77,6 +79,7 @@ const EXAMPLES = [
7779
DatepickerEventsExample,
7880
DatepickerFilterExample,
7981
DatepickerFormatsExample,
82+
DatepickerHarnessExample,
8083
DatepickerLocaleExample,
8184
DatepickerMinMaxExample,
8285
DatepickerMomentExample,

0 commit comments

Comments
 (0)