You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

193 lines
4.6 KiB

process.mixin(require("./common"));
var uri = require("uri"),
sys = require("sys");
// URIs to parse, and expected data
// { url : parsed }
var parseTests = {
"http://www.narwhaljs.org/blog/categories?id=news" : {
"url": "http://www.narwhaljs.org/blog/categories?id=news",
"protocol": "http",
"authorityRoot": "//",
"authority": "www.narwhaljs.org",
"userInfo": "",
"user": "",
"password": "",
"domain": "www.narwhaljs.org",
"port": "",
"path": "/blog/categories",
"root": "/",
"directory": "blog/",
"file": "categories",
"query": "id=news",
"anchor": "",
"directories": [
"blog"
],
"domains": [
"www",
"narwhaljs",
"org"
]
},
"http://mt0.google.com/vt/lyrs=m@114&hl=en&src=api&x=2&y=2&z=3&s=" : {
"url": "http://mt0.google.com/vt/lyrs=m@114&hl=en&src=api&x=2&y=2&z=3&s=",
"protocol": "http",
"authorityRoot": "//",
"authority": "mt0.google.com",
"userInfo": "",
"user": "",
"password": "",
"domain": "mt0.google.com",
"port": "",
"path": "/vt/lyrs=m@114&hl=en&src=api&x=2&y=2&z=3&s=",
"root": "/",
"directory": "vt/",
"file": "lyrs=m@114&hl=en&src=api&x=2&y=2&z=3&s=",
"query": "",
"anchor": "",
"directories": [
"vt"
],
"domains": [
"mt0",
"google",
"com"
]
},
"http://mt0.google.com/vt/lyrs=m@114???&hl=en&src=api&x=2&y=2&z=3&s=" : {
"url": "http://mt0.google.com/vt/lyrs=m@114???&hl=en&src=api&x=2&y=2&z=3&s=",
"protocol": "http",
"authorityRoot": "//",
"authority": "mt0.google.com",
"userInfo": "",
"user": "",
"password": "",
"domain": "mt0.google.com",
"port": "",
"path": "/vt/lyrs=m@114",
"root": "/",
"directory": "vt/",
"file": "lyrs=m@114",
"query": "??&hl=en&src=api&x=2&y=2&z=3&s=",
"anchor": "",
"directories": [
"vt"
],
"domains": [
"mt0",
"google",
"com"
]
},
"http://user:pass@mt0.google.com/vt/lyrs=m@114???&hl=en&src=api&x=2&y=2&z=3&s=" : {
"url": "http://user:pass@mt0.google.com/vt/lyrs=m@114???&hl=en&src=api&x=2&y=2&z=3&s=",
"protocol": "http",
"authorityRoot": "//",
"authority": "user:pass@mt0.google.com",
"userInfo": "user:pass",
"user": "user",
"password": "pass",
"domain": "mt0.google.com",
"port": "",
"path": "/vt/lyrs=m@114",
"root": "/",
"directory": "vt/",
"file": "lyrs=m@114",
"query": "??&hl=en&src=api&x=2&y=2&z=3&s=",
"anchor": "",
"directories": [
"vt"
],
"domains": [
"mt0",
"google",
"com"
]
},
"file:///etc/passwd" : {
"url": "file:///etc/passwd",
"protocol": "file",
"authorityRoot": "//",
"authority": "",
"userInfo": "",
"user": "",
"password": "",
"domain": "",
"port": "",
"path": "/etc/passwd",
"root": "/",
"directory": "etc/",
"file": "passwd",
"query": "",
"anchor": "",
"directories": [
"etc"
],
"domains": [
""
]
},
"file:///etc/node/" : {
"url": "file:///etc/node/",
"protocol": "file",
"authorityRoot": "//",
"authority": "",
"userInfo": "",
"user": "",
"password": "",
"domain": "",
"port": "",
"path": "/etc/node/",
"root": "/",
"directory": "etc/node/",
"file": "",
"query": "",
"anchor": "",
"directories": [
"etc",
"node"
],
"domains": [
""
]
}
};
for (var url in parseTests) {
var actual = uri.parse(url),
expected = parseTests[url];
for (var i in expected) {
// sys.debug(i);
// sys.debug("expect: " + JSON.stringify(expected[i]));
// sys.debug("actual: " + JSON.stringify(actual[i]));
var e = JSON.stringify(expected[i]),
a = JSON.stringify(actual[i]);
assert.equal(e, a, "parse(" + url + ")."+i+" == "+e+"\nactual: "+a);
}
var expected = url,
actual = uri.format(parseTests[url]);
assert.equal(expected, actual, "format("+url+") == "+url+"\nactual:"+actual);
}
[
// [from, path, expected]
["/foo/bar/baz", "quux", "/foo/bar/quux"],
["/foo/bar/baz", "quux/asdf", "/foo/bar/quux/asdf"],
["/foo/bar/baz", "quux/baz", "/foo/bar/quux/baz"],
["/foo/bar/baz", "../quux/baz", "/foo/quux/baz"],
["/foo/bar/baz", "/bar", "/bar"],
["/foo/bar/baz/", "quux", "/foo/bar/baz/quux"],
["/foo/bar/baz/", "quux/baz", "/foo/bar/baz/quux/baz"],
["/foo/bar/baz", "../../../../../../../../quux/baz", "/quux/baz"],
["/foo/bar/baz", "../../../../../../../quux/baz", "/quux/baz"]
].forEach(function (relativeTest) {
var a = uri.resolve(relativeTest[0], relativeTest[1]),
e = relativeTest[2];
assert.equal(e, a,
"resolve("+[relativeTest[0], relativeTest[1]]+") == "+e+
"\n actual="+a);
});