X-Git-Url: http://git.asbjorn.it/?a=blobdiff_plain;f=test%2Funit%2Fcore.js;h=d3e0a44713e4ba8ddcc7d7357deedd06ed6517b7;hb=24ffc395a7b2e0b925fcb7959d743820fe269f07;hp=088726ff7c20f97767e745d095f6993fb8ab63b3;hpb=6496e4d9c419e447ac2d8a2e3623f07f74fd0860;p=jquery.git
diff --git a/test/unit/core.js b/test/unit/core.js
index 088726f..d3e0a44 100644
--- a/test/unit/core.js
+++ b/test/unit/core.js
@@ -8,64 +8,189 @@ test("Basic requirements", function() {
ok( document.getElementsByTagName, "getElementsByTagName" );
ok( RegExp, "RegExp" );
ok( jQuery, "jQuery" );
- ok( $, "$()" );
+ ok( $, "$" );
});
-test("$()", function() {
- expect(4);
-
- var main = $("#main");
- isSet( $("div p", main).get(), q("sndp", "en", "sap"), "Basic selector with jQuery object as context" );
-
+test("jQuery()", function() {
+ expect(12);
+
+ // Basic constructor's behavior
+
+ equals( jQuery().length, 1, "jQuery() === jQuery(document)" );
+ equals( jQuery(undefined).length, 0, "jQuery(undefined) === jQuery([])" );
+ equals( jQuery(null).length, 0, "jQuery(null) === jQuery([])" );
+ equals( jQuery("").length, 0, "jQuery('') === jQuery([])" );
+
+ var obj = jQuery("div")
+ equals( jQuery(obj).selector, "div", "jQuery(jQueryObj) == jQueryObj" );
+
+ // can actually yield more than one, when iframes are included, the window is an array as well
+ equals( 1, jQuery(window).length, "Correct number of elements generated for jQuery(window)" );
+
+
+ var main = jQuery("#main");
+ isSet( jQuery("div p", main).get(), q("sndp", "en", "sap"), "Basic selector with jQuery object as context" );
+
/*
// disabled since this test was doing nothing. i tried to fix it but i'm not sure
// what the expected behavior should even be. FF returns "\n" for the text node
// make sure this is handled
- var crlfContainer = $('
\r\n
');
+ var crlfContainer = jQuery('
\r\n
');
var x = crlfContainer.contents().get(0).nodeValue;
equals( x, what???, "Check for \\r and \\n in jQuery()" );
*/
-
+
/* // Disabled until we add this functionality in
var pass = true;
try {
- $("
');
- ok( $('#table caption').length, "Append caption" );
-
- reset();
- $('form:last')
- .append('')
- .append('');
-
- t( "Append Select", "#appendSelect1, #appendSelect2", ["appendSelect1", "appendSelect2"] );
-
- // using contents will get comments regular, text, and comment nodes
- var j = $("#nonnodes").contents();
- var d = $("").appendTo("#nonnodes").append(j);
- equals( $("#nonnodes").length, 1, "Check node,textnode,comment append moved leaving just the div" );
- ok( d.contents().length >= 2, "Check node,textnode,comment append works" );
- d.contents().appendTo("#nonnodes");
- d.remove();
- ok( $("#nonnodes").contents().length >= 2, "Check node,textnode,comment append cleanup worked" );
-});
-
-test("appendTo(String|Element|Array<Element>|jQuery)", function() {
- expect(6);
- var defaultText = 'Try them out:'
- $('buga').appendTo('#first');
- ok( $("#first").text() == defaultText + 'buga', 'Check if text appending works' );
- ok( $('').appendTo('#select3').parent().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:";
- $(document.getElementById('first')).appendTo('#sap');
- ok( expected == $('#sap').text(), "Check for appending of element" );
-
- reset();
- expected = "This link has class=\"blog\": Simon Willison's WeblogTry them out:Yahoo";
- $([document.getElementById('first'), document.getElementById('yahoo')]).appendTo('#sap');
- 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";
- $("#first, #yahoo").appendTo('#sap');
- ok( expected == $('#sap').text(), "Check for appending of jQuery object" );
-
- reset();
- $('#select1').appendTo('#foo');
- t( 'Append select', '#foo select', ['select1'] );
+ // Fixed at [5998], #3641
+ same( parse([-2,-1], [0,1,2]), [-2,-1,0,1,2], "Second array including a zero (falsy)");
});
-test("prepend(String|Element|Array<Element>|jQuery)", function() {
- expect(5);
- var defaultText = 'Try them out:'
- var result = $('#first').prepend('buga');
- ok( result.text() == 'buga' + defaultText, 'Check if text prepending works' );
- ok( $('#select3').prepend('').find('option:first-child').attr('value') == 'prependTest', 'Prepending html options to select element');
-
- reset();
- var expected = "Try them out:This link has class=\"blog\": Simon Willison's Weblog";
- $('#sap').prepend(document.getElementById('first'));
- ok( expected == $('#sap').text(), "Check for prepending of element" );
-
- reset();
- expected = "Try them out:YahooThis link has class=\"blog\": Simon Willison's Weblog";
- $('#sap').prepend([document.getElementById('first'), document.getElementById('yahoo')]);
- ok( expected == $('#sap').text(), "Check for prepending of array of elements" );
-
- reset();
- expected = "Try them out:YahooThis link has class=\"blog\": Simon Willison's Weblog";
- $('#sap').prepend($("#first, #yahoo"));
- ok( expected == $('#sap').text(), "Check for prepending of jQuery object" );
-});
-
-test("prependTo(String|Element|Array<Element>|jQuery)", function() {
- expect(6);
- var defaultText = 'Try them out:'
- $('buga').prependTo('#first');
- ok( $('#first').text() == 'buga' + defaultText, 'Check if text prepending works' );
- ok( $('').prependTo('#select3').parent().find('option:first-child').attr('value') == 'prependTest', 'Prepending html options to select element');
-
- reset();
- var expected = "Try them out:This link has class=\"blog\": Simon Willison's Weblog";
- $(document.getElementById('first')).prependTo('#sap');
- ok( expected == $('#sap').text(), "Check for prepending of element" );
-
- reset();
- expected = "Try them out:YahooThis link has class=\"blog\": Simon Willison's Weblog";
- $([document.getElementById('yahoo'), document.getElementById('first')]).prependTo('#sap');
- ok( expected == $('#sap').text(), "Check for prepending of array of elements" );
-
- reset();
- expected = "Try them out:YahooThis link has class=\"blog\": Simon Willison's Weblog";
- $("#yahoo, #first").prependTo('#sap');
- ok( expected == $('#sap').text(), "Check for prepending of jQuery object" );
-
- reset();
- $('').prependTo('form:last');
- $('').prependTo('form:last');
-
- t( "Prepend Select", "#prependSelect1, #prependSelect2", ["prependSelect1", "prependSelect2"] );
-});
-
-test("before(String|Element|Array<Element>|jQuery)", function() {
- expect(4);
- var expected = 'This is a normal link: bugaYahoo';
- $('#yahoo').before('buga');
- ok( expected == $('#en').text(), 'Insert String before' );
-
- reset();
- expected = "This is a normal link: Try them out:Yahoo";
- $('#yahoo').before(document.getElementById('first'));
- ok( expected == $('#en').text(), "Insert element before" );
-
- reset();
- expected = "This is a normal link: Try them out:diveintomarkYahoo";
- $('#yahoo').before([document.getElementById('first'), document.getElementById('mark')]);
- ok( expected == $('#en').text(), "Insert array of elements before" );
-
- reset();
- expected = "This is a normal link: Try them out:diveintomarkYahoo";
- $('#yahoo').before($("#first, #mark"));
- ok( expected == $('#en').text(), "Insert jQuery before" );
-});
-
-test("insertBefore(String|Element|Array<Element>|jQuery)", function() {
- expect(4);
- var expected = 'This is a normal link: bugaYahoo';
- $('buga').insertBefore('#yahoo');
- ok( expected == $('#en').text(), 'Insert String before' );
-
- reset();
- expected = "This is a normal link: Try them out:Yahoo";
- $(document.getElementById('first')).insertBefore('#yahoo');
- ok( expected == $('#en').text(), "Insert element before" );
-
- reset();
- expected = "This is a normal link: Try them out:diveintomarkYahoo";
- $([document.getElementById('first'), document.getElementById('mark')]).insertBefore('#yahoo');
- ok( expected == $('#en').text(), "Insert array of elements before" );
-
- reset();
- expected = "This is a normal link: Try them out:diveintomarkYahoo";
- $("#first, #mark").insertBefore('#yahoo');
- ok( expected == $('#en').text(), "Insert jQuery before" );
-});
-
-test("after(String|Element|Array<Element>|jQuery)", function() {
- expect(4);
- var expected = 'This is a normal link: Yahoobuga';
- $('#yahoo').after('buga');
- ok( expected == $('#en').text(), 'Insert String after' );
-
- reset();
- expected = "This is a normal link: YahooTry them out:";
- $('#yahoo').after(document.getElementById('first'));
- ok( expected == $('#en').text(), "Insert element after" );
-
- reset();
- expected = "This is a normal link: YahooTry them out:diveintomark";
- $('#yahoo').after([document.getElementById('first'), document.getElementById('mark')]);
- ok( expected == $('#en').text(), "Insert array of elements after" );
-
- reset();
- expected = "This is a normal link: YahooTry them out:diveintomark";
- $('#yahoo').after($("#first, #mark"));
- ok( expected == $('#en').text(), "Insert jQuery after" );
-});
-
-test("insertAfter(String|Element|Array<Element>|jQuery)", function() {
- expect(4);
- var expected = 'This is a normal link: Yahoobuga';
- $('buga').insertAfter('#yahoo');
- ok( expected == $('#en').text(), 'Insert String after' );
-
- reset();
- expected = "This is a normal link: YahooTry them out:";
- $(document.getElementById('first')).insertAfter('#yahoo');
- ok( expected == $('#en').text(), "Insert element after" );
-
- reset();
- expected = "This is a normal link: YahooTry them out:diveintomark";
- $([document.getElementById('mark'), document.getElementById('first')]).insertAfter('#yahoo');
- ok( expected == $('#en').text(), "Insert array of elements after" );
-
- reset();
- expected = "This is a normal link: YahooTry them out:diveintomark";
- $("#mark, #first").insertAfter('#yahoo');
- ok( expected == $('#en').text(), "Insert jQuery after" );
-});
-
-test("replaceWith(String|Element|Array<Element>|jQuery)", function() {
- expect(10);
- $('#yahoo').replaceWith('buga');
- ok( $("#replace")[0], 'Replace element with string' );
- ok( !$("#yahoo")[0], 'Verify that original element is gone, after string' );
-
- reset();
- $('#yahoo').replaceWith(document.getElementById('first'));
- ok( $("#first")[0], 'Replace element with element' );
- ok( !$("#yahoo")[0], 'Verify that original element is gone, after element' );
-
- reset();
- $('#yahoo').replaceWith([document.getElementById('first'), document.getElementById('mark')]);
- ok( $("#first")[0], 'Replace element with array of elements' );
- ok( $("#mark")[0], 'Replace element with array of elements' );
- ok( !$("#yahoo")[0], 'Verify that original element is gone, after array of elements' );
-
- reset();
- $('#yahoo').replaceWith($("#first, #mark"));
- ok( $("#first")[0], 'Replace element with set of elements' );
- ok( $("#mark")[0], 'Replace element with set of elements' );
- ok( !$("#yahoo")[0], 'Verify that original element is gone, after set of elements' );
-});
-
-test("replaceAll(String|Element|Array<Element>|jQuery)", function() {
- expect(10);
- $('buga').replaceAll("#yahoo");
- ok( $("#replace")[0], 'Replace element with string' );
- ok( !$("#yahoo")[0], 'Verify that original element is gone, after string' );
-
- reset();
- $(document.getElementById('first')).replaceAll("#yahoo");
- ok( $("#first")[0], 'Replace element with element' );
- ok( !$("#yahoo")[0], 'Verify that original element is gone, after element' );
-
- reset();
- $([document.getElementById('first'), document.getElementById('mark')]).replaceAll("#yahoo");
- ok( $("#first")[0], 'Replace element with array of elements' );
- ok( $("#mark")[0], 'Replace element with array of elements' );
- ok( !$("#yahoo")[0], 'Verify that original element is gone, after array of elements' );
-
- reset();
- $("#first, #mark").replaceAll("#yahoo");
- ok( $("#first")[0], 'Replace element with set of elements' );
- ok( $("#mark")[0], 'Replace element with set of elements' );
- ok( !$("#yahoo")[0], 'Verify that original element is gone, after set of elements' );
-});
-
-test("end()", function() {
- expect(3);
- ok( 'Yahoo' == $('#yahoo').parent().end().text(), 'Check for end' );
- ok( $('#yahoo').end(), 'Check for end with nothing to end' );
-
- var x = $('#yahoo');
- x.parent();
- ok( 'Yahoo' == $('#yahoo').text(), 'Check for non-destructive behaviour' );
-});
-
-test("find(String)", function() {
- expect(2);
- ok( 'Yahoo' == $('#foo').find('.blogTest').text(), 'Check for find' );
-
- // using contents will get comments regular, text, and comment nodes
- var j = $("#nonnodes").contents();
- equals( j.find("div").length, 0, "Check node,textnode,comment to find zero divs" );
-});
-
-test("clone()", function() {
- expect(6);
- ok( 'This is a normal link: Yahoo' == $('#en').text(), 'Assert text for #en' );
- var clone = $('#yahoo').clone();
- ok( 'Try them out:Yahoo' == $('#first').append(clone).text(), 'Check for clone' );
- ok( 'This is a normal link: Yahoo' == $('#en').text(), 'Reassert text for #en' );
- // using contents will get comments regular, text, and comment nodes
- var cl = $("#nonnodes").contents().clone();
- ok( cl.length >= 2, "Check node,textnode,comment clone works (some browsers delete comments on clone)" );
-
- stop();
- $.get("data/dashboard.xml", function (xml) {
- var root = $(xml.documentElement).clone();
- $("tab:first", xml).text("origval");
- $("tab:first", root).text("cloneval");
- equals($("tab:first", xml).text(), "origval", "Check original XML node was correctly set");
- equals($("tab:first", root).text(), "cloneval", "Check cloned XML node was correctly set");
- start();
- });
-});
-
-test("is(String)", function() {
- expect(26);
- ok( $('#form').is('form'), 'Check for element: A form must be a form' );
- ok( !$('#form').is('div'), 'Check for element: A form is not a div' );
- ok( $('#mark').is('.blog'), 'Check for class: Expected class "blog"' );
- ok( !$('#mark').is('.link'), 'Check for class: Did not expect class "link"' );
- ok( $('#simon').is('.blog.link'), 'Check for multiple classes: Expected classes "blog" and "link"' );
- ok( !$('#simon').is('.blogTest'), 'Check for multiple classes: Expected classes "blog" and "link", but not "blogTest"' );
- ok( $('#en').is('[lang="en"]'), 'Check for attribute: Expected attribute lang to be "en"' );
- ok( !$('#en').is('[lang="de"]'), 'Check for attribute: Expected attribute lang to be "en", not "de"' );
- ok( $('#text1').is('[type="text"]'), 'Check for attribute: Expected attribute type to be "text"' );
- ok( !$('#text1').is('[type="radio"]'), 'Check for attribute: Expected attribute type to be "text", not "radio"' );
- ok( $('#text2').is(':disabled'), 'Check for pseudoclass: Expected to be disabled' );
- ok( !$('#text1').is(':disabled'), 'Check for pseudoclass: Expected not disabled' );
- ok( $('#radio2').is(':checked'), 'Check for pseudoclass: Expected to be checked' );
- ok( !$('#radio1').is(':checked'), 'Check for pseudoclass: Expected not checked' );
- ok( $('#foo').is(':has(p)'), 'Check for child: Expected a child "p" element' );
- ok( !$('#foo').is(':has(ul)'), 'Check for child: Did not expect "ul" element' );
- ok( $('#foo').is(':has(p):has(a):has(code)'), 'Check for childs: Expected "p", "a" and "code" child elements' );
- ok( !$('#foo').is(':has(p):has(a):has(code):has(ol)'), 'Check for childs: Expected "p", "a" and "code" child elements, but no "ol"' );
- ok( !$('#foo').is(0), 'Expected false for an invalid expression - 0' );
- ok( !$('#foo').is(null), 'Expected false for an invalid expression - null' );
- ok( !$('#foo').is(''), 'Expected false for an invalid expression - ""' );
- ok( !$('#foo').is(undefined), 'Expected false for an invalid expression - undefined' );
-
- // test is() with comma-seperated expressions
- ok( $('#en').is('[lang="en"],[lang="de"]'), 'Comma-seperated; Check for lang attribute: Expect en or de' );
- ok( $('#en').is('[lang="de"],[lang="en"]'), 'Comma-seperated; Check for lang attribute: Expect en or de' );
- ok( $('#en').is('[lang="en"] , [lang="de"]'), 'Comma-seperated; Check for lang attribute: Expect en or de' );
- ok( $('#en').is('[lang="de"] , [lang="en"]'), 'Comma-seperated; Check for lang attribute: Expect en or de' );
-});
-
-test("$.extend(Object, Object)", function() {
- expect(17);
+test("jQuery.extend(Object, Object)", function() {
+ expect(23);
var settings = { xnumber1: 5, xnumber2: 7, xstring1: "peter", xstring2: "pan" },
options = { xnumber2: 1, xstring2: "x", xxx: "newstring" },
@@ -948,13 +517,39 @@ test("$.extend(Object, Object)", function() {
isObj( deep2.foo, deep2copy.foo, "Check if not deep2: options must not be modified" );
equals( deep1.foo2, document, "Make sure that a deep clone was not attempted on the document" );
+ var empty = {};
+ var optionsWithLength = { foo: { length: -1 } };
+ jQuery.extend(true, empty, optionsWithLength);
+ isObj( empty.foo, optionsWithLength.foo, "The length property must copy correctly" );
+
+ empty = {};
+ var optionsWithDate = { foo: { date: new Date } };
+ jQuery.extend(true, empty, optionsWithDate);
+ isObj( empty.foo, optionsWithDate.foo, "Dates copy correctly" );
+
+ var myKlass = function() {};
+ empty = {};
+ var optionsWithCustomObject = { foo: { date: new myKlass } };
+ jQuery.extend(true, empty, optionsWithCustomObject);
+ isObj( empty.foo, optionsWithCustomObject.foo, "Custom objects copy correctly" );
+
+ var nullUndef;
+ nullUndef = jQuery.extend({}, options, { xnumber2: null });
+ ok( nullUndef.xnumber2 === null, "Check to make sure null values are copied");
+
+ nullUndef = jQuery.extend({}, options, { xnumber2: undefined });
+ ok( nullUndef.xnumber2 === options.xnumber2, "Check to make sure undefined values are not copied");
+
+ nullUndef = jQuery.extend({}, options, { xnumber0: null });
+ ok( nullUndef.xnumber0 === null, "Check to make sure null values are inserted");
+
var target = {};
var recursive = { foo:target, bar:5 };
jQuery.extend(true, target, recursive);
isObj( target, { bar:5 }, "Check to make sure a recursive obj doesn't go never-ending loop by not copying it over" );
var ret = jQuery.extend(true, { foo: [] }, { foo: [0] } ); // 1907
- ok( ret.foo.length == 1, "Check to make sure a value with coersion 'false' copies over when necessary to fix #1907" );
+ equals( ret.foo.length, 1, "Check to make sure a value with coersion 'false' copies over when necessary to fix #1907" );
var ret = jQuery.extend(true, { foo: "1,2,3" }, { foo: [1, 2, 3] } );
ok( typeof ret.foo != "string", "Check to make sure values equal with coersion (but not actually equal) overwrite correctly" );
@@ -985,391 +580,83 @@ test("$.extend(Object, Object)", function() {
isObj( options2, options2Copy, "Check if not modified: options2 must not be modified" );
});
-test("val()", function() {
- expect(3);
- ok( $("#text1").val() == "Test", "Check for value of input element" );
- ok( !$("#text1").val() == "", "Check for value of input element" );
- // ticket #1714 this caused a JS error in IE
- ok( $("#first").val() == "", "Check a paragraph element to see if it has a value" );
-});
-
-test("val(String)", function() {
- expect(4);
- document.getElementById('text1').value = "bla";
- ok( $("#text1").val() == "bla", "Check for modified value of input element" );
- $("#text1").val('test');
- ok ( document.getElementById('text1').value == "test", "Check for modified (via val(String)) value of input element" );
-
- $("#select1").val("3");
- ok( $("#select1").val() == "3", "Check for modified (via val(String)) value of select element" );
-
- // using contents will get comments regular, text, and comment nodes
- var j = $("#nonnodes").contents();
- j.val("asdf");
- equals( j.val(), "asdf", "Check node,textnode,comment with val()" );
- j.removeAttr("value");
-});
-
-var scriptorder = 0;
-
-test("html(String)", function() {
- expect(11);
- var div = $("#main > div");
- div.html("test");
- var pass = true;
- for ( var i = 0; i < div.size(); i++ ) {
- if ( div.get(i).childNodes.length != 1 ) pass = false;
- }
- ok( pass, "Set HTML" );
-
- reset();
- // using contents will get comments regular, text, and comment nodes
- var j = $("#nonnodes").contents();
- j.html("bold");
- equals( j.html().toLowerCase(), "bold", "Check node,textnode,comment with html()" );
-
- $("#main").html("");
- $("#main select").html("");
- equals( $("#main select").val(), "O2", "Selected option correct" );
-
- stop();
-
- $("#main").html('');
-
- $("#main").html('foo ');
-
- // it was decided that waiting to execute ALL scripts makes sense since nested ones have to wait anyway so this test case is changed, see #1959
- $("#main").html("