From 991300b86cca47fe5162b7fd3423aac4a2eca191 Mon Sep 17 00:00:00 2001 From: Trotyl Date: Sat, 17 Feb 2018 21:00:05 +0800 Subject: [PATCH] feat(platform-browser): do not throw error when Hammer.js not loaded (#22257) closes #16992 PR Close #22257 --- .../src/dom/events/hammer_gestures.ts | 8 +++++--- .../test/dom/events/hammer_gestures_spec.ts | 17 +++++++++++++++-- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/packages/platform-browser/src/dom/events/hammer_gestures.ts b/packages/platform-browser/src/dom/events/hammer_gestures.ts index de154534e8..c4c6856b95 100644 --- a/packages/platform-browser/src/dom/events/hammer_gestures.ts +++ b/packages/platform-browser/src/dom/events/hammer_gestures.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ -import {Inject, Injectable, InjectionToken} from '@angular/core'; +import {Inject, Injectable, InjectionToken, ɵConsole as Console} from '@angular/core'; import {DOCUMENT} from '../dom_tokens'; @@ -99,7 +99,8 @@ export class HammerGestureConfig { export class HammerGesturesPlugin extends EventManagerPlugin { constructor( @Inject(DOCUMENT) doc: any, - @Inject(HAMMER_GESTURE_CONFIG) private _config: HammerGestureConfig) { + @Inject(HAMMER_GESTURE_CONFIG) private _config: HammerGestureConfig, + private console: Console) { super(doc); } @@ -109,7 +110,8 @@ export class HammerGesturesPlugin extends EventManagerPlugin { } if (!(window as any).Hammer) { - throw new Error(`Hammer.js is not loaded, can not bind ${eventName} event`); + this.console.warn(`Hammer.js is not loaded, can not bind '${eventName}' event.`); + return false; } return true; diff --git a/packages/platform-browser/test/dom/events/hammer_gestures_spec.ts b/packages/platform-browser/test/dom/events/hammer_gestures_spec.ts index 549161065c..10d8a82d95 100644 --- a/packages/platform-browser/test/dom/events/hammer_gestures_spec.ts +++ b/packages/platform-browser/test/dom/events/hammer_gestures_spec.ts @@ -10,14 +10,27 @@ import {HammerGestureConfig, HammerGesturesPlugin} from '@angular/platform-brows { describe('HammerGesturesPlugin', () => { + let plugin: HammerGesturesPlugin; + let mockConsole: any; if (isNode) return; - it('should implement addGlobalEventListener', () => { - const plugin = new HammerGesturesPlugin(document, new HammerGestureConfig()); + beforeEach(() => { + mockConsole = {warn: () => {}}; + plugin = new HammerGesturesPlugin(document, new HammerGestureConfig(), mockConsole); + }); + it('should implement addGlobalEventListener', () => { spyOn(plugin, 'addEventListener').and.callFake(() => {}); expect(() => plugin.addGlobalEventListener('document', 'swipe', () => {})).not.toThrowError(); }); + + it('shoud warn user and do nothing when Hammer.js not loaeded', () => { + spyOn(mockConsole, 'warn'); + + expect(plugin.supports('swipe')).toBe(false); + expect(mockConsole.warn) + .toHaveBeenCalledWith(`Hammer.js is not loaded, can not bind 'swipe' event.`); + }); }); }