diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 884b19d3e4c..d2648224dca 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -33,6 +33,7 @@ /src/lib/stepper/** @mmalerba /src/lib/table/** @andrewseguin /src/lib/tabs/** @andrewseguin +/src/lib/testing/** @jelbourn /src/lib/toolbar/** @devversion /src/lib/tooltip/** @andrewseguin /src/lib/tree/** @jelbourn @andrewseguin @@ -52,7 +53,6 @@ /src/lib/core/selection/** @jelbourn /src/lib/core/selection/pseudo*/** @crisbeto @jelbourn /src/lib/core/style/** @jelbourn -/src/lib/core/testing/** @jelbourn /src/lib/core/theming/** @jelbourn /src/lib/core/typography/** @crisbeto /src/lib/core/util/** @jelbourn diff --git a/src/lib/core/BUILD.bazel b/src/lib/core/BUILD.bazel index a1fa5a5ea82..b8d00f70af8 100644 --- a/src/lib/core/BUILD.bazel +++ b/src/lib/core/BUILD.bazel @@ -102,10 +102,11 @@ ng_test_library( deps = [ "@angular//packages/platform-browser", "@angular//packages/platform-browser/animations", + "//src/cdk/keycodes", "//src/cdk/platform", "//src/cdk/testing", - "//src/cdk/keycodes", - "//src/lib/core", + "//src/lib/testing", + ":core", ] ) diff --git a/src/lib/core/datetime/native-date-adapter.spec.ts b/src/lib/core/datetime/native-date-adapter.spec.ts index c8f2307d2f1..86c894a9f3c 100644 --- a/src/lib/core/datetime/native-date-adapter.spec.ts +++ b/src/lib/core/datetime/native-date-adapter.spec.ts @@ -1,7 +1,7 @@ import {Platform} from '@angular/cdk/platform'; import {LOCALE_ID} from '@angular/core'; import {async, inject, TestBed} from '@angular/core/testing'; -import {DEC, FEB, JAN, MAR} from '../testing/month-constants'; +import {DEC, FEB, JAN, MAR} from '@angular/material/testing'; import {DateAdapter, MAT_DATE_LOCALE, NativeDateAdapter, NativeDateModule} from './index'; const SUPPORTS_INTL = typeof Intl != 'undefined'; diff --git a/src/lib/core/month-constants.ts b/src/lib/core/month-constants.ts new file mode 100644 index 00000000000..b94e8045b51 --- /dev/null +++ b/src/lib/core/month-constants.ts @@ -0,0 +1,16 @@ +/** + * @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 + */ + +/** + * When constructing a Date, the month is zero-based. This can be confusing, since people are + * used to seeing them one-based. So we create these aliases to make writing the tests easier. + * @docs-private + * @breaking-change 8.0.0 Remove this with V8 since it was only targeted for testing. + */ +export const JAN = 0, FEB = 1, MAR = 2, APR = 3, MAY = 4, JUN = 5, JUL = 6, AUG = 7, SEP = 8, + OCT = 9, NOV = 10, DEC = 11; diff --git a/src/lib/core/public-api.ts b/src/lib/core/public-api.ts index d3192627154..4df40776415 100644 --- a/src/lib/core/public-api.ts +++ b/src/lib/core/public-api.ts @@ -18,5 +18,5 @@ export * from './label/label-options'; export * from './ripple/index'; export * from './selection/index'; -// TODO: don't have this -export * from './testing/month-constants'; +// TODO(devversion): remove this with v8 +export * from './month-constants'; diff --git a/src/lib/datepicker/BUILD.bazel b/src/lib/datepicker/BUILD.bazel index bf32dbac16d..f2fc7a256d3 100644 --- a/src/lib/datepicker/BUILD.bazel +++ b/src/lib/datepicker/BUILD.bazel @@ -79,6 +79,7 @@ ng_test_library( "//src/lib/core", "//src/lib/form-field", "//src/lib/input", + "//src/lib/testing", ":datepicker", ] ) diff --git a/src/lib/datepicker/calendar-header.spec.ts b/src/lib/datepicker/calendar-header.spec.ts index 167caf83f55..3138015744a 100644 --- a/src/lib/datepicker/calendar-header.spec.ts +++ b/src/lib/datepicker/calendar-header.spec.ts @@ -1,7 +1,8 @@ import {Directionality} from '@angular/cdk/bidi'; import {Component} from '@angular/core'; import {async, ComponentFixture, TestBed} from '@angular/core/testing'; -import {DEC, FEB, JAN, MatNativeDateModule} from '@angular/material/core'; +import {MatNativeDateModule} from '@angular/material/core'; +import {DEC, FEB, JAN} from '@angular/material/testing'; import {By} from '@angular/platform-browser'; import {MatCalendar} from './calendar'; import {MatDatepickerIntl} from './datepicker-intl'; diff --git a/src/lib/datepicker/calendar.spec.ts b/src/lib/datepicker/calendar.spec.ts index b014fa74b62..2e1dc270abe 100644 --- a/src/lib/datepicker/calendar.spec.ts +++ b/src/lib/datepicker/calendar.spec.ts @@ -8,7 +8,8 @@ import { } from '@angular/cdk/testing'; import {Component, NgZone} from '@angular/core'; import {async, ComponentFixture, inject, TestBed} from '@angular/core/testing'; -import {DateAdapter, DEC, FEB, JAN, JUL, MatNativeDateModule, NOV} from '@angular/material/core'; +import {DateAdapter, MatNativeDateModule} from '@angular/material/core'; +import {DEC, FEB, JAN, JUL, NOV} from '@angular/material/testing'; import {By} from '@angular/platform-browser'; import {MatCalendar} from './calendar'; import {MatDatepickerIntl} from './datepicker-intl'; diff --git a/src/lib/datepicker/datepicker.spec.ts b/src/lib/datepicker/datepicker.spec.ts index fece0852768..f3c5c37d870 100644 --- a/src/lib/datepicker/datepicker.spec.ts +++ b/src/lib/datepicker/datepicker.spec.ts @@ -1,4 +1,5 @@ -import {ENTER, ESCAPE, RIGHT_ARROW, UP_ARROW, DOWN_ARROW} from '@angular/cdk/keycodes'; +import {Directionality} from '@angular/cdk/bidi'; +import {DOWN_ARROW, ENTER, ESCAPE, RIGHT_ARROW, UP_ARROW} from '@angular/cdk/keycodes'; import {Overlay, OverlayContainer} from '@angular/cdk/overlay'; import {ScrollDispatcher} from '@angular/cdk/scrolling'; import { @@ -11,18 +12,11 @@ import { import {Component, FactoryProvider, Type, ValueProvider, ViewChild} from '@angular/core'; import {ComponentFixture, fakeAsync, flush, inject, TestBed, tick} from '@angular/core/testing'; import {FormControl, FormsModule, ReactiveFormsModule} from '@angular/forms'; -import { - DEC, - JAN, - JUL, - JUN, - MAT_DATE_LOCALE, - MatNativeDateModule, - NativeDateModule, - SEP, -} from '@angular/material/core'; +import {MAT_DATE_LOCALE, MatNativeDateModule, NativeDateModule} from '@angular/material/core'; import {MatFormField, MatFormFieldModule} from '@angular/material/form-field'; +import {DEC, JAN, JUL, JUN, SEP} from '@angular/material/testing'; import {By} from '@angular/platform-browser'; +import {BrowserDynamicTestingModule} from '@angular/platform-browser-dynamic/testing'; import {NoopAnimationsModule} from '@angular/platform-browser/animations'; import {Subject} from 'rxjs'; import {MatInputModule} from '../input/index'; @@ -30,8 +24,6 @@ import {MatDatepicker} from './datepicker'; import {MatDatepickerInput} from './datepicker-input'; import {MatDatepickerToggle} from './datepicker-toggle'; import {MAT_DATEPICKER_SCROLL_STRATEGY, MatDatepickerIntl, MatDatepickerModule} from './index'; -import {Directionality} from '@angular/cdk/bidi'; -import {BrowserDynamicTestingModule} from '@angular/platform-browser-dynamic/testing'; describe('MatDatepicker', () => { const SUPPORTS_INTL = typeof Intl != 'undefined'; diff --git a/src/lib/datepicker/month-view.spec.ts b/src/lib/datepicker/month-view.spec.ts index c531d208a2c..7289b56875e 100644 --- a/src/lib/datepicker/month-view.spec.ts +++ b/src/lib/datepicker/month-view.spec.ts @@ -8,18 +8,18 @@ import { PAGE_DOWN, PAGE_UP, RIGHT_ARROW, - UP_ARROW, SPACE, + UP_ARROW, } from '@angular/cdk/keycodes'; import {dispatchFakeEvent, dispatchKeyboardEvent} from '@angular/cdk/testing'; import {Component} from '@angular/core'; import {async, ComponentFixture, TestBed} from '@angular/core/testing'; -import {DEC, FEB, JAN, MAR, MatNativeDateModule, NOV} from '@angular/material/core'; +import {MatNativeDateModule} from '@angular/material/core'; +import {DEC, FEB, JAN, MAR, NOV} from '@angular/material/testing'; import {By} from '@angular/platform-browser'; import {MatCalendarBody} from './calendar-body'; import {MatMonthView} from './month-view'; - describe('MatMonthView', () => { let dir: {value: Direction}; diff --git a/src/lib/datepicker/multi-year-view.spec.ts b/src/lib/datepicker/multi-year-view.spec.ts index 8bc15c6a4ef..c89c8ae1ccb 100644 --- a/src/lib/datepicker/multi-year-view.spec.ts +++ b/src/lib/datepicker/multi-year-view.spec.ts @@ -1,3 +1,4 @@ +import {Direction, Directionality} from '@angular/cdk/bidi'; import { DOWN_ARROW, END, @@ -8,14 +9,14 @@ import { RIGHT_ARROW, UP_ARROW, } from '@angular/cdk/keycodes'; -import {By} from '@angular/platform-browser'; +import {dispatchFakeEvent, dispatchKeyboardEvent} from '@angular/cdk/testing'; import {Component, ViewChild} from '@angular/core'; -import {ComponentFixture, TestBed, async} from '@angular/core/testing'; -import {Direction, Directionality} from '@angular/cdk/bidi'; -import {JAN, MatNativeDateModule} from '@angular/material/core'; +import {async, ComponentFixture, TestBed} from '@angular/core/testing'; +import {MatNativeDateModule} from '@angular/material/core'; +import {JAN} from '@angular/material/testing'; +import {By} from '@angular/platform-browser'; import {MatCalendarBody} from './calendar-body'; import {MatMultiYearView, yearsPerPage, yearsPerRow} from './multi-year-view'; -import {dispatchKeyboardEvent, dispatchFakeEvent} from '@angular/cdk/testing'; describe('MatMultiYearView', () => { let dir: {value: Direction}; diff --git a/src/lib/datepicker/year-view.spec.ts b/src/lib/datepicker/year-view.spec.ts index f2c27f5bee2..d69cca59137 100644 --- a/src/lib/datepicker/year-view.spec.ts +++ b/src/lib/datepicker/year-view.spec.ts @@ -12,25 +12,12 @@ import { import {dispatchFakeEvent, dispatchKeyboardEvent} from '@angular/cdk/testing'; import {Component, ViewChild} from '@angular/core'; import {async, ComponentFixture, TestBed} from '@angular/core/testing'; -import { - AUG, - DEC, - FEB, - JAN, - JUL, - JUN, - MAR, - MatNativeDateModule, - MAY, - NOV, - OCT, - SEP -} from '@angular/material/core'; +import {MatNativeDateModule} from '@angular/material/core'; +import {AUG, DEC, FEB, JAN, JUL, JUN, MAR, MAY, NOV, OCT, SEP} from '@angular/material/testing'; import {By} from '@angular/platform-browser'; import {MatCalendarBody} from './calendar-body'; import {MatYearView} from './year-view'; - describe('MatYearView', () => { let dir: {value: Direction}; diff --git a/src/lib/slide-toggle/BUILD.bazel b/src/lib/slide-toggle/BUILD.bazel index 05f91c64a02..848207f4ab5 100644 --- a/src/lib/slide-toggle/BUILD.bazel +++ b/src/lib/slide-toggle/BUILD.bazel @@ -46,8 +46,7 @@ ng_test_library( "//src/cdk/bidi", "//src/cdk/observers", "//src/cdk/testing", - # TODO(devversion): move gesture test config out of slider. - "//src/lib/slider", + "//src/lib/testing", ":slide-toggle", ] ) diff --git a/src/lib/slide-toggle/slide-toggle.spec.ts b/src/lib/slide-toggle/slide-toggle.spec.ts index 38ba907f2ed..e4a07422933 100644 --- a/src/lib/slide-toggle/slide-toggle.spec.ts +++ b/src/lib/slide-toggle/slide-toggle.spec.ts @@ -1,3 +1,4 @@ +import {BidiModule, Direction} from '@angular/cdk/bidi'; import {MutationObserverFactory} from '@angular/cdk/observers'; import {dispatchFakeEvent} from '@angular/cdk/testing'; import {Component} from '@angular/core'; @@ -10,11 +11,10 @@ import { tick, } from '@angular/core/testing'; import {FormControl, FormsModule, NgModel, ReactiveFormsModule} from '@angular/forms'; +import {TestGestureConfig} from '@angular/material/testing'; import {By, HAMMER_GESTURE_CONFIG} from '@angular/platform-browser'; -import {BidiModule, Direction} from '@angular/cdk/bidi'; -import {TestGestureConfig} from '../slider/test-gesture-config'; -import {MAT_SLIDE_TOGGLE_DEFAULT_OPTIONS} from './slide-toggle-config'; import {MatSlideToggle, MatSlideToggleChange, MatSlideToggleModule} from './index'; +import {MAT_SLIDE_TOGGLE_DEFAULT_OPTIONS} from './slide-toggle-config'; describe('MatSlideToggle without forms', () => { let gestureConfig: TestGestureConfig; diff --git a/src/lib/slider/BUILD.bazel b/src/lib/slider/BUILD.bazel index dd3ec7551fb..55331e9c52c 100644 --- a/src/lib/slider/BUILD.bazel +++ b/src/lib/slider/BUILD.bazel @@ -47,6 +47,7 @@ ng_test_library( "//src/cdk/bidi", "//src/cdk/keycodes", "//src/cdk/testing", + "//src/lib/testing", ":slider", ] ) diff --git a/src/lib/slider/slider.spec.ts b/src/lib/slider/slider.spec.ts index a7e008813bd..dce81bc7def 100644 --- a/src/lib/slider/slider.spec.ts +++ b/src/lib/slider/slider.spec.ts @@ -11,18 +11,18 @@ import { UP_ARROW, } from '@angular/cdk/keycodes'; import { + createMouseEvent, + dispatchEvent, dispatchFakeEvent, dispatchKeyboardEvent, dispatchMouseEvent, - createMouseEvent, - dispatchEvent, } from '@angular/cdk/testing'; -import {Component, DebugElement, ViewChild, Type} from '@angular/core'; -import {ComponentFixture, TestBed, fakeAsync, flush} from '@angular/core/testing'; +import {Component, DebugElement, Type, ViewChild} from '@angular/core'; +import {ComponentFixture, fakeAsync, flush, TestBed} from '@angular/core/testing'; import {FormControl, FormsModule, ReactiveFormsModule} from '@angular/forms'; +import {TestGestureConfig} from '@angular/material/testing'; import {By, HAMMER_GESTURE_CONFIG} from '@angular/platform-browser'; import {MatSlider, MatSliderModule} from './index'; -import {TestGestureConfig} from './test-gesture-config'; describe('MatSlider', () => { let gestureConfig: TestGestureConfig; diff --git a/src/lib/testing/BUILD.bazel b/src/lib/testing/BUILD.bazel new file mode 100644 index 00000000000..1a661e5bb7f --- /dev/null +++ b/src/lib/testing/BUILD.bazel @@ -0,0 +1,13 @@ +package(default_visibility=["//visibility:public"]) + +load("//tools:defaults.bzl", "ng_module") + +ng_module( + name = "testing", + module_name = "@angular/material/testing", + srcs = glob(["**/*.ts"]), + deps = [ + "@angular//packages/core", + "//src/lib/core", + ], +) diff --git a/src/lib/testing/README.md b/src/lib/testing/README.md new file mode 100644 index 00000000000..386f41450b7 --- /dev/null +++ b/src/lib/testing/README.md @@ -0,0 +1,2 @@ +Note that this is not an entry-point. This directory is just used to share testing logic +that is specific to Angular Material. diff --git a/src/lib/testing/index.ts b/src/lib/testing/index.ts new file mode 100644 index 00000000000..d350fc1d047 --- /dev/null +++ b/src/lib/testing/index.ts @@ -0,0 +1,10 @@ +/** + * @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 + */ + +export * from './month-constants'; +export * from './test-gesture-config'; diff --git a/src/lib/core/testing/month-constants.ts b/src/lib/testing/month-constants.ts similarity index 100% rename from src/lib/core/testing/month-constants.ts rename to src/lib/testing/month-constants.ts diff --git a/src/lib/slider/test-gesture-config.ts b/src/lib/testing/test-gesture-config.ts similarity index 100% rename from src/lib/slider/test-gesture-config.ts rename to src/lib/testing/test-gesture-config.ts diff --git a/src/material-moment-adapter/BUILD.bazel b/src/material-moment-adapter/BUILD.bazel index 6a5ff2324d6..794835545c5 100644 --- a/src/material-moment-adapter/BUILD.bazel +++ b/src/material-moment-adapter/BUILD.bazel @@ -11,7 +11,8 @@ ng_module( deps = [ "@angular//packages/core", "@matdeps//moment", - "//src/lib/core" + "//src/lib/core", + "//src/lib/testing", ], # Explicitly specify the tsconfig that is also used by Gulp. We need to explicitly use this # tsconfig because in order to import Moment with TypeScript, we need some special options diff --git a/src/material-moment-adapter/adapter/moment-date-adapter.spec.ts b/src/material-moment-adapter/adapter/moment-date-adapter.spec.ts index 9e1aa161d36..41b5860e938 100644 --- a/src/material-moment-adapter/adapter/moment-date-adapter.spec.ts +++ b/src/material-moment-adapter/adapter/moment-date-adapter.spec.ts @@ -8,11 +8,12 @@ import {LOCALE_ID} from '@angular/core'; import {async, inject, TestBed} from '@angular/core/testing'; -import {DateAdapter, DEC, FEB, JAN, MAR, MAT_DATE_LOCALE} from '@angular/material/core'; -import * as moment from 'moment'; +import {DateAdapter, MAT_DATE_LOCALE} from '@angular/material/core'; +import {DEC, FEB, JAN, MAR} from '@angular/material/testing'; import {MomentDateModule} from './index'; -import {MomentDateAdapter, MAT_MOMENT_DATE_ADAPTER_OPTIONS} from './moment-date-adapter'; +import {MAT_MOMENT_DATE_ADAPTER_OPTIONS, MomentDateAdapter} from './moment-date-adapter'; +import * as moment from 'moment'; describe('MomentDateAdapter', () => { let adapter: MomentDateAdapter; diff --git a/test/karma-system-config.js b/test/karma-system-config.js index 01a6ec01c94..3b19c85b9f0 100644 --- a/test/karma-system-config.js +++ b/test/karma-system-config.js @@ -93,6 +93,7 @@ System.config({ '@angular/material/stepper': 'dist/packages/material/stepper/index.js', '@angular/material/table': 'dist/packages/material/table/index.js', '@angular/material/tabs': 'dist/packages/material/tabs/index.js', + '@angular/material/testing': 'dist/packages/material/testing/index.js', '@angular/material/toolbar': 'dist/packages/material/toolbar/index.js', '@angular/material/tooltip': 'dist/packages/material/tooltip/index.js', '@angular/material/tree': 'dist/packages/material/tree/index.js',