module("core");
test("Basic requirements", function() {
expect(7);
ok( Array.prototype.push, "Array.push()" );
ok( Function.prototype.apply, "Function.apply()" );
ok( document.getElementById, "getElementById" );
ok( document.getElementsByTagName, "getElementsByTagName" );
ok( RegExp, "RegExp" );
ok( jQuery, "jQuery" );
ok( $, "$()" );
});
test("$()", function() {
expect(3);
var main = $("#main");
isSet( $("div p", main).get(), q("sndp", "en", "sap"), "Basic selector with jQuery object as context" );
// make sure this is handled
$('
\r\n
');
ok( true, "Check for \\r and \\n in jQuery()" );
var pass = true;
try {
var f = document.getElementById("iframe").contentDocument;
f.open();
f.write("");
f.close();
$("
Testing
").appendTo(f.body);
} catch(e){
pass = false;
}
ok( pass, "$('<tag>') needs optional document parameter to ease cross-frame DOM wrangling, see #968" );
});
test("isFunction", function() {
expect(21);
// Make sure that false values return false
ok( !jQuery.isFunction(), "No Value" );
ok( !jQuery.isFunction( null ), "null Value" );
ok( !jQuery.isFunction( undefined ), "undefined Value" );
ok( !jQuery.isFunction( "" ), "Empty String Value" );
ok( !jQuery.isFunction( 0 ), "0 Value" );
// Check built-ins
// Safari uses "(Internal Function)"
ok( jQuery.isFunction(String), "String Function" );
ok( jQuery.isFunction(Array), "Array Function" );
ok( jQuery.isFunction(Object), "Object Function" );
ok( jQuery.isFunction(Function), "Function Function" );
// When stringified, this could be misinterpreted
var mystr = "function";
ok( !jQuery.isFunction(mystr), "Function String" );
// When stringified, this could be misinterpreted
var myarr = [ "function" ];
ok( !jQuery.isFunction(myarr), "Function Array" );
// When stringified, this could be misinterpreted
var myfunction = { "function": "test" };
ok( !jQuery.isFunction(myfunction), "Function Object" );
// Make sure normal functions still work
var fn = function(){};
ok( jQuery.isFunction(fn), "Normal Function" );
var obj = document.createElement("object");
// Firefox says this is a function
ok( !jQuery.isFunction(obj), "Object Element" );
// IE says this is an object
ok( jQuery.isFunction(obj.getAttribute), "getAttribute Function" );
var nodes = document.body.childNodes;
// Safari says this is a function
ok( !jQuery.isFunction(nodes), "childNodes Property" );
var first = document.body.firstChild;
// Normal elements are reported ok everywhere
ok( !jQuery.isFunction(first), "A normal DOM Element" );
var input = document.createElement("input");
input.type = "text";
document.body.appendChild( input );
// IE says this is an object
ok( jQuery.isFunction(input.focus), "A default function property" );
document.body.removeChild( input );
var a = document.createElement("a");
a.href = "some-function";
document.body.appendChild( a );
// This serializes with the word 'function' in it
ok( !jQuery.isFunction(a), "Anchor Element" );
document.body.removeChild( a );
// Recursive function calls have lengths and array-like properties
function callme(callback){
function fn(response){
callback(response);
}
ok( jQuery.isFunction(fn), "Recursive Function Call" );
fn({ some: "data" });
};
callme(function(){
callme(function(){});
});
});
test("length", function() {
expect(1);
ok( $("div").length == 2, "Get Number of Elements Found" );
});
test("size()", function() {
expect(1);
ok( $("div").size() == 2, "Get Number of Elements Found" );
});
test("get()", function() {
expect(1);
isSet( $("div").get(), q("main","foo"), "Get All Elements" );
});
test("get(Number)", function() {
expect(1);
ok( $("div").get(0) == document.getElementById("main"), "Get A Single Element" );
});
test("add(String|Element|Array)", function() {
expect(7);
isSet( $("#sndp").add("#en").add("#sap").get(), q("sndp", "en", "sap"), "Check elements from document" );
isSet( $("#sndp").add( $("#en")[0] ).add( $("#sap") ).get(), q("sndp", "en", "sap"), "Check elements from document" );
ok( $([]).add($("#form")[0].elements).length > 13, "Check elements from array" );
var x = $([]).add($("
");
ok( x[0].id == "x1", "Check on-the-fly element1" );
ok( x[1].id == "x2", "Check on-the-fly element2" );
});
test("each(Function)", function() {
expect(1);
var div = $("div");
div.each(function(){this.foo = 'zoo';});
var pass = true;
for ( var i = 0; i < div.size(); i++ ) {
if ( div.get(i).foo != "zoo" ) pass = false;
}
ok( pass, "Execute a function, Relative" );
});
test("index(Object)", function() {
expect(8);
ok( $([window, document]).index(window) == 0, "Check for index of elements" );
ok( $([window, document]).index(document) == 1, "Check for index of elements" );
var inputElements = $('#radio1,#radio2,#check1,#check2');
ok( inputElements.index(document.getElementById('radio1')) == 0, "Check for index of elements" );
ok( inputElements.index(document.getElementById('radio2')) == 1, "Check for index of elements" );
ok( inputElements.index(document.getElementById('check1')) == 2, "Check for index of elements" );
ok( inputElements.index(document.getElementById('check2')) == 3, "Check for index of elements" );
ok( inputElements.index(window) == -1, "Check for not found index" );
ok( inputElements.index(document) == -1, "Check for not found index" );
});
test("attr(String)", function() {
expect(13);
ok( $('#text1').attr('value') == "Test", 'Check for value attribute' );
ok( $('#text1').attr('type') == "text", 'Check for type attribute' );
ok( $('#radio1').attr('type') == "radio", 'Check for type attribute' );
ok( $('#check1').attr('type') == "checkbox", 'Check for type attribute' );
ok( $('#simon1').attr('rel') == "bookmark", 'Check for rel attribute' );
ok( $('#google').attr('title') == "Google!", 'Check for title attribute' );
ok( $('#mark').attr('hreflang') == "en", 'Check for hreflang attribute' );
ok( $('#en').attr('lang') == "en", 'Check for lang attribute' );
ok( $('#simon').attr('class') == "blog link", 'Check for class attribute' );
ok( $('#name').attr('name') == "name", 'Check for name attribute' );
ok( $('#text1').attr('name') == "action", 'Check for name attribute' );
ok( $('#form').attr('action').indexOf("formaction") >= 0, 'Check for action attribute' );
$('').attr('href', '#5').appendTo('#main'); // using innerHTML in IE causes href attribute to be serialized to the full path
ok( $('#tAnchor5').attr('href') == "#5", 'Check for non-absolute href (an anchor)' );
});
if ( location.protocol != "file:" ) {
test("attr(String) in XML Files", function() {
expect(2);
stop();
$.get("data/dashboard.xml", function(xml) {
ok( $("locations", xml).attr("class") == "foo", "Check class attribute in XML document" );
ok( $("location", xml).attr("for") == "bar", "Check for attribute in XML document" );
start();
});
});
}
test("attr(String, Function)", function() {
expect(2);
ok( $('#text1').attr('value', function() { return this.id })[0].value == "text1", "Set value from id" );
ok( $('#text1').attr('title', function(i) { return i }).attr('title') == "0", "Set value with an index");
});
test("attr(Hash)", function() {
expect(1);
var pass = true;
$("div").attr({foo: 'baz', zoo: 'ping'}).each(function(){
if ( this.getAttribute('foo') != "baz" && this.getAttribute('zoo') != "ping" ) pass = false;
});
ok( pass, "Set Multiple Attributes" );
});
test("attr(String, Object)", function() {
expect(8);
var div = $("div");
div.attr("foo", "bar");
var pass = true;
for ( var i = 0; i < div.size(); i++ ) {
if ( div.get(i).getAttribute('foo') != "bar" ) pass = false;
}
ok( pass, "Set Attribute" );
ok( $("#foo").attr({"width": null}), "Try to set an attribute to nothing" );
$("#name").attr('name', 'something');
ok( $("#name").attr('name') == 'something', 'Set name attribute' );
$("#check2").attr('checked', true);
ok( document.getElementById('check2').checked == true, 'Set checked attribute' );
$("#check2").attr('checked', false);
ok( document.getElementById('check2').checked == false, 'Set checked attribute' );
$("#text1").attr('readonly', true);
ok( document.getElementById('text1').readOnly == true, 'Set readonly attribute' );
$("#text1").attr('readonly', false);
ok( document.getElementById('text1').readOnly == false, 'Set readonly attribute' );
$("#name").attr('maxlength', '5');
ok( document.getElementById('name').maxLength == '5', 'Set maxlength attribute' );
});
if ( location.protocol != "file:" ) {
test("attr(String, Object)x", function() {
expect(2);
stop();
$.get('data/dashboard.xml', function(xml) {
var titles = [];
$('tab', xml).each(function() {
titles.push($(this).attr('title'));
});
ok( titles[0] == 'Location', 'attr() in XML context: Check first title' );
ok( titles[1] == 'Users', 'attr() in XML context: Check second title' );
start();
});
});
}
test("css(String|Hash)", function() {
expect(19);
ok( $('#main').css("display") == 'none', 'Check for css property "display"');
ok( $('#foo').is(':visible'), 'Modifying CSS display: Assert element is visible');
$('#foo').css({display: 'none'});
ok( !$('#foo').is(':visible'), 'Modified CSS display: Assert element is hidden');
$('#foo').css({display: 'block'});
ok( $('#foo').is(':visible'), 'Modified CSS display: Assert element is visible');
$('#floatTest').css({styleFloat: 'right'});
ok( $('#floatTest').css('styleFloat') == 'right', 'Modified CSS float using "styleFloat": Assert float is right');
$('#floatTest').css({cssFloat: 'left'});
ok( $('#floatTest').css('cssFloat') == 'left', 'Modified CSS float using "cssFloat": Assert float is left');
$('#floatTest').css({'float': 'right'});
ok( $('#floatTest').css('float') == 'right', 'Modified CSS float using "float": Assert float is right');
$('#floatTest').css({'font-size': '30px'});
ok( $('#floatTest').css('font-size') == '30px', 'Modified CSS font-size: Assert font-size is 30px');
$.each("0,0.25,0.5,0.75,1".split(','), function(i, n) {
$('#foo').css({opacity: n});
ok( $('#foo').css('opacity') == parseFloat(n), "Assert opacity is " + parseFloat(n) + " as a String" );
$('#foo').css({opacity: parseFloat(n)});
ok( $('#foo').css('opacity') == parseFloat(n), "Assert opacity is " + parseFloat(n) + " as a Number" );
});
$('#foo').css({opacity: ''});
ok( $('#foo').css('opacity') == '1', "Assert opacity is 1 when set to an empty String" );
});
test("css(String, Object)", function() {
expect(18);
ok( $('#foo').is(':visible'), 'Modifying CSS display: Assert element is visible');
$('#foo').css('display', 'none');
ok( !$('#foo').is(':visible'), 'Modified CSS display: Assert element is hidden');
$('#foo').css('display', 'block');
ok( $('#foo').is(':visible'), 'Modified CSS display: Assert element is visible');
$('#floatTest').css('styleFloat', 'left');
ok( $('#floatTest').css('styleFloat') == 'left', 'Modified CSS float using "styleFloat": Assert float is left');
$('#floatTest').css('cssFloat', 'right');
ok( $('#floatTest').css('cssFloat') == 'right', 'Modified CSS float using "cssFloat": Assert float is right');
$('#floatTest').css('float', 'left');
ok( $('#floatTest').css('float') == 'left', 'Modified CSS float using "float": Assert float is left');
$('#floatTest').css('font-size', '20px');
ok( $('#floatTest').css('font-size') == '20px', 'Modified CSS font-size: Assert font-size is 20px');
$.each("0,0.25,0.5,0.75,1".split(','), function(i, n) {
$('#foo').css('opacity', n);
ok( $('#foo').css('opacity') == parseFloat(n), "Assert opacity is " + parseFloat(n) + " as a String" );
$('#foo').css('opacity', parseFloat(n));
ok( $('#foo').css('opacity') == parseFloat(n), "Assert opacity is " + parseFloat(n) + " as a Number" );
});
$('#foo').css('opacity', '');
ok( $('#foo').css('opacity') == '1', "Assert opacity is 1 when set to an empty String" );
});
test("text()", function() {
expect(1);
var expected = "This link has class=\"blog\": Simon Willison's Weblog";
ok( $('#sap').text() == expected, 'Check for merged text of more then one element.' );
});
test("wrap(String|Element)", function() {
expect(7);
var defaultText = 'Try them out:'
var result = $('#first').wrap('
').text();
ok( defaultText == result, 'Check for wrapping of on-the-fly html' );
ok( $('#first').parent().parent().is('.red'), 'Check if wrapper has class "red"' );
reset();
var defaultText = 'Try them out:'
var result = $('#first').wrap(document.getElementById('empty')).parent();
ok( result.is('ol'), 'Check for element wrapping' );
ok( result.text() == defaultText, 'Check for element wrapping' );
reset();
stop();
$('#check1').click(function() {
var checkbox = this;
ok( checkbox.checked, "Checkbox's state is erased after wrap() action, see #769" );
$(checkbox).wrap( '' );
ok( checkbox.checked, "Checkbox's state is erased after wrap() action, see #769" );
// use a fade in to check state after this event handler has finished
setTimeout(function() {
ok( !checkbox.checked, "Checkbox's state is erased after wrap() action, see #769" );
start();
}, 100);
}).click();
});
test("append(String|Element|Array<Element>|jQuery)", function() {
expect(17);
var defaultText = 'Try them out:'
var result = $('#first').append('buga');
ok( result.text() == defaultText + 'buga', 'Check if text appending works' );
ok( $('#select3').append('').find('option:last-child').attr('value') == 'appendTest', 'Appending html options to select element');
reset();
var expected = "This link has class=\"blog\": Simon Willison's WeblogTry them out:";
$('#sap').append(document.getElementById('first'));
ok( expected == $('#sap').text(), "Check for appending of element" );
reset();
expected = "This link has class=\"blog\": Simon Willison's WeblogTry them out:Yahoo";
$('#sap').append([document.getElementById('first'), document.getElementById('yahoo')]);
ok( expected == $('#sap').text(), "Check for appending of array of elements" );
reset();
expected = "This link has class=\"blog\": Simon Willison's WeblogTry them out:Yahoo";
$('#sap').append($("#first, #yahoo"));
ok( expected == $('#sap').text(), "Check for appending of jQuery object" );
reset();
$("#sap").append( 5 );
ok( $("#sap")[0].innerHTML.match( /5$/ ), "Check for appending a number" );
reset();
$("#sap").append( " text with spaces " );
ok( $("#sap")[0].innerHTML.match(/ text with spaces $/), "Check for appending text with spaces" );
reset();
ok( $("#sap").append([]), "Check for appending an empty array." );
ok( $("#sap").append(""), "Check for appending an empty string." );
ok( $("#sap").append(document.getElementsByTagName("foo")), "Check for appending an empty nodelist." );
reset();
$("#sap").append(document.getElementById('form'));
ok( $("#sap>form").size() == 1, "Check for appending a form" ); // Bug #910
reset();
var pass = true;
try {
$( $("iframe")[0].contentWindow.document.body ).append("
test
");
} catch(e) {
pass = false;
}
ok( pass, "Test for appending a DOM node to the contents of an IFrame" );
reset();
$('