wallet-core/thirdparty/URI.js/test/test_jim.js

146 lines
5.2 KiB
JavaScript
Raw Normal View History

/*
* What would jim do?
* more tests for border-edge cases
* Christian Harms.
*
* Note: I have no clue who or what jim is supposed to be. It might be something like the German DAU (dumbest possible user)
*/
(function() {
'use strict';
/*global URI, test, equal, raises */
module('injection');
test('protocol', function() {
var u = new URI('http://example.com/dir1/dir2/?query1=value1&query2=value2#hash');
raises(function() {
u.protocol('ftp://example.org');
}, TypeError, 'Failing invalid characters');
u.protocol('ftp:');
equal(u.protocol(), 'ftp', 'protocol() has set invalid protocoll!');
equal(u.hostname(), 'example.com', 'protocol() has changed the hostname');
});
test('port', function() {
var u = new URI('http://example.com/dir1/dir2/?query1=value1&query2=value2#hash');
raises(function() {
u.port('99:example.org');
}, TypeError, 'Failing invalid characters');
u.port(':99');
equal(u.hostname(), 'example.com', 'port() has modified hostname');
equal(u.port(), 99, 'port() has set an invalid port');
u.port(false);
equal(u.port(), '', 'port() has set an invalid port');
// RFC 3986 says nothing about "16-bit unsigned" http://tools.ietf.org/html/rfc3986#section-3.2.3
// u.href(new URI("http://example.com/"))
// u.port(65536);
// notEqual(u.port(), "65536", "port() has set to an non-valid value (A port number is a 16-bit unsigned integer)");
raises(function() {
u.port('-99');
}, TypeError, 'Failing invalid characters');
});
test('domain', function() {
var u = new URI('http://example.com/dir1/dir2/?query1=value1&query2=value2#hash');
raises(function() {
u.domain('example.org/dir0/');
}, TypeError, 'Failing invalid characters');
raises(function() {
u.domain('example.org:80');
}, TypeError, 'Failing invalid characters');
raises(function() {
u.domain('foo@example.org');
}, TypeError, 'Failing invalid characters');
});
test('subdomain', function() {
var u = new URI('http://example.com/dir1/dir2/?query1=value1&query2=value2#hash');
raises(function() {
u.subdomain('example.org/dir0/');
}, TypeError, 'Failing invalid characters');
raises(function() {
u.subdomain('example.org:80');
}, TypeError, 'Failing invalid characters');
raises(function() {
u.subdomain('foo@example.org');
}, TypeError, 'Failing invalid characters');
});
test('tld', function() {
var u = new URI('http://example.com/dir1/dir2/?query1=value1&query2=value2#hash');
raises(function() {
u.tld('foo/bar.html');
}, TypeError, 'Failing invalid characters');
});
test('path', function() {
var u = new URI('http://example.com/dir1/dir2/?query1=value1&query2=value2#hash');
u.path('/dir3/?query3=value3#fragment');
equal(u.hostname(), 'example.com', 'path() has modified hostname');
equal(u.path(), '/dir3/%3Fquery3=value3%23fragment', 'path() has set invalid path');
equal(u.query(), 'query1=value1&query2=value2', 'path() has modified query');
equal(u.fragment(), 'hash', 'path() has modified fragment');
});
test('filename', function() {
var u = new URI('http://example.com/dir1/dir2/?query1=value1&query2=value2#hash');
u.filename('name.html?query');
equal(u.filename(), 'name.html%3Fquery', 'filename() has set invalid filename');
equal(u.query(), 'query1=value1&query2=value2', 'filename() has modified query');
// allowed!
u.filename('../name.html?query');
equal(u.filename(), 'name.html%3Fquery', 'filename() has set invalid filename');
equal(u.directory(), '/dir1', 'filename() has not altered directory properly');
});
test('addQuery', function() {
var u = new URI('http://example.com/dir1/dir2/?query1=value1&query2=value2#hash');
u.addQuery('query3', 'value3#got');
equal(u.query(), 'query1=value1&query2=value2&query3=value3%23got', 'addQuery() has set invalid query');
equal(u.fragment(), 'hash', 'addQuery() has modified fragment');
});
/*
// RFC 3986 says "…and should limit these names to no more than 255 characters in length."
// SHOULD is not MUST therefore not the responsibility of URI.js
module("validation");
test("domain", function() {
// this bases on the wiki page information: http://en.wikipedia.org/wiki/Domain_Name_System
var u = new URI("http://example.com/"), domain, i, j;
//generate a 204 character domain
domain = "com"
for (i=0; i<20; i++) {
domain = "0123456789." + domain;
}
u.domain(domain);
equals(u.hostname(), domain, "domain() has not set 204-character-domain");
//expand the domain to a 404 character domain
for (i=0; i<20; i++) {
domain = "0123456789." + domain;
}
u.domain(domain);
equals(u.hostname() == domain, true, "set domain() with "+domain.length+" charachters - not valid domainname");
//generate a domain with three 70-char subdomains-parts.
domain = "com";
for (j=0; j<3; j++) {
//start new subdomain
domain = "." + domain;
for (i=0; i<70; i++) {
domain = "a" + domain;
}
}
u.domain(domain);
equals(u.hostname() == domain, true, "set domain() with 70-character subdomain not valid domainname");
});
*/
})();