mirror of
https://github.com/zhigang1992/angular.js.git
synced 2026-04-18 12:08:17 +08:00
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
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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});
|
||||
|
||||
Reference in New Issue
Block a user