From 9e30baad3feafc82fb2f2011fd3f21909f4ba29e Mon Sep 17 00:00:00 2001 From: Igor Minar Date: Wed, 16 Feb 2011 19:48:21 -0500 Subject: resources should not over-encode chars in url path - added encodeUriSegment that properly encodes only those chars that URI RFC requires us to encode - modified Resource to use encodeUriSegment --- test/AngularSpec.js | 22 ++++++++++++++++++++++ test/ResourceSpec.js | 13 ++++++++++++- 2 files changed, 34 insertions(+), 1 deletion(-) (limited to 'test') diff --git a/test/AngularSpec.js b/test/AngularSpec.js index 8753d887..5b7e33fd 100644 --- a/test/AngularSpec.js +++ b/test/AngularSpec.js @@ -139,6 +139,28 @@ describe('angular', function(){ }); + describe('encodeUriSegment', function() { + it('should correctly encode uri segment and not encode chars defined as pchar set in rfc2396', + function() { + //don't encode alphanum + expect(encodeUriSegment('asdf1234asdf')). + toEqual('asdf1234asdf'); + + //don't encode unreserved' + expect(encodeUriSegment("-_.!~*'() -_.!~*'()")). + toEqual("-_.!~*'()%20-_.!~*'()"); + + //don't encode the rest of pchar' + expect(encodeUriSegment(':@&=+$, :@&=+$,')). + toEqual(':@&=+$,%20:@&=+$,'); + + //encode '/', ';' and ' '' + expect(encodeUriSegment('/; /;')). + toEqual('%2F%3B%20%2F%3B'); + }); + }); + + describe ('rngScript', function() { it('should match angular.js', function() { expect('angular.js'.match(rngScript)).not.toBeNull(); diff --git a/test/ResourceSpec.js b/test/ResourceSpec.js index adc93b92..c93bdafb 100644 --- a/test/ResourceSpec.js +++ b/test/ResourceSpec.js @@ -43,11 +43,22 @@ describe("resource", function() { it('should correctly encode url params', function(){ var R = resource.route('/Path/:a'); xhr.expectGET('/Path/foo%231').respond({}); - xhr.expectGET('/Path/doh!%40foo?bar=baz%231').respond({}); + xhr.expectGET('/Path/doh!@foo?bar=baz%231').respond({}); R.get({a: 'foo#1'}); R.get({a: 'doh!@foo', bar: 'baz#1'}); }); + it('should not encode @ in url params', function() { + //encodeURIComponent is too agressive and doesn't follow http://www.ietf.org/rfc/rfc2396.txt + //with regards to the character set (pchar) allowed in path segments + //so we need this test to make sure that we don't over-encode the params and break stuff like + //buzz api which uses @self + + var R = resource.route('/Path/:a'); + xhr.expectGET('/Path/doh@foo?bar=baz@1').respond({}); + R.get({a: 'doh@foo', bar: 'baz@1'}); + }) + it("should build resource with default param", function(){ xhr.expectGET('/Order/123/Line/456.visa?minimum=0.05').respond({id:'abc'}); var LineItem = resource.route('/Order/:orderId/Line/:id:verb', {orderId: '123', id: '@id.key', verb:'.visa', minimum:0.05}); -- cgit v1.2.3