From 9b233a7bfea2e61452cce5e020f7d08c04adbe97 Mon Sep 17 00:00:00 2001 From: Michal Miszczyszyn Date: Wed, 13 May 2015 16:23:27 +0200 Subject: [PATCH] fix(ngAria): Ensure aria-hidden attribute is always "true" or "false" Currently when using ngAria with and ng-hide directive, when value passed to ng-hide is not boolean, aria-hidden attribute is set to an invalid value. This fix ensures aria-hidden attribute is always either "true" or "false". --- src/ngAria/aria.js | 4 +--- test/ngAria/ariaSpec.js | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/ngAria/aria.js b/src/ngAria/aria.js index 8c136676d4ad..11eece27f097 100644 --- a/src/ngAria/aria.js +++ b/src/ngAria/aria.js @@ -115,9 +115,7 @@ function $AriaProvider() { var ariaCamelName = attr.$normalize(ariaAttr); if (config[ariaCamelName] && !attr[ariaCamelName]) { scope.$watch(attr[attrName], function(boolVal) { - if (negate) { - boolVal = !boolVal; - } + boolVal = negate ? !boolVal : !!boolVal; elem.attr(ariaAttr, boolVal); }); } diff --git a/test/ngAria/ariaSpec.js b/test/ngAria/ariaSpec.js index 8bfe301123e6..67c76afcfa9e 100644 --- a/test/ngAria/ariaSpec.js +++ b/test/ngAria/ariaSpec.js @@ -57,6 +57,31 @@ describe('$aria', function() { scope.$apply('val = true'); expect(element.attr('aria-hidden')).toBe('userSetValue'); }); + + it('should always set aria-hidden to a boolean value', function() { + compileElement('
'); + + scope.$apply('val = "test angular"'); + expect(element.attr('aria-hidden')).toBe('true'); + + scope.$apply('val = null'); + expect(element.attr('aria-hidden')).toBe('false'); + + scope.$apply('val = {}'); + expect(element.attr('aria-hidden')).toBe('true'); + + + compileElement('
'); + + scope.$apply('val = "test angular"'); + expect(element.attr('aria-hidden')).toBe('false'); + + scope.$apply('val = null'); + expect(element.attr('aria-hidden')).toBe('true'); + + scope.$apply('val = {}'); + expect(element.attr('aria-hidden')).toBe('false'); + }); });