1049 lines
36 KiB
JavaScript
1049 lines
36 KiB
JavaScript
// Copyright 2006 The Closure Library Authors. All Rights Reserved.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS-IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
/**
|
|
* @fileoverview Unit tests for goog.Uri.
|
|
*
|
|
*/
|
|
|
|
goog.provide('goog.UriTest');
|
|
|
|
goog.require('goog.Uri');
|
|
goog.require('goog.testing.jsunit');
|
|
|
|
goog.setTestOnly('goog.UriTest');
|
|
|
|
function testUriParse() {
|
|
var uri = new goog.Uri('http://www.google.com:80/path?q=query#fragmento');
|
|
assertEquals('http', uri.getScheme());
|
|
assertEquals('', uri.getUserInfo());
|
|
assertEquals('www.google.com', uri.getDomain());
|
|
assertEquals(80, uri.getPort());
|
|
assertEquals('/path', uri.getPath());
|
|
assertEquals('q=query', uri.getQuery());
|
|
assertEquals('fragmento', uri.getFragment());
|
|
|
|
assertEquals('terer258+foo@gmail.com',
|
|
goog.Uri.parse('mailto:terer258+foo@gmail.com').getPath());
|
|
}
|
|
|
|
function testUriParseAcceptsThingsWithToString() {
|
|
// Ensure that the goog.Uri constructor coerces random types to strings.
|
|
var uriStr = 'http://www.google.com:80/path?q=query#fragmento';
|
|
var uri = new goog.Uri({toString: function() { return uriStr; }});
|
|
assertEquals('http://www.google.com:80/path?q=query#fragmento',
|
|
uri.toString());
|
|
}
|
|
|
|
function testUriCreate() {
|
|
assertEquals(
|
|
'http://www.google.com:81/search%20path?q=what%20to%20eat%2Bdrink%3F',
|
|
goog.Uri.create('http', null, 'www.google.com', 81, '/search path',
|
|
(new goog.Uri.QueryData).set('q', 'what to eat+drink?'), null)
|
|
.toString());
|
|
|
|
assertEquals(
|
|
'http://www.google.com:80/search%20path?q=what%20to%20eat%2Bdrink%3F',
|
|
goog.Uri.create('http', null, 'www.google.com', 80, '/search path',
|
|
(new goog.Uri.QueryData).set('q', 'what to eat+drink?'), null)
|
|
.toString());
|
|
|
|
assertEquals(
|
|
'http://www.google.com/search%20path?q=what%20to%20eat%2Bdrink%3F',
|
|
goog.Uri.create('http', null, 'www.google.com', null, '/search path',
|
|
(new goog.Uri.QueryData).set('q', 'what to eat+drink?'), null)
|
|
.toString());
|
|
|
|
var createdUri = goog.Uri.create(
|
|
'http', null, 'www.google.com', null, '/search path',
|
|
new goog.Uri.QueryData(null, null, true).set('Q', 'what to eat+drink?'),
|
|
null);
|
|
|
|
assertEquals('http://www.google.com/search%20path?q=what%20to%20eat%2Bdrink%3F',
|
|
createdUri.toString());
|
|
}
|
|
|
|
function testClone() {
|
|
var uri1 = new goog.Uri(
|
|
'http://user:pass@www.google.com:8080/foo?a=1&b=2#c=3');
|
|
// getCount forces instantiation of internal data structures to more
|
|
// thoroughly test clone.
|
|
uri1.getQueryData().getCount();
|
|
var uri2 = uri1.clone();
|
|
|
|
assertNotEquals(uri1, uri2);
|
|
assertEquals(uri1.toString(), uri2.toString());
|
|
assertEquals(2, uri2.getQueryData().getCount());
|
|
|
|
uri2.setParameterValues('q', 'bar');
|
|
assertFalse(uri1.getParameterValue('q') == 'bar');
|
|
}
|
|
|
|
function testRelativeUris() {
|
|
assertFalse(new goog.Uri('?hello').hasPath());
|
|
}
|
|
|
|
function testAbsolutePathResolution() {
|
|
var uri1 = new goog.Uri('http://www.google.com:8080/path?q=query#fragmento');
|
|
|
|
assertEquals('http://www.google.com:8080/foo',
|
|
uri1.resolve(new goog.Uri('/foo')).toString());
|
|
|
|
assertEquals('http://www.google.com:8080/foo/bar',
|
|
goog.Uri.resolve('http://www.google.com:8080/search/',
|
|
'/foo/bar').toString());
|
|
}
|
|
|
|
function testRelativePathResolution() {
|
|
var uri1 = new goog.Uri('http://www.google.com:8080/path?q=query#fragmento');
|
|
assertEquals('http://www.google.com:8080/foo',
|
|
uri1.resolve(goog.Uri.parse('foo')).toString());
|
|
|
|
var uri2 = new goog.Uri('http://www.google.com:8080/search');
|
|
assertEquals('http://www.google.com:8080/foo/bar',
|
|
uri2.resolve(new goog.Uri('foo/bar')).toString());
|
|
|
|
var uri3 = new goog.Uri('http://www.google.com:8080/search/');
|
|
assertEquals('http://www.google.com:8080/search/foo/bar',
|
|
uri3.resolve(new goog.Uri('foo/bar')).toString());
|
|
|
|
var uri4 = new goog.Uri('foo');
|
|
assertEquals('bar',
|
|
uri4.resolve(new goog.Uri('bar')).toString());
|
|
}
|
|
|
|
function testDomainResolution() {
|
|
assertEquals('https://www.google.com/foo/bar',
|
|
new goog.Uri('https://www.fark.com:443/search/').resolve(
|
|
new goog.Uri('//www.google.com/foo/bar')
|
|
).toString());
|
|
|
|
assertEquals('http://www.google.com/',
|
|
goog.Uri.resolve('http://www.fark.com/search/',
|
|
'//www.google.com/').toString());
|
|
}
|
|
|
|
function testQueryResolution() {
|
|
assertEquals('http://www.google.com/search?q=new%20search',
|
|
goog.Uri.parse('http://www.google.com/search?q=old+search').
|
|
resolve(goog.Uri.parse('?q=new%20search')).toString());
|
|
|
|
assertEquals('http://www.google.com/search?q=new%20search',
|
|
goog.Uri.parse('http://www.google.com/search?q=old+search#hi').
|
|
resolve(goog.Uri.parse('?q=new%20search')).toString());
|
|
}
|
|
|
|
function testFragmentResolution() {
|
|
assertEquals('http://www.google.com/foo/bar?q=hi#there',
|
|
goog.Uri.resolve('http://www.google.com/foo/bar?q=hi',
|
|
'#there').toString());
|
|
|
|
assertEquals('http://www.google.com/foo/bar?q=hi#there',
|
|
goog.Uri.resolve('http://www.google.com/foo/bar?q=hi#you',
|
|
'#there').toString());
|
|
}
|
|
|
|
function testBogusResolution() {
|
|
var uri = goog.Uri.parse('some:base/url').resolve(
|
|
goog.Uri.parse('a://completely.different/url'));
|
|
assertEquals('a://completely.different/url', uri.toString());
|
|
}
|
|
|
|
function testDotSegmentsRemovalRemoveLeadingDots() {
|
|
// Test removing leading "../" and "./"
|
|
assertEquals('bar', goog.Uri.removeDotSegments('../bar'));
|
|
assertEquals('bar', goog.Uri.removeDotSegments('./bar'));
|
|
assertEquals('bar', goog.Uri.removeDotSegments('.././bar'));
|
|
assertEquals('bar', goog.Uri.removeDotSegments('.././bar'));
|
|
}
|
|
|
|
function testDotSegmentRemovalRemoveSingleDot() {
|
|
// Tests replacing "/./" with "/"
|
|
assertEquals('/foo/bar', goog.Uri.removeDotSegments('/foo/./bar'));
|
|
assertEquals('/bar/', goog.Uri.removeDotSegments('/bar/./'));
|
|
|
|
// Test replacing trailing "/." with "/"
|
|
assertEquals('/', goog.Uri.removeDotSegments('/.'));
|
|
assertEquals('/bar/', goog.Uri.removeDotSegments('/bar/.'));
|
|
}
|
|
|
|
function testDotSegmentRemovalRemoveDoubleDot() {
|
|
// Test resolving "/../"
|
|
assertEquals('/bar', goog.Uri.removeDotSegments('/foo/../bar'));
|
|
assertEquals('/', goog.Uri.removeDotSegments('/bar/../'));
|
|
|
|
// Test resolving trailing "/.."
|
|
assertEquals('/', goog.Uri.removeDotSegments('/..'));
|
|
assertEquals('/', goog.Uri.removeDotSegments('/bar/..'));
|
|
assertEquals('/foo/', goog.Uri.removeDotSegments('/foo/bar/..'));
|
|
}
|
|
|
|
function testDotSegmentRemovalRemovePlainDots() {
|
|
// RFC 3986, section 5.2.4, point 2.D.
|
|
// Test resolving plain ".." or "."
|
|
assertEquals('', goog.Uri.removeDotSegments('.'));
|
|
assertEquals('', goog.Uri.removeDotSegments('..'));
|
|
}
|
|
|
|
function testPathConcatenation() {
|
|
// Check accordenance with RFC 3986, section 5.2.4
|
|
assertResolvedEquals('bar', '', 'bar');
|
|
assertResolvedEquals('/bar', '/', 'bar');
|
|
assertResolvedEquals('/bar', '/foo', '/bar');
|
|
assertResolvedEquals('/foo/foo', '/foo/bar', 'foo');
|
|
}
|
|
|
|
function testPathConcatenationDontRemoveForEmptyUri() {
|
|
// Resolving URIs with empty path should not result in dot segments removal.
|
|
// See: algorithm in section 5.2.2: code inside 'if (R.path == "")' clause.
|
|
assertResolvedEquals('/search/../foo', '/search/../foo', '');
|
|
assertResolvedEquals('/search/./foo', '/search/./foo', '');
|
|
}
|
|
|
|
function testParameterGetters() {
|
|
function assertArraysEqual(l1, l2) {
|
|
if (!l1 || !l2) {
|
|
assertEquals(l1, l2);
|
|
return;
|
|
}
|
|
var l1s = l1.toString(), l2s = l2.toString();
|
|
assertEquals(l1s, l2s);
|
|
assertEquals(l1s, l1.length, l2.length);
|
|
for (var i = 0; i < l1.length; ++i) {
|
|
assertEquals('part ' + i + ' of ' + l1.length + ' in ' + l1s,
|
|
l1[i], l2[i]);
|
|
}
|
|
}
|
|
|
|
assertArraysEqual(['v1', 'v2'],
|
|
goog.Uri.parse('/path?a=b&key=v1&c=d&key=v2&keywithsuffix=v3').
|
|
getParameterValues('key'));
|
|
|
|
assertArraysEqual(['v1', 'v2'],
|
|
goog.Uri.parse('/path?a=b&keY=v1&c=d&KEy=v2&keywithsuffix=v3', true).
|
|
getParameterValues('kEy'));
|
|
|
|
assertEquals('v1',
|
|
goog.Uri.parse('/path?key=v1&c=d&keywithsuffix=v3&key=v2').
|
|
getParameterValue('key'));
|
|
|
|
assertEquals('v1',
|
|
goog.Uri.parse('/path?kEY=v1&c=d&keywithsuffix=v3&key=v2', true).
|
|
getParameterValue('Key'));
|
|
|
|
assertEquals('v1=v2',
|
|
goog.Uri.parse('/path?key=v1=v2', true).getParameterValue('key'));
|
|
|
|
assertEquals('v1=v2=v3',
|
|
goog.Uri.parse('/path?key=v1=v2=v3', true).getParameterValue('key'));
|
|
|
|
assertArraysEqual(undefined,
|
|
goog.Uri.parse('/path?key=v1&c=d&keywithsuffix=v3&key=v2').
|
|
getParameterValue('nosuchkey'));
|
|
|
|
// test boundary conditions
|
|
assertArraysEqual(['v1', 'v2'],
|
|
goog.Uri.parse('/path?key=v1&c=d&key=v2&keywithsuffix=v3').
|
|
getParameterValues('key'));
|
|
assertArraysEqual(['v1', 'v2'],
|
|
goog.Uri.parse('/path?key=v1&c=d&keywithsuffix=v3&key=v2').
|
|
getParameterValues('key'));
|
|
|
|
// test no =
|
|
assertArraysEqual([''],
|
|
goog.Uri.parse('/path?key').getParameterValues('key'));
|
|
assertArraysEqual([''],
|
|
goog.Uri.parse('/path?key', true).getParameterValues('key'));
|
|
|
|
assertArraysEqual([''],
|
|
goog.Uri.parse('/path?foo=bar&key').
|
|
getParameterValues('key'));
|
|
assertArraysEqual([''],
|
|
goog.Uri.parse('/path?foo=bar&key', true).
|
|
getParameterValues('key'));
|
|
|
|
assertEquals('',
|
|
goog.Uri.parse('/path?key').getParameterValue('key'));
|
|
assertEquals('',
|
|
goog.Uri.parse('/path?key', true).getParameterValue('key'));
|
|
|
|
assertEquals('',
|
|
goog.Uri.parse('/path?foo=bar&key').getParameterValue('key'));
|
|
assertEquals('',
|
|
goog.Uri.parse('/path?foo=bar&key', true).
|
|
getParameterValue('key'));
|
|
|
|
var u = new goog.Uri('/path?a=b&key=v1&c=d&key=v2&keywithsuffix=v3');
|
|
assertArraysEqual(u.getParameterValues('a'), ['b']);
|
|
assertArraysEqual(u.getParameterValues('key'), ['v1', 'v2']);
|
|
assertArraysEqual(u.getParameterValues('c'), ['d']);
|
|
assertArraysEqual(u.getParameterValues('keywithsuffix'), ['v3']);
|
|
assertArraysEqual(u.getParameterValues('KeyWITHSuffix'), []);
|
|
|
|
// Make sure constructing from another URI preserves case-sensitivity
|
|
var u2 = new goog.Uri(u);
|
|
assertArraysEqual(u2.getParameterValues('a'), ['b']);
|
|
assertArraysEqual(u2.getParameterValues('key'), ['v1', 'v2']);
|
|
assertArraysEqual(u2.getParameterValues('c'), ['d']);
|
|
assertArraysEqual(u2.getParameterValues('keywithsuffix'), ['v3']);
|
|
assertArraysEqual(u2.getParameterValues('KeyWITHSuffix'), []);
|
|
|
|
u = new goog.Uri('/path?a=b&key=v1&c=d&kEy=v2&keywithsuffix=v3', true);
|
|
assertArraysEqual(u.getParameterValues('A'), ['b']);
|
|
assertArraysEqual(u.getParameterValues('keY'), ['v1', 'v2']);
|
|
assertArraysEqual(u.getParameterValues('c'), ['d']);
|
|
assertArraysEqual(u.getParameterValues('keyWITHsuffix'), ['v3']);
|
|
|
|
// Make sure constructing from another URI preserves case-insensitivity
|
|
u2 = new goog.Uri(u);
|
|
assertArraysEqual(u2.getParameterValues('A'), ['b']);
|
|
assertArraysEqual(u2.getParameterValues('keY'), ['v1', 'v2']);
|
|
assertArraysEqual(u2.getParameterValues('c'), ['d']);
|
|
assertArraysEqual(u2.getParameterValues('keyWITHsuffix'), ['v3']);
|
|
}
|
|
|
|
function testRemoveParameter() {
|
|
assertEquals('/path?a=b&c=d&keywithsuffix=v3',
|
|
goog.Uri.parse('/path?a=b&key=v1&c=d&key=v2&keywithsuffix=v3')
|
|
.removeParameter('key').toString());
|
|
}
|
|
|
|
function testParameterSetters() {
|
|
assertEquals('/path?a=b&key=newval&c=d&keywithsuffix=v3',
|
|
goog.Uri.parse('/path?a=b&key=v1&c=d&key=v2&keywithsuffix=v3')
|
|
.setParameterValue('key', 'newval').toString());
|
|
|
|
assertEquals('/path?a=b&key=1&key=2&key=3&c=d&keywithsuffix=v3',
|
|
goog.Uri.parse('/path?a=b&key=v1&c=d&key=v2&keywithsuffix=v3')
|
|
.setParameterValues('key', ['1', '2', '3']).toString());
|
|
|
|
assertEquals('/path',
|
|
goog.Uri.parse('/path?key=v1&key=v2')
|
|
.setParameterValues('key', []).toString());
|
|
|
|
// Test case-insensitive setters
|
|
assertEquals('/path?a=b&key=newval&c=d&keywithsuffix=v3',
|
|
goog.Uri.parse('/path?a=b&key=v1&c=d&key=v2&keywithsuffix=v3', true)
|
|
.setParameterValue('KEY', 'newval').toString());
|
|
|
|
assertEquals(
|
|
'/path?a=b&key=1&key=2&key=3&c=d&keywithsuffix=v3',
|
|
goog.Uri.parse('/path?a=b&key=v1&c=d&key=v2&keywithsuffix=v3', true)
|
|
.setParameterValues('kEY', ['1', '2', '3']).toString());
|
|
}
|
|
|
|
function testEncoding() {
|
|
assertEquals('/foo bar baz',
|
|
goog.Uri.parse('/foo%20bar%20baz').getPath());
|
|
assertEquals('/foo+bar+baz',
|
|
goog.Uri.parse('/foo+bar+baz').getPath());
|
|
}
|
|
|
|
function testSetScheme() {
|
|
var uri = new goog.Uri('http://www.google.com:80/path?q=query#fragmento');
|
|
|
|
uri.setScheme('https');
|
|
assertTrue(uri.hasScheme());
|
|
assertEquals('https', uri.getScheme());
|
|
assertEquals('https://www.google.com:80/path?q=query#fragmento',
|
|
uri.toString());
|
|
|
|
uri.setScheme(encodeURIComponent('ab cd'), true);
|
|
assertTrue(uri.hasScheme());
|
|
assertEquals('ab cd', uri.getScheme());
|
|
assertEquals('ab%20cd://www.google.com:80/path?q=query#fragmento',
|
|
uri.toString());
|
|
|
|
uri.setScheme('http:');
|
|
assertTrue(uri.hasScheme());
|
|
assertEquals('http', uri.getScheme());
|
|
assertEquals('http://www.google.com:80/path?q=query#fragmento',
|
|
uri.toString());
|
|
|
|
uri.setScheme('');
|
|
assertFalse(uri.hasScheme());
|
|
assertEquals('', uri.getScheme());
|
|
assertEquals('//www.google.com:80/path?q=query#fragmento',
|
|
uri.toString());
|
|
}
|
|
|
|
function testSetDomain() {
|
|
var uri = new goog.Uri('http://www.google.com:80/path?q=query#fragmento');
|
|
|
|
uri.setDomain('\u1e21oogle.com');
|
|
assertTrue(uri.hasDomain());
|
|
assertEquals('\u1e21oogle.com', uri.getDomain());
|
|
assertEquals('http://%E1%B8%A1oogle.com:80/path?q=query#fragmento',
|
|
uri.toString());
|
|
|
|
uri.setDomain(encodeURIComponent('\u1e21oogle.com'), true);
|
|
assertTrue(uri.hasDomain());
|
|
assertEquals('\u1e21oogle.com', uri.getDomain());
|
|
assertEquals('http://%E1%B8%A1oogle.com:80/path?q=query#fragmento',
|
|
uri.toString());
|
|
|
|
uri.setDomain('');
|
|
assertFalse(uri.hasDomain());
|
|
assertEquals('', uri.getDomain());
|
|
assertEquals('http:/path?q=query#fragmento',
|
|
uri.toString());
|
|
}
|
|
|
|
function testSetPort() {
|
|
var uri = new goog.Uri('http://www.google.com:80/path?q=query#fragmento');
|
|
|
|
assertThrows(function() {
|
|
uri.setPort(-1);
|
|
});
|
|
assertEquals(80, uri.getPort());
|
|
|
|
assertThrows(function() {
|
|
uri.setPort('a');
|
|
});
|
|
assertEquals(80, uri.getPort());
|
|
|
|
uri.setPort(443);
|
|
assertTrue(uri.hasPort());
|
|
assertEquals(443, uri.getPort());
|
|
assertEquals('http://www.google.com:443/path?q=query#fragmento',
|
|
uri.toString());
|
|
|
|
// TODO(user): This is undocumented, but exist in previous unit
|
|
// test. We should clarify whether this is intended (alternatively,
|
|
// setPort(0) also works).
|
|
uri.setPort(null);
|
|
assertFalse(uri.hasPort());
|
|
assertEquals(null, uri.getPort());
|
|
assertEquals('http://www.google.com/path?q=query#fragmento',
|
|
uri.toString());
|
|
}
|
|
|
|
function testSetPath() {
|
|
var uri = new goog.Uri('http://www.google.com:80/path?q=query#fragmento');
|
|
|
|
uri.setPath('/search path/');
|
|
assertTrue(uri.hasPath());
|
|
assertEquals('/search path/', uri.getPath());
|
|
assertEquals(
|
|
'http://www.google.com:80/search%20path/?q=query#fragmento',
|
|
uri.toString());
|
|
|
|
uri.setPath(encodeURIComponent('/search path 2/'), true);
|
|
assertTrue(uri.hasPath());
|
|
assertEquals('/search path 2/', uri.getPath());
|
|
assertEquals(
|
|
'http://www.google.com:80/search%20path%202/?q=query#fragmento',
|
|
uri.toString());
|
|
|
|
uri.setPath('');
|
|
assertFalse(uri.hasPath());
|
|
assertEquals('', uri.getPath());
|
|
assertEquals(
|
|
'http://www.google.com:80?q=query#fragmento',
|
|
uri.toString());
|
|
}
|
|
|
|
function testSetFragment() {
|
|
var uri = new goog.Uri('http://www.google.com:80/path?q=query#fragmento');
|
|
|
|
uri.setFragment('foo?bar=a b&baz=2');
|
|
assertTrue(uri.hasFragment());
|
|
assertEquals('foo?bar=a b&baz=2', uri.getFragment());
|
|
assertEquals(
|
|
'http://www.google.com:80/path?q=query#foo?bar=a%20b&baz=2',
|
|
uri.toString());
|
|
|
|
uri.setFragment(encodeURIComponent('foo?bar=a b&baz=3'), true);
|
|
assertTrue(uri.hasFragment());
|
|
assertEquals('foo?bar=a b&baz=3', uri.getFragment());
|
|
assertEquals(
|
|
'http://www.google.com:80/path?q=query#foo?bar=a%20b&baz=3',
|
|
uri.toString());
|
|
|
|
uri.setFragment('');
|
|
assertFalse(uri.hasFragment());
|
|
assertEquals('', uri.getFragment());
|
|
assertEquals(
|
|
'http://www.google.com:80/path?q=query',
|
|
uri.toString());
|
|
}
|
|
|
|
function testSetUserInfo() {
|
|
var uri = new goog.Uri('http://www.google.com:80/path?q=query#fragmento');
|
|
|
|
uri.setUserInfo('user:pw d');
|
|
assertTrue(uri.hasUserInfo());
|
|
assertEquals('user:pw d', uri.getUserInfo());
|
|
assertEquals('http://user:pw%20d@www.google.com:80/path?q=query#fragmento',
|
|
uri.toString());
|
|
|
|
uri.setUserInfo(encodeURIComponent('user:pw d2'), true);
|
|
assertTrue(uri.hasUserInfo());
|
|
assertEquals('user:pw d2', uri.getUserInfo());
|
|
assertEquals('http://user:pw%20d2@www.google.com:80/path?q=query#fragmento',
|
|
uri.toString());
|
|
|
|
uri.setUserInfo('user');
|
|
assertTrue(uri.hasUserInfo());
|
|
assertEquals('user', uri.getUserInfo());
|
|
assertEquals('http://user@www.google.com:80/path?q=query#fragmento',
|
|
uri.toString());
|
|
|
|
uri.setUserInfo('');
|
|
assertFalse(uri.hasUserInfo());
|
|
assertEquals('', uri.getUserInfo());
|
|
assertEquals('http://www.google.com:80/path?q=query#fragmento',
|
|
uri.toString());
|
|
}
|
|
|
|
function testSetParameterValues() {
|
|
var uri = new goog.Uri('http://www.google.com:80/path?q=query#fragmento');
|
|
|
|
uri.setParameterValues('q', ['foo', 'other query']);
|
|
assertEquals('http://www.google.com:80/path?q=foo&q=other%20query#fragmento',
|
|
uri.toString());
|
|
|
|
uri.setParameterValues('lang', 'en');
|
|
assertEquals(
|
|
'http://www.google.com:80/path?q=foo&q=other%20query&lang=en#fragmento',
|
|
uri.toString());
|
|
}
|
|
|
|
function testTreatmentOfAt1() {
|
|
var uri = new goog.Uri('http://www.google.com?q=johndoe@gmail.com');
|
|
assertEquals('http', uri.getScheme());
|
|
assertEquals('www.google.com', uri.getDomain());
|
|
assertEquals('johndoe@gmail.com', uri.getParameterValue('q'));
|
|
|
|
uri = goog.Uri.create('http', null, 'www.google.com', null, null,
|
|
'q=johndoe@gmail.com', null);
|
|
assertEquals('http://www.google.com?q=johndoe%40gmail.com', uri.toString());
|
|
}
|
|
|
|
function testTreatmentOfAt2() {
|
|
var uri = new goog.Uri('http://www/~johndoe@gmail.com/foo');
|
|
assertEquals('http', uri.getScheme());
|
|
assertEquals('www', uri.getDomain());
|
|
assertEquals('/~johndoe@gmail.com/foo', uri.getPath());
|
|
|
|
assertEquals('http://www/~johndoe@gmail.com/foo',
|
|
goog.Uri.create('http', null, 'www', null,
|
|
'/~johndoe@gmail.com/foo', null, null).
|
|
toString());
|
|
}
|
|
|
|
function testTreatmentOfAt3() {
|
|
var uri = new goog.Uri('ftp://skroob:1234@teleport/~skroob@vacuum');
|
|
assertEquals('ftp', uri.getScheme());
|
|
assertEquals('skroob:1234', uri.getUserInfo());
|
|
assertEquals('teleport', uri.getDomain());
|
|
assertEquals('/~skroob@vacuum', uri.getPath());
|
|
|
|
assertEquals('ftp://skroob:1234@teleport/~skroob@vacuum',
|
|
goog.Uri.create('ftp', 'skroob:1234', 'teleport', null,
|
|
'/~skroob@vacuum', null, null).toString());
|
|
}
|
|
|
|
function testTreatmentOfAt4() {
|
|
assertEquals('ftp://darkhelmet:45%4078@teleport/~dhelmet@vacuum',
|
|
goog.Uri.create('ftp', 'darkhelmet:45@78', 'teleport', null,
|
|
'/~dhelmet@vacuum', null, null).toString());
|
|
}
|
|
|
|
function testSameDomain1() {
|
|
var uri1 = 'http://www.google.com/a';
|
|
var uri2 = 'http://www.google.com/b';
|
|
assertTrue(goog.Uri.haveSameDomain(uri1, uri2));
|
|
assertTrue(goog.Uri.haveSameDomain(uri2, uri1));
|
|
}
|
|
|
|
function testSameDomain2() {
|
|
var uri1 = 'http://www.google.com:1234/a';
|
|
var uri2 = 'http://www.google.com/b';
|
|
assertFalse(goog.Uri.haveSameDomain(uri1, uri2));
|
|
assertFalse(goog.Uri.haveSameDomain(uri2, uri1));
|
|
}
|
|
|
|
function testSameDomain3() {
|
|
var uri1 = 'www.google.com/a';
|
|
var uri2 = 'http://www.google.com/b';
|
|
assertFalse(goog.Uri.haveSameDomain(uri1, uri2));
|
|
assertFalse(goog.Uri.haveSameDomain(uri2, uri1));
|
|
}
|
|
|
|
function testSameDomain4() {
|
|
var uri1 = '/a';
|
|
var uri2 = 'http://www.google.com/b';
|
|
assertFalse(goog.Uri.haveSameDomain(uri1, uri2));
|
|
assertFalse(goog.Uri.haveSameDomain(uri2, uri1));
|
|
}
|
|
|
|
function testSameDomain5() {
|
|
var uri1 = 'http://www.google.com/a';
|
|
var uri2 = 'http://mail.google.com/b';
|
|
assertFalse(goog.Uri.haveSameDomain(uri1, uri2));
|
|
assertFalse(goog.Uri.haveSameDomain(uri2, uri1));
|
|
}
|
|
|
|
function testSameDomain6() {
|
|
var uri1 = '/a';
|
|
var uri2 = '/b';
|
|
assertTrue(goog.Uri.haveSameDomain(uri1, uri2));
|
|
assertTrue(goog.Uri.haveSameDomain(uri2, uri1));
|
|
}
|
|
|
|
function testMakeUnique() {
|
|
var uri1 = new goog.Uri('http://www.google.com/setgmail');
|
|
uri1.makeUnique();
|
|
var uri2 = new goog.Uri('http://www.google.com/setgmail');
|
|
uri2.makeUnique();
|
|
assertTrue(uri1.getQueryData().containsKey(goog.Uri.RANDOM_PARAM));
|
|
assertTrue(uri1.toString() != uri2.toString());
|
|
}
|
|
|
|
function testSetReadOnly() {
|
|
var uri = new goog.Uri('http://www.google.com/setgmail');
|
|
uri.setReadOnly(true);
|
|
assertThrows(function() {
|
|
uri.setParameterValue('cant', 'dothis');
|
|
});
|
|
}
|
|
|
|
function testSetReadOnlyChained() {
|
|
var uri = new goog.Uri('http://www.google.com/setgmail').setReadOnly(true);
|
|
assertThrows(function() {
|
|
uri.setParameterValue('cant', 'dothis');
|
|
});
|
|
}
|
|
|
|
function testQueryDataCount() {
|
|
var qd = new goog.Uri.QueryData('a=A&b=B&a=A2&b=B2&c=C');
|
|
assertEquals(5, qd.getCount());
|
|
}
|
|
|
|
function testQueryDataRemove() {
|
|
var qd = new goog.Uri.QueryData('a=A&b=B&a=A2&b=B2&c=C');
|
|
qd.remove('c');
|
|
assertEquals(4, qd.getCount());
|
|
assertEquals('a=A&a=A2&b=B&b=B2', String(qd));
|
|
qd.remove('a');
|
|
assertEquals(2, qd.getCount());
|
|
assertEquals('b=B&b=B2', String(qd));
|
|
}
|
|
|
|
function testQueryDataClear() {
|
|
var qd = new goog.Uri.QueryData('a=A&b=B&a=A2&b=B2&c=C');
|
|
qd.clear();
|
|
assertEquals(0, qd.getCount());
|
|
assertEquals('', String(qd));
|
|
}
|
|
|
|
function testQueryDataIsEmpty() {
|
|
var qd = new goog.Uri.QueryData('a=A&b=B&a=A2&b=B2&c=C');
|
|
qd.remove('a');
|
|
assertFalse(qd.isEmpty());
|
|
qd.remove('b');
|
|
assertFalse(qd.isEmpty());
|
|
qd.remove('c');
|
|
assertTrue(qd.isEmpty());
|
|
|
|
qd = new goog.Uri.QueryData('a=A&b=B&a=A2&b=B2&c=C');
|
|
qd.clear();
|
|
assertTrue(qd.isEmpty());
|
|
|
|
qd = new goog.Uri.QueryData('');
|
|
assertTrue(qd.isEmpty());
|
|
}
|
|
|
|
function testQueryDataContainsKey() {
|
|
var qd = new goog.Uri.QueryData('a=A&b=B&a=A2&b=B2&c=C');
|
|
assertTrue(qd.containsKey('a'));
|
|
assertTrue(qd.containsKey('b'));
|
|
assertTrue(qd.containsKey('c'));
|
|
qd.remove('a');
|
|
assertFalse(qd.containsKey('a'));
|
|
assertTrue(qd.containsKey('b'));
|
|
assertTrue(qd.containsKey('c'));
|
|
qd.remove('b');
|
|
assertFalse(qd.containsKey('a'));
|
|
assertFalse(qd.containsKey('b'));
|
|
assertTrue(qd.containsKey('c'));
|
|
qd.remove('c');
|
|
assertFalse(qd.containsKey('a'));
|
|
assertFalse(qd.containsKey('b'));
|
|
assertFalse(qd.containsKey('c'));
|
|
|
|
qd = new goog.Uri.QueryData('a=A&b=B&a=A2&b=B2&c=C');
|
|
qd.clear();
|
|
assertFalse(qd.containsKey('a'));
|
|
assertFalse(qd.containsKey('b'));
|
|
assertFalse(qd.containsKey('c'));
|
|
|
|
// Test case-insensitive
|
|
qd = new goog.Uri.QueryData('aaa=A&bbb=B&aaa=A2&bbbb=B2&ccc=C', null, true);
|
|
assertTrue(qd.containsKey('aaa'));
|
|
assertTrue(qd.containsKey('bBb'));
|
|
assertTrue(qd.containsKey('CCC'));
|
|
|
|
qd = new goog.Uri.QueryData('a=b=c');
|
|
assertTrue(qd.containsKey('a'));
|
|
assertFalse(qd.containsKey('b'));
|
|
}
|
|
|
|
function testQueryDataContainsValue() {
|
|
var qd = new goog.Uri.QueryData('a=A&b=B&a=A2&b=B2&c=C');
|
|
|
|
assertTrue(qd.containsValue('A'));
|
|
assertTrue(qd.containsValue('B'));
|
|
assertTrue(qd.containsValue('A2'));
|
|
assertTrue(qd.containsValue('B2'));
|
|
assertTrue(qd.containsValue('C'));
|
|
qd.remove('a');
|
|
assertFalse(qd.containsValue('A'));
|
|
assertTrue(qd.containsValue('B'));
|
|
assertFalse(qd.containsValue('A2'));
|
|
assertTrue(qd.containsValue('B2'));
|
|
assertTrue(qd.containsValue('C'));
|
|
qd.remove('b');
|
|
assertFalse(qd.containsValue('A'));
|
|
assertFalse(qd.containsValue('B'));
|
|
assertFalse(qd.containsValue('A2'));
|
|
assertFalse(qd.containsValue('B2'));
|
|
assertTrue(qd.containsValue('C'));
|
|
qd.remove('c');
|
|
assertFalse(qd.containsValue('A'));
|
|
assertFalse(qd.containsValue('B'));
|
|
assertFalse(qd.containsValue('A2'));
|
|
assertFalse(qd.containsValue('B2'));
|
|
assertFalse(qd.containsValue('C'));
|
|
|
|
qd = new goog.Uri.QueryData('a=A&b=B&a=A2&b=B2&c=C');
|
|
qd.clear();
|
|
assertFalse(qd.containsValue('A'));
|
|
assertFalse(qd.containsValue('B'));
|
|
assertFalse(qd.containsValue('A2'));
|
|
assertFalse(qd.containsValue('B2'));
|
|
assertFalse(qd.containsValue('C'));
|
|
|
|
qd = new goog.Uri.QueryData('a=b=c');
|
|
assertTrue(qd.containsValue('b=c'));
|
|
assertFalse(qd.containsValue('b'));
|
|
assertFalse(qd.containsValue('c'));
|
|
}
|
|
|
|
function testQueryDataGetKeys() {
|
|
var qd = new goog.Uri.QueryData('a=A&b=B&a=A2&b=B2&c=C=extra');
|
|
|
|
assertEquals('aabbc', qd.getKeys().join(''));
|
|
qd.remove('a');
|
|
assertEquals('bbc', qd.getKeys().join(''));
|
|
qd.add('d', 'D');
|
|
qd.add('d', 'D');
|
|
assertEquals('bbcdd', qd.getKeys().join(''));
|
|
|
|
// Test case-insensitive
|
|
qd = new goog.Uri.QueryData('A=A&B=B&a=A2&b=B2&C=C=extra', null, true);
|
|
|
|
assertEquals('aabbc', qd.getKeys().join(''));
|
|
qd.remove('a');
|
|
assertEquals('bbc', qd.getKeys().join(''));
|
|
qd.add('d', 'D');
|
|
qd.add('D', 'D');
|
|
assertEquals('bbcdd', qd.getKeys().join(''));
|
|
}
|
|
|
|
function testQueryDataGetValues() {
|
|
var qd = new goog.Uri.QueryData('a=A&b=B&a=A2&b=B2&c=C=extra');
|
|
|
|
assertArrayEquals(['A', 'A2', 'B', 'B2', 'C=extra'], qd.getValues());
|
|
qd.remove('a');
|
|
assertArrayEquals(['B', 'B2', 'C=extra'], qd.getValues());
|
|
qd.add('d', 'D');
|
|
qd.add('d', 'D');
|
|
assertArrayEquals(['B', 'B2', 'C=extra', 'D', 'D'], qd.getValues());
|
|
|
|
qd.add('e', new String('Eee'));
|
|
assertArrayEquals(['B', 'B2', 'C=extra', 'D', 'D', 'Eee'], qd.getValues());
|
|
|
|
assertArrayEquals(['Eee'], qd.getValues('e'));
|
|
}
|
|
|
|
function testQueryDataSet() {
|
|
var qd = new goog.Uri.QueryData('a=A&b=B&a=A2&b=B2&c=C');
|
|
|
|
qd.set('d', 'D');
|
|
assertEquals('a=A&a=A2&b=B&b=B2&c=C&d=D', String(qd));
|
|
qd.set('d', 'D2');
|
|
assertEquals('a=A&a=A2&b=B&b=B2&c=C&d=D2', String(qd));
|
|
qd.set('a', 'A3');
|
|
assertEquals('a=A3&b=B&b=B2&c=C&d=D2', String(qd));
|
|
qd.remove('a');
|
|
qd.set('a', 'A4');
|
|
// this is different in IE and Mozilla so we cannot use the toString to test
|
|
assertEquals('A4', qd.get('a'));
|
|
}
|
|
|
|
function testQueryDataGet() {
|
|
var qd = new goog.Uri.QueryData('a=A&b=B&a=A2&b=B2&c=C=extra');
|
|
|
|
assertEquals('A', qd.get('a'));
|
|
assertEquals('B', qd.get('b'));
|
|
assertEquals('C=extra', qd.get('c'));
|
|
assertEquals('Default', qd.get('d', 'Default'));
|
|
|
|
qd = new goog.Uri.QueryData('a=A&b=B&a=A2&b=B2&c=C=extra', null, true);
|
|
|
|
assertEquals('A', qd.get('A'));
|
|
assertEquals('B', qd.get('b'));
|
|
assertEquals('C=extra', qd.get('C'));
|
|
assertEquals('Default', qd.get('D', 'Default'));
|
|
|
|
// Some unit tests pass undefined to get method (even though the type
|
|
// for key is {string}). This is not caught by JsCompiler as
|
|
// tests aren't typically compiled.
|
|
assertUndefined(qd.get(undefined));
|
|
}
|
|
|
|
|
|
function testQueryDataSetValues() {
|
|
var qd = new goog.Uri.QueryData('a=A&b=B&a=A2&b=B2&c=C');
|
|
|
|
qd.setValues('a', ['A3', 'A4', 'A5']);
|
|
assertEquals('a=A3&a=A4&a=A5&b=B&b=B2&c=C', String(qd));
|
|
qd.setValues('d', ['D']);
|
|
assertEquals('a=A3&a=A4&a=A5&b=B&b=B2&c=C&d=D', String(qd));
|
|
qd.setValues('e', []);
|
|
assertEquals('a=A3&a=A4&a=A5&b=B&b=B2&c=C&d=D', String(qd));
|
|
}
|
|
|
|
function testQueryDataSetIgnoreCase() {
|
|
var qd = new goog.Uri.QueryData('aaA=one&BBb=two&cCc=three');
|
|
assertEquals('one', qd.get('aaA'));
|
|
assertEquals(undefined, qd.get('aaa'));
|
|
qd.setIgnoreCase(true);
|
|
assertEquals('one', qd.get('aaA'));
|
|
assertEquals('one', qd.get('aaa'));
|
|
qd.setIgnoreCase(false);
|
|
assertEquals(undefined, qd.get('aaA'));
|
|
assertEquals('one', qd.get('aaa'));
|
|
qd.add('DdD', 'four');
|
|
assertEquals('four', qd.get('DdD'));
|
|
assertEquals(undefined, qd.get('ddd'));
|
|
}
|
|
|
|
function testQueryDataSetIgnoreCaseWithMultipleValues() {
|
|
var qd = new goog.Uri.QueryData('aaA=one&aaA=two');
|
|
qd.setIgnoreCase(true);
|
|
assertArrayEquals(['one', 'two'], qd.getValues('aaA'));
|
|
assertArrayEquals(['one', 'two'], qd.getValues('aaa'));
|
|
}
|
|
|
|
function testQueryDataExtend() {
|
|
var qd1 = new goog.Uri.QueryData('a=A&b=B&c=C');
|
|
var qd2 = new goog.Uri.QueryData('d=D&e=E');
|
|
qd1.extend(qd2);
|
|
assertEquals('a=A&b=B&c=C&d=D&e=E', String(qd1));
|
|
|
|
qd1 = new goog.Uri.QueryData('a=A&b=B&c=C');
|
|
qd2 = new goog.Uri.QueryData('d=D&e=E');
|
|
var qd3 = new goog.Uri.QueryData('f=F&g=G');
|
|
qd1.extend(qd2, qd3);
|
|
assertEquals('a=A&b=B&c=C&d=D&e=E&f=F&g=G', String(qd1));
|
|
|
|
qd1 = new goog.Uri.QueryData('a=A&b=B&c=C');
|
|
qd2 = new goog.Uri.QueryData('a=A&c=C');
|
|
qd1.extend(qd2);
|
|
assertEquals('a=A&a=A&b=B&c=C&c=C', String(qd1));
|
|
}
|
|
|
|
function testQueryDataCreateFromMap() {
|
|
assertEquals('', String(goog.Uri.QueryData.createFromMap({})));
|
|
assertEquals('a=A&b=B&c=C',
|
|
String(goog.Uri.QueryData.createFromMap({a: 'A', b: 'B', c: 'C'})));
|
|
assertEquals('a=foo%26bar',
|
|
String(goog.Uri.QueryData.createFromMap({a: 'foo&bar'})));
|
|
}
|
|
|
|
function testQueryDataCreateFromMapWithArrayValues() {
|
|
var obj = {'key': ['1', '2', '3']};
|
|
var qd = goog.Uri.QueryData.createFromMap(obj);
|
|
assertEquals('key=1&key=2&key=3', qd.toString());
|
|
qd.add('breakCache', 1);
|
|
obj.key.push('4');
|
|
assertEquals('key=1&key=2&key=3&breakCache=1', qd.toString());
|
|
|
|
}
|
|
|
|
function testQueryDataCreateFromKeysValues() {
|
|
assertEquals('', String(goog.Uri.QueryData.createFromKeysValues([], [])));
|
|
assertEquals('a=A&b=B&c=C', String(goog.Uri.QueryData.createFromKeysValues(
|
|
['a', 'b', 'c'], ['A', 'B', 'C'])));
|
|
assertEquals('a=A&a=B&a=C', String(goog.Uri.QueryData.createFromKeysValues(
|
|
['a', 'a', 'a'], ['A', 'B', 'C'])));
|
|
}
|
|
|
|
function testQueryDataAddMultipleValuesWithSameKey() {
|
|
var qd = new goog.Uri.QueryData();
|
|
qd.add('abc', 'v');
|
|
qd.add('abc', 'v2');
|
|
qd.add('abc', 'v3');
|
|
assertEquals('abc=v&abc=v2&abc=v3', qd.toString());
|
|
}
|
|
|
|
function testQueryDataAddWithArray() {
|
|
var qd = new goog.Uri.QueryData();
|
|
qd.add('abc', ['v', 'v2']);
|
|
assertEquals('abc=v%2Cv2', qd.toString());
|
|
}
|
|
|
|
function testFragmentEncoding() {
|
|
var allowedInFragment = /[A-Za-z0-9\-\._~!$&'()*+,;=:@/?]/g;
|
|
|
|
var sb = [];
|
|
for (var i = 33; i < 500; i++) { // arbitrarily use first 500 chars.
|
|
sb.push(String.fromCharCode(i));
|
|
}
|
|
var testString = sb.join('');
|
|
|
|
var fragment = new goog.Uri().setFragment(testString).toString();
|
|
|
|
// Remove first '#' character.
|
|
fragment = fragment.substr(1);
|
|
|
|
// Strip all percent encoded characters, as they're ok.
|
|
fragment = fragment.replace(/%[0-9A-F][0-9A-F]/g, '');
|
|
|
|
// Remove allowed characters.
|
|
fragment = fragment.replace(allowedInFragment, '');
|
|
|
|
// Only illegal characters should remain, which is a fail.
|
|
assertEquals('String should be empty', 0, fragment.length);
|
|
|
|
}
|
|
|
|
// Tests, that creating URI from components and then
|
|
// getting the components back yields equal results.
|
|
// The special attention is payed to test proper encoding
|
|
// and decoding of URI components.
|
|
function testComponentsAfterUriCreate() {
|
|
var createdUri = new goog.Uri.create('%40', // scheme
|
|
'%41', // user info
|
|
'%42', // domain
|
|
43, // port
|
|
'%44', // path
|
|
'%45', // query
|
|
'%46'); // fragment
|
|
|
|
assertEquals('%40', createdUri.getScheme());
|
|
assertEquals('%41', createdUri.getUserInfo());
|
|
assertEquals('%42', createdUri.getDomain());
|
|
assertEquals(43, createdUri.getPort());
|
|
assertEquals('%44', createdUri.getPath());
|
|
assertEquals('%2545', createdUri.getQuery()); // returns encoded value
|
|
assertEquals('%45', createdUri.getDecodedQuery());
|
|
assertEquals('%2545', createdUri.getEncodedQuery());
|
|
assertEquals('%46', createdUri.getFragment());
|
|
}
|
|
|
|
// Tests setting the query string and then reading back
|
|
// query parameter values.
|
|
function testSetQueryAndGetParameterValue() {
|
|
var uri = new goog.Uri();
|
|
|
|
// Sets query as decoded string.
|
|
uri.setQuery('i=j&k');
|
|
assertEquals('?i=j&k', uri.toString());
|
|
assertEquals('i=j&k', uri.getDecodedQuery());
|
|
assertEquals('i=j&k', uri.getEncodedQuery());
|
|
assertEquals('i=j&k', uri.getQuery()); // returns encoded value
|
|
assertEquals('j', uri.getParameterValue('i'));
|
|
assertEquals('', uri.getParameterValue('k'));
|
|
|
|
// Sets query as encoded string.
|
|
uri.setQuery('i=j&k', true);
|
|
assertEquals('?i=j&k', uri.toString());
|
|
assertEquals('i=j&k', uri.getDecodedQuery());
|
|
assertEquals('i=j&k', uri.getEncodedQuery());
|
|
assertEquals('i=j&k', uri.getQuery()); // returns encoded value
|
|
assertEquals('j', uri.getParameterValue('i'));
|
|
assertEquals('', uri.getParameterValue('k'));
|
|
|
|
// Sets query as decoded string.
|
|
uri.setQuery('i=j%26k');
|
|
assertEquals('?i=j%2526k', uri.toString());
|
|
assertEquals('i=j%26k', uri.getDecodedQuery());
|
|
assertEquals('i=j%2526k', uri.getEncodedQuery());
|
|
assertEquals('i=j%2526k', uri.getQuery()); // returns encoded value
|
|
assertEquals('j%26k', uri.getParameterValue('i'));
|
|
assertUndefined(uri.getParameterValue('k'));
|
|
|
|
// Sets query as encoded string.
|
|
uri.setQuery('i=j%26k', true);
|
|
assertEquals('?i=j%26k', uri.toString());
|
|
assertEquals('i=j&k', uri.getDecodedQuery());
|
|
assertEquals('i=j%26k', uri.getEncodedQuery());
|
|
assertEquals('i=j%26k', uri.getQuery()); // returns encoded value
|
|
assertEquals('j&k', uri.getParameterValue('i'));
|
|
assertUndefined(uri.getParameterValue('k'));
|
|
}
|
|
|
|
// Tests setting query parameter values and the reading back the query string.
|
|
function testSetParameterValueAndGetQuery() {
|
|
var uri = new goog.Uri();
|
|
|
|
uri.setParameterValue('a', 'b&c');
|
|
assertEquals('?a=b%26c', uri.toString());
|
|
assertEquals('a=b&c', uri.getDecodedQuery());
|
|
assertEquals('a=b%26c', uri.getEncodedQuery());
|
|
assertEquals('a=b%26c', uri.getQuery()); // returns encoded value
|
|
|
|
uri.setParameterValue('a', 'b%26c');
|
|
assertEquals('?a=b%2526c', uri.toString());
|
|
assertEquals('a=b%26c', uri.getDecodedQuery());
|
|
assertEquals('a=b%2526c', uri.getEncodedQuery());
|
|
assertEquals('a=b%2526c', uri.getQuery()); // returns encoded value
|
|
}
|
|
|
|
|
|
// Tests that building a URI with a query string and then reading it back
|
|
// gives the same result.
|
|
function testQueryNotModified() {
|
|
assertEquals('?foo', new goog.Uri('?foo').toString());
|
|
assertEquals('?foo=', new goog.Uri('?foo=').toString());
|
|
assertEquals('?foo=bar', new goog.Uri('?foo=bar').toString());
|
|
assertEquals('?&=&=&', new goog.Uri('?&=&=&').toString());
|
|
}
|
|
|
|
function testRelativePathNotUnescapedWithColon() {
|
|
assertEquals('javascript%3aalert(1)',
|
|
new goog.Uri('javascript%3aalert(1)').toString());
|
|
}
|
|
|
|
function testAbsolutePathUnescapedWithColon() {
|
|
assertEquals('/javascript:alert(1)',
|
|
new goog.Uri('/javascript%3aalert(1)').toString());
|
|
assertEquals('http://www.foo.bar/path:with:colon/x',
|
|
new goog.Uri('http://www.foo.bar/path:with:colon/x').toString());
|
|
assertEquals('//www.foo.bar/path:with:colon/x',
|
|
new goog.Uri('//www.foo.bar/path:with:colon/x').toString());
|
|
}
|
|
|
|
function assertDotRemovedEquals(expected, path) {
|
|
assertEquals(expected, goog.Uri.removeDotSegments(path));
|
|
}
|
|
|
|
function assertResolvedEquals(expected, base, other) {
|
|
assertEquals(expected, goog.Uri.resolve(base, other).toString());
|
|
}
|