(function() {
'use strict';
/*global document, URI, $, test, equal, ok */
module('jQuery.URI', {
setup: function() {
var links = [
'an HTTP link',
'an HTTPS link',
'some pdf',
'hello world',
'directories',
'directories',
'Mail me',
'some javascript',
'jump to anchor',
'',
'',
'
'
];
$('' + links.join('') + '
')
.appendTo(document.body);
$('foo
')
.appendTo(document.body);
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = '/nonexistant.js';
document.getElementById('testestest').appendChild(script);
},
teardown: function() {
var t = $('#testestest');
t.next().remove();
t.remove();
}
});
test('.uri()', function() {
var $links = $('#testestest'),
$first = $links.children().first(),
uri = $first.uri(),
_uri = URI('/hello.world');
ok(uri !== _uri, 'different URI instances');
var __uri = $first.uri(_uri);
ok(uri !== _uri, 'different URI instances');
ok(uri === __uri, 'same URI instances');
equal($first.attr('href'), _uri.toString(), 'equal URI');
});
test('filtering with :uri()', function() {
var $links = $('#testestest');
// find using accessor and "begins with" comparison
equal($('a:uri(href^=#anc)').length, 1, '$(selector) Anchor Link');
equal($links.find(':uri(href^=#anc)').length, 1, '.find(selector) Anchor Link');
// find using accessor and "ends with" comparison
equal($(':uri(href$=.css)').length, 1, ':uri(href$=.css)');
// find using accessor and "contains" comparison
equal($(':uri(href *= /hello/)').length, 1, ':uri(href *= /hello/)');
// find using accessor and "equals" comparison
equal($links.find(':uri(protocol=https)').length, 1, ':uri(protocol=https)');
equal($links.find(':uri(protocol=http)').length, 3, ':uri(protocol=http)');
// directory match with trailing slash
equal($links.find(':uri(directory *= /two/)').length, 2, ':uri(directory *= /two/)');
// find using URI.is()
equal($links.find(':uri(relative)').length, 5, ':uri(relative)');
equal($links.find(':uri(is:relative)').length, 5, ':uri(is:relative)');
equal($links.find(':uri(is: relative)').length, 5, ':uri(is:relative)');
// find using URI.equal()
// This syntax breaks Sizzle, probably because it's looking for a nested pseudo ":http"
//equal($links.find(':uri(equals:http://example.org/hello/foo/../world.html)').length, 1, ':uri(equals:$url$)');
equal($links.find(':uri(equals:"http://example.org/hello/foo/../world.html")').length, 1, ':uri(equals:$url$)');
equal($links.find(':uri(equals: "http://example.org/hello/foo/../world.html")').length, 1, ':uri(equals:$url$)');
// find URNs
equal($links.find(':uri(urn)').length, 2, ':uri(urn)');
// .is()
equal($links.children('script').is(':uri(suffix=js)'), true, '.is(\':uri(suffix=js)\')');
equal($links.children('form').is(':uri(suffix=php)'), true, '.is(\':uri(suffix=php)\')');
// .has()
equal($('div').has(':uri(suffix=js)').length, 1, '.has(\':uri(suffix=js)\')');
});
test('.attr("href")', function() {
var $links = $('#testestest'),
$first = $links.children().first(),
first = $first.get(0),
uri = $first.uri(),
href = function(elem) {
return elem.getAttribute('href');
};
if (!$.support.hrefNormalized) {
href = function(elem) {
return elem.getAttribute('href', 2);
};
}
ok(uri instanceof URI, 'instanceof URI');
equal(href(first), uri.toString(), 'URI equals href');
// test feedback to DOM element
uri.hostname('example.com');
ok($first.uri() === uri, 'URI persisted');
equal(href(first), uri.toString(), 'transparent href update');
// test feedback from DOM element
$first.attr('href', 'http://example.net/');
ok($first.uri() === uri, 'URI persisted');
equal(href(first), uri.toString(), 'transparent href update');
});
test('.attr("uri:accessor")', function() {
var $links = $('#testestest'),
$first = $links.children().first(),
uri = $first.uri(),
href = function(elem) {
return elem.getAttribute('href');
};
if (!$.support.hrefNormalized) {
href = function(elem) {
return elem.getAttribute('href', 2);
};
}
equal($first.attr('uri:hostname'), 'example.org', 'reading uri:hostname');
$first.attr('uri:hostname', 'example.com');
equal($first.attr('uri:hostname'), 'example.com', 'changed uri:hostname');
equal($first.is(':uri(hostname=example.com)'), true, ':uri() after changed uri:hostname');
ok($first.uri() === uri, 'URI persisted');
});
})();