@dbg-riskit/angular-testing
Version:
60 lines • 7.77 kB
JavaScript
import { tick } from '@angular/core/testing';
/** Button events to pass to `DebugElement.triggerEventHandler` for RouterLink event handler */
export const BUTTON_CLICK_EVENTS = {
left: { button: 0 },
right: { button: 2 }
};
/** Simulate element click. Defaults to mouse left-button click event. */
export function click(el, eventObj = BUTTON_CLICK_EVENTS.left) {
if (el instanceof HTMLElement) {
el.click();
}
else {
el.triggerEventHandler('click', eventObj);
}
}
export function setNgModelValue(element, value, realAsync = false) {
if (!(element.nativeElement instanceof HTMLInputElement)) {
throw new Error('Not an instance of HTMLInputElement');
}
const input = element.nativeElement;
input.value = value;
dispatchEvent(input, 'input'); // tell Angular
if (!realAsync) {
tick();
}
}
export function setNgModelSelectValue(element, selectedIndex, realAsync = false) {
if (!(element.nativeElement instanceof HTMLSelectElement)) {
throw new Error('Not an instance of HTMLInputElement');
}
const input = element.nativeElement;
input.selectedIndex = selectedIndex;
dispatchEvent(input, 'change'); // tell Angular
if (!realAsync) {
tick();
}
}
export function dispatchEvent(element, eventName) {
if (element instanceof HTMLElement) {
element.dispatchEvent(newEvent(eventName));
}
else if (element instanceof Window) {
element.dispatchEvent(newEvent(eventName));
}
else {
element.nativeElement.dispatchEvent(newEvent(eventName));
}
}
/**
* Create custom DOM event the old fashioned way
*
* https://developer.mozilla.org/en-US/docs/Web/API/Event/initEvent
* Although officially deprecated, some browsers (phantom) don't accept the preferred "new Event(eventName)"
*/
export function newEvent(eventName, bubbles = false, cancelable = false) {
const evt = document.createEvent('CustomEvent'); // MUST be 'CustomEvent'
evt.initCustomEvent(eventName, bubbles, cancelable, null);
return evt;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGtnL2RiZy1yaXNraXQvYW5ndWxhci10ZXN0aW5nL3NyYy9saWIvZXZlbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUUzQywrRkFBK0Y7QUFDL0YsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUc7SUFDL0IsSUFBSSxFQUFHLEVBQUMsTUFBTSxFQUFFLENBQUMsRUFBQztJQUNsQixLQUFLLEVBQUUsRUFBQyxNQUFNLEVBQUUsQ0FBQyxFQUFDO0NBQ3JCLENBQUM7QUFFRix5RUFBeUU7QUFDekUsTUFBTSxVQUFVLEtBQUssQ0FBQyxFQUE4QixFQUFFLFdBQWdCLG1CQUFtQixDQUFDLElBQUk7SUFDMUYsSUFBSSxFQUFFLFlBQVksV0FBVyxFQUFFO1FBQzNCLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztLQUNkO1NBQU07UUFDSCxFQUFFLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0tBQzdDO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSxlQUFlLENBQUMsT0FBcUIsRUFBRSxLQUFhLEVBQUUsU0FBUyxHQUFHLEtBQUs7SUFDbkYsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsWUFBWSxnQkFBZ0IsQ0FBQyxFQUFFO1FBQ3RELE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQztLQUMxRDtJQUNELE1BQU0sS0FBSyxHQUFxQixPQUFPLENBQUMsYUFBYSxDQUFDO0lBQ3RELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBRXBCLGFBQWEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxlQUFlO0lBQzlDLElBQUksQ0FBQyxTQUFTLEVBQUU7UUFDWixJQUFJLEVBQUUsQ0FBQztLQUNWO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxPQUFxQixFQUFFLGFBQXFCLEVBQUUsU0FBUyxHQUFHLEtBQUs7SUFDakcsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsWUFBWSxpQkFBaUIsQ0FBQyxFQUFFO1FBQ3ZELE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQztLQUMxRDtJQUNELE1BQU0sS0FBSyxHQUFzQixPQUFPLENBQUMsYUFBYSxDQUFDO0lBQ3ZELEtBQUssQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO0lBRXBDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxlQUFlO0lBQy9DLElBQUksQ0FBQyxTQUFTLEVBQUU7UUFDWixJQUFJLEVBQUUsQ0FBQztLQUNWO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsT0FBNEMsRUFBRSxTQUFpQjtJQUN6RixJQUFJLE9BQU8sWUFBWSxXQUFXLEVBQUU7UUFDaEMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztLQUM5QztTQUFNLElBQUksT0FBTyxZQUFZLE1BQU0sRUFBRTtRQUNsQyxPQUFPLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0tBQzlDO1NBQU07UUFDSCxPQUFPLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztLQUM1RDtBQUNMLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxRQUFRLENBQUMsU0FBaUIsRUFBRSxPQUFPLEdBQUcsS0FBSyxFQUFFLFVBQVUsR0FBRyxLQUFLO0lBQzNFLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBRSx3QkFBd0I7SUFDMUUsR0FBRyxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMxRCxPQUFPLEdBQUcsQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RlYnVnRWxlbWVudH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7dGlja30gZnJvbSAnQGFuZ3VsYXIvY29yZS90ZXN0aW5nJztcblxuLyoqIEJ1dHRvbiBldmVudHMgdG8gcGFzcyB0byBgRGVidWdFbGVtZW50LnRyaWdnZXJFdmVudEhhbmRsZXJgIGZvciBSb3V0ZXJMaW5rIGV2ZW50IGhhbmRsZXIgKi9cbmV4cG9ydCBjb25zdCBCVVRUT05fQ0xJQ0tfRVZFTlRTID0ge1xuICAgIGxlZnQgOiB7YnV0dG9uOiAwfSxcbiAgICByaWdodDoge2J1dHRvbjogMn1cbn07XG5cbi8qKiBTaW11bGF0ZSBlbGVtZW50IGNsaWNrLiBEZWZhdWx0cyB0byBtb3VzZSBsZWZ0LWJ1dHRvbiBjbGljayBldmVudC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGljayhlbDogRGVidWdFbGVtZW50IHwgSFRNTEVsZW1lbnQsIGV2ZW50T2JqOiBhbnkgPSBCVVRUT05fQ0xJQ0tfRVZFTlRTLmxlZnQpOiB2b2lkIHtcbiAgICBpZiAoZWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICBlbC5jbGljaygpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGVsLnRyaWdnZXJFdmVudEhhbmRsZXIoJ2NsaWNrJywgZXZlbnRPYmopO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldE5nTW9kZWxWYWx1ZShlbGVtZW50OiBEZWJ1Z0VsZW1lbnQsIHZhbHVlOiBzdHJpbmcsIHJlYWxBc3luYyA9IGZhbHNlKTogdm9pZCB7XG4gICAgaWYgKCEoZWxlbWVudC5uYXRpdmVFbGVtZW50IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgYW4gaW5zdGFuY2Ugb2YgSFRNTElucHV0RWxlbWVudCcpO1xuICAgIH1cbiAgICBjb25zdCBpbnB1dDogSFRNTElucHV0RWxlbWVudCA9IGVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICBpbnB1dC52YWx1ZSA9IHZhbHVlO1xuXG4gICAgZGlzcGF0Y2hFdmVudChpbnB1dCwgJ2lucHV0Jyk7IC8vIHRlbGwgQW5ndWxhclxuICAgIGlmICghcmVhbEFzeW5jKSB7XG4gICAgICAgIHRpY2soKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXROZ01vZGVsU2VsZWN0VmFsdWUoZWxlbWVudDogRGVidWdFbGVtZW50LCBzZWxlY3RlZEluZGV4OiBudW1iZXIsIHJlYWxBc3luYyA9IGZhbHNlKTogdm9pZCB7XG4gICAgaWYgKCEoZWxlbWVudC5uYXRpdmVFbGVtZW50IGluc3RhbmNlb2YgSFRNTFNlbGVjdEVsZW1lbnQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGFuIGluc3RhbmNlIG9mIEhUTUxJbnB1dEVsZW1lbnQnKTtcbiAgICB9XG4gICAgY29uc3QgaW5wdXQ6IEhUTUxTZWxlY3RFbGVtZW50ID0gZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgIGlucHV0LnNlbGVjdGVkSW5kZXggPSBzZWxlY3RlZEluZGV4O1xuXG4gICAgZGlzcGF0Y2hFdmVudChpbnB1dCwgJ2NoYW5nZScpOyAvLyB0ZWxsIEFuZ3VsYXJcbiAgICBpZiAoIXJlYWxBc3luYykge1xuICAgICAgICB0aWNrKCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGlzcGF0Y2hFdmVudChlbGVtZW50OiBEZWJ1Z0VsZW1lbnQgfCBIVE1MRWxlbWVudCB8IFdpbmRvdywgZXZlbnROYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXdFdmVudChldmVudE5hbWUpKTtcbiAgICB9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBXaW5kb3cpIHtcbiAgICAgICAgZWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ld0V2ZW50KGV2ZW50TmFtZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ld0V2ZW50KGV2ZW50TmFtZSkpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBDcmVhdGUgY3VzdG9tIERPTSBldmVudCB0aGUgb2xkIGZhc2hpb25lZCB3YXlcbiAqXG4gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRXZlbnQvaW5pdEV2ZW50XG4gKiBBbHRob3VnaCBvZmZpY2lhbGx5IGRlcHJlY2F0ZWQsIHNvbWUgYnJvd3NlcnMgKHBoYW50b20pIGRvbid0IGFjY2VwdCB0aGUgcHJlZmVycmVkIFwibmV3IEV2ZW50KGV2ZW50TmFtZSlcIlxuICovXG5leHBvcnQgZnVuY3Rpb24gbmV3RXZlbnQoZXZlbnROYW1lOiBzdHJpbmcsIGJ1YmJsZXMgPSBmYWxzZSwgY2FuY2VsYWJsZSA9IGZhbHNlKTogQ3VzdG9tRXZlbnQge1xuICAgIGNvbnN0IGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdDdXN0b21FdmVudCcpOyAgLy8gTVVTVCBiZSAnQ3VzdG9tRXZlbnQnXG4gICAgZXZ0LmluaXRDdXN0b21FdmVudChldmVudE5hbWUsIGJ1YmJsZXMsIGNhbmNlbGFibGUsIG51bGwpO1xuICAgIHJldHVybiBldnQ7XG59XG4iXX0=