url: add '.' '+' and '-' in url protocol

- Based on BNF from RFC 1738 section 5.
- Added tests to cover svn+ssh and some other examples
This commit is contained in:
Jordan Sissel 2011-11-04 13:22:18 +01:00 committed by Ben Noordhuis
parent 5fd012e67a
commit 358f0ce96b
2 changed files with 77 additions and 1 deletions

View File

@ -30,7 +30,7 @@ exports.format = urlFormat;
// define these here so at least they only have to be
// compiled once on the first module load.
var protocolPattern = /^([a-z0-9+]+:)/i,
var protocolPattern = /^([a-z0-9.+-]+:)/i,
portPattern = /:[0-9]+$/,
// RFC 2396: characters reserved for delimiting URLs.
delims = ['<', '>', '"', '`', ' ', '\r', '\n', '\t'],

View File

@ -333,6 +333,49 @@ var parseTests = {
'hash' : '#bar',
'path': '/path?search=foo'
},
'svn+ssh://foo/bar': {
'href': 'svn+ssh://foo/bar',
'host': 'foo',
'hostname': 'foo',
'protocol': 'svn+ssh:',
'pathname': '/bar',
'path': '/bar',
'slashes': true
},
'dash-test://foo/bar': {
'href': 'dash-test://foo/bar',
'host': 'foo',
'hostname': 'foo',
'protocol': 'dash-test:',
'pathname': '/bar',
'path': '/bar',
'slashes': true
},
'dash-test:foo/bar': {
'href': 'dash-test:foo/bar',
'host': 'foo',
'hostname': 'foo',
'protocol': 'dash-test:',
'pathname': '/bar',
'path': '/bar'
},
'dot.test://foo/bar': {
'href': 'dot.test://foo/bar',
'host': 'foo',
'hostname': 'foo',
'protocol': 'dot.test:',
'pathname': '/bar',
'path': '/bar',
'slashes': true
},
'dot.test:foo/bar': {
'href': 'dot.test:foo/bar',
'host': 'foo',
'hostname': 'foo',
'protocol': 'dot.test:',
'pathname': '/bar',
'path': '/bar'
},
// IDNA tests
'http://www.日本語.com/' : {
'href': 'http://www.xn--wgv71a119e.com/',
@ -574,6 +617,39 @@ var formatTests = {
'hostname': 'foo',
'protocol': 'http:',
'pathname': '/'
},
'svn+ssh://foo/bar': {
'href': 'svn+ssh://foo/bar',
'hostname': 'foo',
'protocol': 'svn+ssh:',
'pathname': '/bar',
'slashes': true
},
'dash-test://foo/bar': {
'href': 'dash-test://foo/bar',
'hostname': 'foo',
'protocol': 'dash-test:',
'pathname': '/bar',
'slashes': true
},
'dash-test:foo/bar': {
'href': 'dash-test:foo/bar',
'hostname': 'foo',
'protocol': 'dash-test:',
'pathname': '/bar'
},
'dot.test://foo/bar': {
'href': 'dot.test://foo/bar',
'hostname': 'foo',
'protocol': 'dot.test:',
'pathname': '/bar',
'slashes': true
},
'dot.test:foo/bar': {
'href': 'dot.test:foo/bar',
'hostname': 'foo',
'protocol': 'dot.test:',
'pathname': '/bar'
}
};
for (var u in formatTests) {