From 8a647ef3593f8b821fe2c416886b2846bb9b24c1 Mon Sep 17 00:00:00 2001 From: Georgios Kalpakas Date: Thu, 28 Apr 2016 15:11:15 +0300 Subject: [PATCH] fix($injector): fix class detection RegExp Mentioned in https://github.com/angular/angular.js/pull/14531#discussion_r61410683. --- src/auto/injector.js | 6 +++--- test/auto/injectorSpec.js | 20 ++++++++++++++++++++ 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/auto/injector.js b/src/auto/injector.js index c868639dfa9a..ff9bff5bb0b6 100644 --- a/src/auto/injector.js +++ b/src/auto/injector.js @@ -851,9 +851,9 @@ function createInjector(modulesToLoad, strictDi) { } var result = func.$$ngIsClass; if (!isBoolean(result)) { - // Workaround for MS Edge. - // Check https://connect.microsoft.com/IE/Feedback/Details/2211653 - result = func.$$ngIsClass = /^(?:class\s|constructor\()/.test(stringifyFn(func)); + // Support: Edge 12-13 only + // See: https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/6156135/ + result = func.$$ngIsClass = /^(?:class\b|constructor\()/.test(stringifyFn(func)); } return result; } diff --git a/test/auto/injectorSpec.js b/test/auto/injectorSpec.js index 85b80874ba11..b295c3510a9e 100644 --- a/test/auto/injectorSpec.js +++ b/test/auto/injectorSpec.js @@ -302,6 +302,26 @@ describe('injector', function() { expect(instance.aVal()).toEqual('a-value'); }); + if (/chrome/.test(navigator.userAgent)) { + they('should detect ES6 classes regardless of whitespace/comments ($prop)', [ + 'class Test {}', + 'class Test{}', + 'class //<--ES6 stuff\nTest {}', + 'class//<--ES6 stuff\nTest {}', + 'class {}', + 'class{}', + 'class //<--ES6 stuff\n {}', + 'class//<--ES6 stuff\n {}', + 'class/* Test */{}', + 'class /* Test */ {}' + ], function(classDefinition) { + var Clazz = eval('(' + classDefinition + ')'); + var instance = injector.invoke(Clazz); + + expect(instance).toEqual(jasmine.any(Clazz)); + }); + } + // Support: Chrome 50-51 only // TODO (gkalpak): Remove when Chrome v52 is relased. // it('should be able to invoke classes', function() {