setup-php/node_modules/urlgrey/tapetest.js
2019-09-20 21:54:46 +05:30

544 lines
15 KiB
JavaScript

var test = require('tape');
var tapetest = function(){
var isBrowser = !(typeof module !== 'undefined' && module.exports);
if (!isBrowser){
var urlgrey = require('./index');
}
test('chaining always produces a new object and leaves the original unaffected',
function (t) {
t.plan(2);
// doesn't over-write the original url
var urlStr = "https://user:pass@subdomain.asdf.com/path?asdf=1234#frag";
var url = urlgrey(urlStr);
t.equal(
url.hostname('asdf.com').toString(),
"https://user:pass@asdf.com/path?asdf=1234#frag"
);
url.port(8080);
url.protocol('http');
url.username('http');
url.password('http');
url.path('http');
url.hash('http');
url.queryString('http=1234');
url.query(false);
url.extendedPath("/asdf?qwer=asdf#swqertwert23");
t.equal(
url.toString(),
urlStr
); // original object is unmodified
});
test('toJSON() returns the same thing as toString', function(t){
t.plan(2);
var url = "https://user:pass@subdomain.asdf.com/path?asdf=1234#frag";
t.equal(
urlgrey(url).toJSON(),
urlgrey(url).toString()
);
t.equal(
'https://user:pass@subdomain.asdf.com/path?asdf=1234#frag',
urlgrey(url).toString()
);
});
test('hostname() gets the hostname', function(t){
var url = "https://user:pass@subdomain.asdf.com/path?asdf=1234#frag";
t.equal(
urlgrey(url).hostname(),
'subdomain.asdf.com'
);
t.end();
});
if (isBrowser){
test("hostname() gets the hostname even if unset", function(t){
t.plan(1);
var url = "/path?asdf=1234#frag";
var u = urlgrey(url);
if (u.protocol() === 'file'){
// chrome uses localhost. other browsers don't
t.ok(
(u.hostname() === '') || (u.hostname() === 'localhost')
);
} else {
t.equal(
u.hostname(),
window.location.hostname + ''
);
}
});
}
test("hostname() sets the hostname", function(t){
var url = "http://subdomain.asdf.com";
t.equal(
urlgrey(url).hostname("blah").toString(),
'http://blah'
);
t.end();
});
test("port() gets the port", function(t){
var url = "https://user:pass@subdomain.asdf.com:9090";
t.equal(
urlgrey(url).port(),
9090
);
t.end();
});
test("port() gets a correct default port when it's missing", function(t){
var url = "https://user:pass@subdomain.asdf.com";
t.equal(
urlgrey(url).port(),
443
);
t.end();
});
test("port() omits the port when it's 80 for http", function(t){
var url = "http://subdomain.asdf.com:9090";
t.equal(
urlgrey(url).port(80).toString(),
'http://subdomain.asdf.com'
);
t.end();
});
test("port() omits the port when it's 443 for https", function(t){
var url = "https://subdomain.asdf.com:9090";
t.equal(
urlgrey(url).port(443).toString(),
'https://subdomain.asdf.com'
);
t.end();
});
test("port() sets the port", function(t){
var url = "https://subdomain.asdf.com";
t.equal(
urlgrey(url).port(9090).toString(),
'https://subdomain.asdf.com:9090'
);
t.end();
});
test("rawPath() gets the path", function(t){
var url = "https://user:pass@subdomain.asdf.com/path?asdf=1234#frag";
t.equal(
urlgrey(url).rawPath(),
'/path'
);
t.end();
});
test("rawPath() sets the path", function(t){
var url = "https://subdomain.asdf.com";
t.equal(
urlgrey(url).rawPath("blah").toString(),
'https://subdomain.asdf.com/blah'
);
t.end();
});
test("rawPath() does not encode pieces of the path", function(t){
var url = "https://subdomain.asdf.com";
t.equal(
urlgrey(url).rawPath("not encode here", "and/not/here").toString(),
'https://subdomain.asdf.com/not encode here/and/not/here'
);
t.end();
});
test("rawPath() sets the path from strings and arrays of strings", function(t){
var url = "https://asdf.com";
t.equal(
urlgrey(url).rawPath(['qwer', '/asdf'], 'qwer/1234/', '/1234/').toString(),
'https://asdf.com/qwer/asdf/qwer/1234/1234'
);
t.end();
});
test("path() gets the path", function(t){
var url = "https://user:pass@subdomain.asdf.com/path?asdf=1234#frag";
t.equal(
urlgrey(url).path(),
'/path'
);
t.end();
});
test("path() sets the path", function(t){
var url = "https://subdomain.asdf.com";
t.equal(
urlgrey(url).path("blah").toString(),
'https://subdomain.asdf.com/blah'
);
t.end();
});
test("path() url encodes pieces of the path, but not slashes", function(t){
var url = "https://subdomain.asdf.com";
t.equal(
urlgrey(url).path("encode here", "but/not/here").toString(),
'https://subdomain.asdf.com/encode%20here/but/not/here'
);
t.end();
});
test("path() sets the path from strings and arrays of strings", function(t){
var url = "https://asdf.com";
t.equal(
urlgrey(url).path(['qwer', '/asdf'], 'qwer/1234/', '/1234/').toString(),
'https://asdf.com/qwer/asdf/qwer/1234/1234'
);
t.end();
});
test("hash() gets the hash", function(t){
var url = "https://user:pass@subdomain.asdf.com/path?asdf=1234#frag";
t.equal(
urlgrey(url).hash(),
'frag'
);
t.end();
});
test("hash() sets the hash", function(t){
var url = "https://subdomain.asdf.com";
t.equal(
urlgrey(url).hash("blah").toString(),
'https://subdomain.asdf.com#blah'
);
t.end();
});
test("password() gets the password", function(t){
var url = "https://user:pass@subdomain.asdf.com/path?asdf=1234#frag";
t.equal(
urlgrey(url).password(),
'pass'
);
t.end();
});
test("password() sets the password", function(t){
var url = "https://user:pass@subdomain.asdf.com";
t.equal(
urlgrey(url).password("blah").toString(),
'https://user:blah@subdomain.asdf.com'
);
t.end();
});
test("username() gets the username", function(t){
var url = "https://user:pass@subdomain.asdf.com/path?asdf=1234#frag";
t.equal(
urlgrey(url).username(),
'user'
);
t.end();
});
test("username() sets the username", function(t){
var url = "https://user:pass@subdomain.asdf.com";
t.equal(
urlgrey(url).username("blah").toString(),
'https://blah:pass@subdomain.asdf.com'
);
t.end();
});
test("parent() returns the second-last item in the path if there is no input", function(t){
var url = "http://asdf.com/path/kid?asdf=1234#frag";
t.equal(
urlgrey(url).parent().toString(),
'http://asdf.com/path'
);
t.end();
});
test("parent() ignores a trailing slash", function(t){
var url = "http://asdf.com/path/kid/?asdf=1234#frag";
t.equal(
urlgrey(url).parent().toString(),
'http://asdf.com/path'
);
t.end();
});
test("parent() throws an exception when no parent path exists", function(t){
var url = "http://asdf.com/";
t.plan(1);
try {
urlgrey(url).parent();
t.fail("expected exception was not raised.");
} catch (ex){
t.equal(
ex.message,
'The current path has no parent path'
);
}
});
test("extendedPath() returns the part of the url after the host:port", function(t){
var url = "http://asdf.com:8080/path?asdf=1234#frag";
t.equal(
urlgrey(url).extendedPath(),
'/path?asdf=1234#frag'
);
t.end();
});
test("extendedPath() lets you set the part of the url after the host:port", function(t){
var url = "http://asdf.com:8080/path?asdf=1234#frag";
t.equal(
urlgrey(url).extendedPath('/asdf?qwer=1234#fraggle').toString(),
'http://asdf.com:8080/asdf?qwer=1234#fraggle'
);
t.end();
});
test("rawChild() returns a url with the given path suffix added", function(t){
var url = "http://asdf.com/path?asdf=1234#frag";
t.equal(
urlgrey(url).rawChild('kid here').toString(),
'http://asdf.com/path/kid here'
);
t.end();
});
test("rawChild() returns a url with the given path suffixes added, without escaping", function(t){
var url = "http://asdf.com/path?asdf=1234#frag";
t.equal(
urlgrey(url).rawChild('kid here', 'and here').toString(),
'http://asdf.com/path/kid here/and here'
);
t.end();
});
test("rawChild() returns the last item in the path if there is no input", function(t){
var url = "http://asdf.com/path/kid?asdf=1234#frag";
t.equal(
urlgrey(url).rawChild(),
'kid'
);
t.end();
});
test("rawChild() ignores a trailing slash", function(t){
var url = "http://asdf.com/path/kid/?asdf=1234#frag";
t.equal(
urlgrey(url).rawChild(),
'kid'
);
t.end();
});
test("child() returns a url with the given path suffix added", function(t){
var url = "http://asdf.com/path?asdf=1234#frag";
t.equal(
urlgrey(url).child('kid here').toString(),
'http://asdf.com/path/kid%20here'
);
t.end();
});
test("child() returns a url with the given path suffixes added", function(t){
var url = "http://asdf.com/path?asdf=1234#frag";
t.equal(
urlgrey(url).child('kid here', 'and here').toString(),
'http://asdf.com/path/kid%20here/and%20here'
);
t.end();
});
test("child() returns a url with the given path suffix added even if it's 0", function(t){
var url = "http://asdf.com/path?asdf=1234#frag";
t.equal(
urlgrey(url).child(0).toString(),
'http://asdf.com/path/0'
);
t.end();
});
test("child() returns the last item in the path if there is no input", function(t){
var url = "http://asdf.com/path/kid?asdf=1234#frag";
t.equal(
urlgrey(url).child(),
'kid'
);
t.end();
});
test("child() ignores a trailing slash", function(t){
var url = "http://asdf.com/path/kid/?asdf=1234#frag";
t.equal(
urlgrey(url).child(),
'kid'
);
t.end();
});
test("parsed() returns some stuff", function(t){
var url = "http://gdizzle:pazz@asdf.com:5678/path/kid/?asdf=1234#frag";
var actual = urlgrey(url).parsed();
var expected = {
"protocol": "http",
"auth": "gdizzle:pazz",
"host": "asdf.com:5678",
"port": 5678,
"hostname": "asdf.com",
"hash": "frag",
"search": "?asdf=1234",
"query": "asdf=1234",
"pathname": "/path/kid/",
"path": "/path/kid/?asdf=1234",
"href": "http://gdizzle:pazz@asdf.com:5678/path/kid/?asdf=1234#frag",
"username": "gdizzle",
"password": "pazz"
};
t.deepLooseEqual(
actual, expected
);
t.end();
});
test("toString() returns the input string if unmodified", function(t){
var url = "https://user:pass@subdomain.asdf.com/path?asdf=1234#frag";
t.equal(
urlgrey(url).toString(),
url
);
t.end();
});
test("toString() returns an absolute uri even if one is not given", function(t){
var url = "/path?asdf=1234#frag";
t.ok(
/^http:\/\/|file:\/\//.test(urlgrey(url).toString())
);
t.end();
});
test("protocol() gets the protocol", function(t){
var url = "https://user:pass@subdomain.asdf.com/path?asdf=1234#frag";
t.equal(
urlgrey(url).protocol(),
'https'
);
t.end();
});
if (isBrowser){
test("protocol() gets the protocol as the current one if unset", function(t){
t.equal(
urlgrey('').protocol(),
window.location.href.slice(0, 4)
);
t.end();
});
} else {
test("protocol() gets the protocol as http if unset", function(t){
var url = "/path?asdf=1234#frag";
t.equal(
urlgrey(url).protocol(),
'http'
);
t.end();
});
}
test("protocol() sets the protocol", function(t){
var url = "https://user:pass@subdomain.asdf.com/path?asdf=1234#frag";
var expected = "http://user:pass@subdomain.asdf.com/path?asdf=1234#frag";
t.equal(
urlgrey(url).protocol('http').toString(),
expected
);
t.end();
});
test("queryString() sets the queryString", function(t){
t.equal(
urlgrey("http://s.asdf.com").queryString('asdf=1234').toString(),
"http://s.asdf.com?asdf=1234"
);
t.end();
});
test("queryString() updates the queryString", function(t){
t.equal(
urlgrey("http://s.asdf.com?asdf=1234").queryString('qwer=1235').toString(),
"http://s.asdf.com?qwer=1235"
);
t.end();
});
test("queryString() gets the queryString", function(t){
t.equal(
urlgrey("http://s.asdf.com/?qwer=1234").queryString(),
"qwer=1234"
);
t.end();
});
test("queryString() 'roundtrips' the queryString", function(t){
t.equal(
urlgrey("http://s.asdf.com/?qwer=1234")
.queryString('asdf=1234').queryString(),
"asdf=1234"
);
t.end();
});
test("rawQuery() adds a querystring", function(t){
t.equal(
urlgrey("http://asdf.com").rawQuery({asdf:'12 34'}).toString(),
"http://asdf.com?asdf=12 34"
);
t.end();
});
test("rawQuery() modifies a querystring", function(t){
t.equal(
urlgrey("http://asdf.com?asdf=5678&b=2").rawQuery({asdf:'12 34'}).toString(),
"http://asdf.com?asdf=12 34&b=2"
);
t.end();
});
test("rawQuery() clears a querystring", function(t){
t.equal(
urlgrey("http://asdf.com?asdf=5678").rawQuery(false) .toString(),
"http://asdf.com"
);
t.end();
});
test("rawQuery() extracts a querystring as an object", function(t){
t.looseEqual(
urlgrey("http://asdf.com?asdf=56%2078").rawQuery(),
{asdf:'56 78'}
);
t.end();
});
test("query() adds a querystring", function(t){
t.equal(
urlgrey("http://asdf.com").query({asdf:'12 34'}) .toString(),
"http://asdf.com?asdf=12%2034"
);
t.end();
});
test("query() modifies a querystring", function(t){
t.equal(
urlgrey("http://asdf.com?asdf=5678&b=2").query({asdf:1234}).toString(),
"http://asdf.com?asdf=1234&b=2"
);
t.end();
});
test("query() clears a querystring", function(t){
t.equal(
urlgrey("http://asdf.com?asdf=5678").query(false).toString(),
"http://asdf.com"
);
t.end();
});
test("query() extracts a querystring as an object", function(t){
t.looseEqual(
urlgrey("http://asdf.com?asdf=56%2078").query(),
{asdf:'56 78'}
);
t.end();
});
test("encode() returns a url-encoded version of its input string", function(t){
t.equal(
urlgrey('').encode("this is a test"),
"this%20is%20a%20test"
);
t.end();
});
test("decode() returns a url-decoded version of its input string", function(t){
t.equal(
urlgrey('').decode("this%20is%20a%20test"),
"this is a test"
);
t.end();
});
};
module.exports = tapetest;