From dfe99836cd98c2a1b0f9bde6216bd44088de275a Mon Sep 17 00:00:00 2001 From: Igor Minar Date: Sat, 11 Aug 2012 00:13:10 -0700 Subject: fix($compile): denormalize directive templates Since developers are allowed to customize start/end interpolation strings, but third-party directive creators don't know about these customizations, we should standardize on {{ }} in templates of reusable (third-party) directives. During the compilation, these templates are then denormalized to use whatever the custom start/end symbol is, effectively translating the template into the syntax of the runtime environment. This addresses an issue raised at http://goo.gl/e8VPV Existing code should not be affected by this change since project that do use custom interpolation markers are not expected to use {{ }} in existing directive templates. --- test/ng/compileSpec.js | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to 'test/ng/compileSpec.js') diff --git a/test/ng/compileSpec.js b/test/ng/compileSpec.js index cbf84a38..3d6144ac 100644 --- a/test/ng/compileSpec.js +++ b/test/ng/compileSpec.js @@ -1372,6 +1372,47 @@ describe('$compile', function() { '' + ''); })); + + + it('should support custom start/end interpolation symbols in template and directive template', + function() { + module(function($interpolateProvider, $compileProvider) { + $interpolateProvider.startSymbol('##').endSymbol(']]'); + $compileProvider.directive('myDirective', function() { + return { + template: '{{hello}}|{{hello|uppercase}}' + }; + }); + }); + + inject(function($compile, $rootScope) { + element = $compile('
##hello|uppercase]]|
')($rootScope); + $rootScope.hello = 'ahoj'; + $rootScope.$digest(); + expect(element.text()).toBe('AHOJ|ahoj|AHOJ'); + }); + }); + + + it('should support custom start/end interpolation symbols in async directive template', + function() { + module(function($interpolateProvider, $compileProvider) { + $interpolateProvider.startSymbol('##').endSymbol(']]'); + $compileProvider.directive('myDirective', function() { + return { + templateUrl: 'myDirective.html' + }; + }); + }); + + inject(function($compile, $rootScope, $templateCache) { + $templateCache.put('myDirective.html', '{{hello}}|{{hello|uppercase}}'); + element = $compile('
##hello|uppercase]]|
')($rootScope); + $rootScope.hello = 'ahoj'; + $rootScope.$digest(); + expect(element.text()).toBe('AHOJ|ahoj|AHOJ'); + }); + }); }); -- cgit v1.2.3