diff options
| author | Andrew McLeod | 2013-02-25 21:25:18 -0800 |
|---|---|---|
| committer | Igor Minar | 2013-02-26 17:25:15 -0800 |
| commit | 86d191ed4aea9015adc71b852223475c5c762c34 (patch) | |
| tree | 2d07565c9be92371890595c5dcce5071cef9d53f | |
| parent | c38c1c503074af1b0aae7498b9381cb90cd63958 (diff) | |
| download | angular.js-86d191ed4aea9015adc71b852223475c5c762c34.tar.bz2 | |
fix($http): don't encode URL query substring "null" to "+"
Fixes issue in encodeUriQuery used by $http and $resource that
treats null as a string and replaces the characters "null" with "+".
| -rw-r--r-- | src/Angular.js | 2 | ||||
| -rw-r--r-- | src/ngResource/resource.js | 2 | ||||
| -rw-r--r-- | test/AngularSpec.js | 16 | ||||
| -rw-r--r-- | test/ngResource/resourceSpec.js | 6 |
4 files changed, 20 insertions, 6 deletions
diff --git a/src/Angular.js b/src/Angular.js index 6ea5d1ad..5de57075 100644 --- a/src/Angular.js +++ b/src/Angular.js @@ -875,7 +875,7 @@ function encodeUriQuery(val, pctEncodeSpaces) { replace(/%3A/gi, ':'). replace(/%24/g, '$'). replace(/%2C/gi, ','). - replace((pctEncodeSpaces ? null : /%20/g), '+'); + replace(/%20/g, (pctEncodeSpaces ? '%20' : '+')); } diff --git a/src/ngResource/resource.js b/src/ngResource/resource.js index 0bcf4cce..ca92e629 100644 --- a/src/ngResource/resource.js +++ b/src/ngResource/resource.js @@ -300,7 +300,7 @@ angular.module('ngResource', ['ng']). replace(/%3A/gi, ':'). replace(/%24/g, '$'). replace(/%2C/gi, ','). - replace((pctEncodeSpaces ? null : /%20/g), '+'); + replace(/%20/g, (pctEncodeSpaces ? '%20' : '+')); } function Route(template, defaults) { diff --git a/test/AngularSpec.js b/test/AngularSpec.js index aed191e7..cc752b6c 100644 --- a/test/AngularSpec.js +++ b/test/AngularSpec.js @@ -415,6 +415,14 @@ describe('angular', function() { //encode ' ' as '%20' when a flag is used expect(encodeUriQuery(' ', true)). toEqual('%20%20'); + + //do not encode `null` as '+' when flag is used + expect(encodeUriQuery('null', true)). + toEqual('null'); + + //do not encode `null` with no flag + expect(encodeUriQuery('null')). + toEqual('null'); }); }); @@ -673,7 +681,7 @@ describe('angular', function() { toBe('<ng-abc x="2A">'); }); }); - + describe('startingTag', function() { it('should allow passing in Nodes instead of Elements', function() { var txtNode = document.createTextNode('some text'); @@ -741,11 +749,11 @@ describe('angular', function() { describe('noConflict', function() { var globalAngular; beforeEach(function() { - globalAngular = angular; + globalAngular = angular; }); afterEach(function() { - angular = globalAngular; + angular = globalAngular; }); it('should return angular', function() { @@ -757,7 +765,7 @@ describe('angular', function() { var a = angular.noConflict(); expect(angular).toBeUndefined(); }); - + }); }); diff --git a/test/ngResource/resourceSpec.js b/test/ngResource/resourceSpec.js index 3f2df284..e5366f4f 100644 --- a/test/ngResource/resourceSpec.js +++ b/test/ngResource/resourceSpec.js @@ -136,6 +136,12 @@ describe("resource", function() { R.get({a: 'doh&foo', bar: ['baz1', 'baz2']}); }); + it('should not encode string "null" to "+" in url params', function() { + var R = $resource('/Path/:a'); + $httpBackend.expect('GET', '/Path/null').respond('{}'); + R.get({a: 'null'}); + }); + it('should allow relative paths in resource url', function () { var R = $resource(':relativePath'); $httpBackend.expect('GET', 'data.json').respond('{}'); |
