refactor: move testing utilities to cdk (#5437)

* Deletes the duplicate testing utilities because #5386 just copied them to the CDK but didn't delete the old files.
* Introduces a secondary entry point (only inside of development right now) that allows us to use the testing utilities from the Material package tests
This commit is contained in:
Paul Gschwendtner
2017-07-07 00:46:29 +02:00
committed by mmalerba
parent ac3e21a334
commit 8de3b98935
36 changed files with 60 additions and 170 deletions
+9
View File
@@ -0,0 +1,9 @@
/**
* @license
* Copyright Google Inc. 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 './keycodes';
+1 -1
View File
@@ -14,4 +14,4 @@ export * from './platform/index';
export * from './portal/index';
export * from './rxjs/index';
export * from './observe-content/index';
export * from './keyboard/keycodes';
export * from './keyboard/index';
+12
View File
@@ -0,0 +1,12 @@
/**
* @license
* Copyright Google Inc. 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 './dispatch-events';
export * from './event-objects';
export * from './type-in-element';
export * from './wrapped-error-message';
+5 -2
View File
@@ -10,8 +10,11 @@
"types": ["jasmine"],
"experimentalDecorators": true
},
"files": [
"./index.ts",
"./testing/index.ts"
],
"include": [
"**/*.spec.ts",
"index.ts"
"**/*.spec.ts"
]
}
+1 -3
View File
@@ -26,9 +26,7 @@ import {MdOption} from '../core/option/option';
import {MdInputContainer} from '../input/input-container';
import {Observable} from 'rxjs/Observable';
import {Subject} from 'rxjs/Subject';
import {dispatchFakeEvent} from '../core/testing/dispatch-events';
import {createKeyboardEvent} from '../core/testing/event-objects';
import {typeInElement} from '../core/testing/type-in-element';
import {createKeyboardEvent, dispatchFakeEvent, typeInElement} from '@angular/cdk/testing';
import {ScrollDispatcher} from '../core/overlay/scroll/scroll-dispatcher';
import {RxChain, map, startWith, filter} from '../core/rxjs/index';
+1 -1
View File
@@ -12,7 +12,7 @@ import {By} from '@angular/platform-browser';
import {MdCheckbox, MdCheckboxChange, MdCheckboxModule} from './index';
import {ViewportRuler} from '../core/overlay/position/viewport-ruler';
import {FakeViewportRuler} from '../core/overlay/position/fake-viewport-ruler';
import {dispatchFakeEvent} from '../core/testing/dispatch-events';
import {dispatchFakeEvent} from '@angular/cdk/testing';
import {RIPPLE_FADE_IN_DURATION, RIPPLE_FADE_OUT_DURATION} from '../core/ripple/ripple-renderer';
+1 -1
View File
@@ -4,7 +4,7 @@ import {By} from '@angular/platform-browser';
import {MdChip, MdChipList, MdChipsModule} from './index';
import {FocusKeyManager} from '../core/a11y/focus-key-manager';
import {SPACE, LEFT_ARROW, RIGHT_ARROW, TAB} from '../core/keyboard/keycodes';
import {createKeyboardEvent} from '../core/testing/event-objects';
import {createKeyboardEvent} from '@angular/cdk/testing';
describe('MdChipList', () => {
@@ -7,7 +7,7 @@ import {
MD_ELEMENTS_SELECTOR,
getMdCompatibilityInvalidPrefixError,
} from './compatibility';
import {wrappedErrorMessage} from '../testing/wrapped-error-message';
import {wrappedErrorMessage} from '@angular/cdk/testing';
describe('Style compatibility', () => {
@@ -6,7 +6,7 @@ import {OverlayContainer} from './overlay-container';
import {ConnectedPositionStrategy} from './position/connected-position-strategy';
import {ConnectedOverlayPositionChange} from './position/connected-position';
import {Directionality} from '../bidi/index';
import {dispatchKeyboardEvent} from '../testing/dispatch-events';
import {dispatchKeyboardEvent} from '@angular/cdk/testing';
import {ESCAPE} from '../keyboard/keycodes';
@@ -1,7 +1,7 @@
import {inject, TestBed, async, fakeAsync, ComponentFixture, tick} from '@angular/core/testing';
import {NgModule, Component, ViewChild, ElementRef} from '@angular/core';
import {OverlayModule, Scrollable, ScrollDispatcher} from '../index';
import {dispatchFakeEvent} from '../../testing/dispatch-events';
import {dispatchFakeEvent} from '@angular/cdk/testing';
describe('Scroll Dispatcher', () => {
+1 -1
View File
@@ -2,7 +2,7 @@ import {TestBed, ComponentFixture, fakeAsync, tick, inject} from '@angular/core/
import {Component, ViewChild} from '@angular/core';
import {ViewportRuler} from '../overlay/position/viewport-ruler';
import {RIPPLE_FADE_OUT_DURATION, RIPPLE_FADE_IN_DURATION} from './ripple-renderer';
import {dispatchMouseEvent} from '../testing/dispatch-events';
import {dispatchMouseEvent} from '@angular/cdk/testing';
import {
MdRipple, MdRippleModule, MD_RIPPLE_GLOBAL_OPTIONS, RippleState, RippleGlobalOptions
} from './index';
@@ -4,9 +4,7 @@ import {StyleModule} from './index';
import {By} from '@angular/platform-browser';
import {TAB} from '../keyboard/keycodes';
import {FocusOrigin, FocusOriginMonitor, TOUCH_BUFFER_MS} from './focus-origin-monitor';
import {
dispatchFakeEvent, dispatchKeyboardEvent, dispatchMouseEvent
} from '../testing/dispatch-events';
import {dispatchFakeEvent, dispatchKeyboardEvent, dispatchMouseEvent} from '@angular/cdk/testing';
describe('FocusOriginMonitor', () => {
-30
View File
@@ -1,30 +0,0 @@
/**
* @license
* Copyright Google Inc. 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 {createFakeEvent, createKeyboardEvent, createMouseEvent} from './event-objects';
/** Utility to dispatch any event on a Node. */
export function dispatchEvent(node: Node | Window, event: Event): Event {
node.dispatchEvent(event);
return event;
}
/** Shorthand to dispatch a fake event on a specified node. */
export function dispatchFakeEvent(node: Node | Window, type: string): Event {
return dispatchEvent(node, createFakeEvent(type));
}
/** Shorthand to dispatch a keyboard event with a specified key code. */
export function dispatchKeyboardEvent(node: Node, type: string, keyCode: number): KeyboardEvent {
return dispatchEvent(node, createKeyboardEvent(type, keyCode)) as KeyboardEvent;
}
/** Shorthand to dispatch a mouse event on the specified coordinates. */
export function dispatchMouseEvent(node: Node, type: string, x = 0, y = 0): MouseEvent {
return dispatchEvent(node, createMouseEvent(type, x, y)) as MouseEvent;
}
-62
View File
@@ -1,62 +0,0 @@
/**
* @license
* Copyright Google Inc. 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
*/
/** Creates a browser MouseEvent with the specified options. */
export function createMouseEvent(type: string, x = 0, y = 0) {
let event = document.createEvent('MouseEvent');
event.initMouseEvent(type,
false, /* canBubble */
false, /* cancelable */
window, /* view */
0, /* detail */
x, /* screenX */
y, /* screenY */
x, /* clientX */
y, /* clientY */
false, /* ctrlKey */
false, /* altKey */
false, /* shiftKey */
false, /* metaKey */
0, /* button */
null /* relatedTarget */);
return event;
}
/** Dispatches a keydown event from an element. */
export function createKeyboardEvent(type: string, keyCode: number, target?: Element) {
let event = document.createEvent('KeyboardEvent') as any;
// Firefox does not support `initKeyboardEvent`, but supports `initKeyEvent`.
let initEventFn = (event.initKeyEvent || event.initKeyboardEvent).bind(event);
let originalPreventDefault = event.preventDefault;
initEventFn(type, true, true, window, 0, 0, 0, 0, 0, keyCode);
// Webkit Browsers don't set the keyCode when calling the init function.
// See related bug https://bugs.webkit.org/show_bug.cgi?id=16735
Object.defineProperties(event, {
keyCode: { get: () => keyCode },
target: { get: () => target }
});
// IE won't set `defaultPrevented` on synthetic events so we need to do it manually.
event.preventDefault = function() {
Object.defineProperty(event, 'defaultPrevented', { get: () => true });
return originalPreventDefault.apply(this, arguments);
};
return event;
}
/** Creates a fake event object with any desired event type. */
export function createFakeEvent(type: string) {
let event = document.createEvent('Event');
event.initEvent(type, true, true);
return event;
}
-30
View File
@@ -1,30 +0,0 @@
/**
* @license
* Copyright Google Inc. 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
*/
/**
* Collection of useful custom jasmine matchers for tests.
*/
export const customMatchers: jasmine.CustomMatcherFactories = {
toBeRole: () => {
return {
compare: function (element: Element, expectedRole: string) {
const result: jasmine.CustomMatcherResult = {pass: false};
const actualRole = element.getAttribute('role');
result.pass = actualRole === expectedRole;
result.message = `Expected role for ${element.tagName} to be ${expectedRole}`;
if (!result.pass) {
result.message += ` but was ${actualRole}`;
}
return result;
}
};
}
};
+1 -5
View File
@@ -5,11 +5,7 @@ import {By} from '@angular/platform-browser';
import {MdMonthView} from './month-view';
import {MdYearView} from './year-view';
import {MdCalendarBody} from './calendar-body';
import {
dispatchFakeEvent,
dispatchKeyboardEvent,
dispatchMouseEvent
} from '../core/testing/dispatch-events';
import {dispatchFakeEvent, dispatchKeyboardEvent, dispatchMouseEvent} from '@angular/cdk/testing';
import {
DOWN_ARROW,
END,
+1 -5
View File
@@ -9,11 +9,7 @@ import {MdDatepickerInput} from './datepicker-input';
import {MdInputModule} from '../input/index';
import {MdNativeDateModule, DateAdapter, NativeDateAdapter} from '../core/datetime/index';
import {ESCAPE} from '../core';
import {
dispatchFakeEvent,
dispatchMouseEvent,
dispatchKeyboardEvent,
} from '../core/testing/dispatch-events';
import {dispatchFakeEvent, dispatchMouseEvent, dispatchKeyboardEvent} from '@angular/cdk/testing';
// When constructing a Date, the month is zero-based. This can be confusing, since people are
+1 -1
View File
@@ -25,7 +25,7 @@ import {MdDialog, MD_DIALOG_DATA} from './dialog';
import {MdDialogContainer} from './dialog-container';
import {OverlayContainer, ESCAPE} from '../core';
import {MdDialogRef} from './dialog-ref';
import {dispatchKeyboardEvent} from '../core/testing/dispatch-events';
import {dispatchKeyboardEvent} from '@angular/cdk/testing';
describe('MdDialog', () => {
+1 -1
View File
@@ -6,7 +6,7 @@ import {Component} from '@angular/core';
import {MdIconModule} from './index';
import {MdIconRegistry, getMdIconNoHttpProviderError} from './icon-registry';
import {getFakeSvgHttpResponse} from './fake-svgs';
import {wrappedErrorMessage} from '../core/testing/wrapped-error-message';
import {wrappedErrorMessage} from '@angular/cdk/testing';
/** Returns the CSS classes assigned to an element as a sorted array. */
+1 -2
View File
@@ -15,8 +15,7 @@ import {MdInputModule} from './index';
import {MdInputContainer, MdInputDirective} from './input-container';
import {Platform} from '../core/platform/platform';
import {PlatformModule} from '../core/platform/index';
import {wrappedErrorMessage} from '../core/testing/wrapped-error-message';
import {dispatchFakeEvent} from '../core/testing/dispatch-events';
import {wrappedErrorMessage, dispatchFakeEvent} from '@angular/cdk/testing';
import {
getMdInputContainerDuplicatedHintError,
getMdInputContainerMissingMdInputError,
+1 -1
View File
@@ -21,7 +21,7 @@ import {OverlayContainer} from '../core/overlay/overlay-container';
import {Directionality, Direction} from '../core/bidi/index';
import {extendObject} from '../core/util/object-extend';
import {ESCAPE} from '../core/keyboard/keycodes';
import {dispatchKeyboardEvent} from '../core/testing/dispatch-events';
import {dispatchKeyboardEvent} from '@angular/cdk/testing';
describe('MdMenu', () => {
+1 -4
View File
@@ -4,8 +4,7 @@ import {MdPaginator, PageEvent} from './paginator';
import {Component, ElementRef, ViewChild} from '@angular/core';
import {MdPaginatorIntl} from './paginator-intl';
import {NoopAnimationsModule} from '@angular/platform-browser/animations';
import {customMatchers} from '../core/testing/jasmine-matchers';
import {dispatchMouseEvent} from '../core/testing/dispatch-events';
import {dispatchMouseEvent} from '@angular/cdk/testing';
describe('MdPaginator', () => {
@@ -14,8 +13,6 @@ describe('MdPaginator', () => {
let paginator: MdPaginator;
beforeEach(async(() => {
jasmine.addMatchers(customMatchers);
TestBed.configureTestingModule({
imports: [
MdPaginatorModule,
+1 -1
View File
@@ -5,7 +5,7 @@ import {By} from '@angular/platform-browser';
import {MdRadioGroup, MdRadioButton, MdRadioChange, MdRadioModule} from './index';
import {ViewportRuler} from '../core/overlay/position/viewport-ruler';
import {FakeViewportRuler} from '../core/overlay/position/fake-viewport-ruler';
import {dispatchFakeEvent} from '../core/testing/dispatch-events';
import {dispatchFakeEvent} from '@angular/cdk/testing';
import {RIPPLE_FADE_IN_DURATION, RIPPLE_FADE_OUT_DURATION} from '../core/ripple/ripple-renderer';
+1 -2
View File
@@ -22,8 +22,7 @@ import {
} from '@angular/forms';
import {Subject} from 'rxjs/Subject';
import {ViewportRuler} from '../core/overlay/position/viewport-ruler';
import {dispatchFakeEvent, dispatchKeyboardEvent} from '../core/testing/dispatch-events';
import {wrappedErrorMessage} from '../core/testing/wrapped-error-message';
import {dispatchFakeEvent, dispatchKeyboardEvent, wrappedErrorMessage} from '@angular/cdk/testing';
import {ScrollDispatcher} from '../core/overlay/scroll/scroll-dispatcher';
import {
FloatPlaceholderType,
+1 -1
View File
@@ -4,7 +4,7 @@ import {async, ComponentFixture, TestBed, fakeAsync, tick} from '@angular/core/t
import {NgModel, FormsModule, ReactiveFormsModule, FormControl} from '@angular/forms';
import {MdSlideToggle, MdSlideToggleChange, MdSlideToggleModule} from './index';
import {TestGestureConfig} from '../slider/test-gesture-config';
import {dispatchFakeEvent} from '../core/testing/dispatch-events';
import {dispatchFakeEvent} from '@angular/cdk/testing';
import {RIPPLE_FADE_IN_DURATION, RIPPLE_FADE_OUT_DURATION} from '../core/ripple/ripple-renderer';
describe('MdSlideToggle', () => {
+1 -1
View File
@@ -15,7 +15,7 @@ import {
RIGHT_ARROW,
UP_ARROW
} from '../core/keyboard/keycodes';
import {dispatchKeyboardEvent, dispatchMouseEvent} from '../core/testing/dispatch-events';
import {dispatchKeyboardEvent, dispatchMouseEvent} from '@angular/cdk/testing';
describe('MdSlider', () => {
+2 -2
View File
@@ -3,13 +3,13 @@ import {Component, ElementRef, ViewChild} from '@angular/core';
import {MdSort, MdSortHeader, Sort, SortDirection, MdSortModule} from './index';
import {CdkTableModule, DataSource, CollectionViewer} from '@angular/cdk';
import {Observable} from 'rxjs/Observable';
import {dispatchMouseEvent} from '../core/testing/dispatch-events';
import {dispatchMouseEvent} from '@angular/cdk/testing';
import {
getMdSortDuplicateMdSortableIdError,
getMdSortHeaderMissingIdError,
getMdSortHeaderNotContainedWithinMdSortError
} from './sort-errors';
import {wrappedErrorMessage} from '../core/testing/wrapped-error-message';
import {wrappedErrorMessage} from '@angular/cdk/testing';
import {map} from '../core/rxjs/index';
describe('MdSort', () => {
+1 -1
View File
@@ -9,7 +9,7 @@ import {Observable} from 'rxjs/Observable';
import {MdTab} from './tab';
import {ViewportRuler} from '../core/overlay/position/viewport-ruler';
import {FakeViewportRuler} from '../core/overlay/position/fake-viewport-ruler';
import {dispatchFakeEvent} from '../core/testing/dispatch-events';
import {dispatchFakeEvent} from '@angular/cdk/testing';
describe('MdTabGroup', () => {
+1 -2
View File
@@ -10,8 +10,7 @@ import {MdTabLabelWrapper} from './tab-label-wrapper';
import {RIGHT_ARROW, LEFT_ARROW, ENTER} from '../core/keyboard/keycodes';
import {FakeViewportRuler} from '../core/overlay/position/fake-viewport-ruler';
import {ViewportRuler} from '../core/overlay/position/viewport-ruler';
import {dispatchKeyboardEvent} from '../core/testing/dispatch-events';
import {dispatchFakeEvent} from '../core/testing/dispatch-events';
import {dispatchFakeEvent, dispatchKeyboardEvent} from '@angular/cdk/testing';
import {Subject} from 'rxjs/Subject';
import {By} from '@angular/platform-browser';
+1 -1
View File
@@ -5,7 +5,7 @@ import {Component, ViewChild} from '@angular/core';
import {By} from '@angular/platform-browser';
import {ViewportRuler} from '../../core/overlay/position/viewport-ruler';
import {FakeViewportRuler} from '../../core/overlay/position/fake-viewport-ruler';
import {dispatchFakeEvent, dispatchMouseEvent} from '../../core/testing/dispatch-events';
import {dispatchFakeEvent, dispatchMouseEvent} from '@angular/cdk/testing';
import {Direction, Directionality} from '../../core/bidi/index';
import {Subject} from 'rxjs/Subject';
+1 -1
View File
@@ -19,7 +19,7 @@ import {TooltipPosition, MdTooltip, MdTooltipModule, SCROLL_THROTTLE_MS} from '.
import {Directionality, Direction} from '../core/bidi/index';
import {OverlayModule, Scrollable, OverlayContainer} from '../core/overlay/index';
import {Platform} from '../core/platform/platform';
import {dispatchFakeEvent} from '../core/testing/dispatch-events';
import {dispatchFakeEvent} from '@angular/cdk/testing';
const initialTooltipMessage = 'initial tooltip message';
+5 -1
View File
@@ -9,7 +9,11 @@
"target": "es5",
"types": ["jasmine"],
"experimentalDecorators": true,
"strictNullChecks": true
"strictNullChecks": true,
"paths": {
"@angular/cdk": ["../../dist/packages/cdk"],
"@angular/cdk/testing": ["../../dist/packages/cdk/testing"]
}
},
"include": [
"**/*.spec.ts",
+2 -1
View File
@@ -16,7 +16,8 @@
"baseUrl": ".",
"paths": {
"@angular/material": ["./lib/public_api.ts"],
"@angular/cdk": ["./cdk/public_api.ts"]
"@angular/cdk": ["./cdk/public_api.ts"],
"@angular/cdk/testing": ["./cdk/testing"]
}
},
"exclude": [
+1
View File
@@ -49,6 +49,7 @@ System.config({
// TODO(devversion): replace once the index.ts file for the Material package has been added.
'@angular/material': 'dist/packages/material/public_api.js',
'@angular/cdk': 'dist/packages/cdk/index.js',
'@angular/cdk/testing': 'dist/packages/cdk/testing/index.js',
},
packages: {
// Thirdparty barrels.