Attempted to fix #6227, not entirely sure if it's a problem as I'm having a hard...
[jquery.git] / test / unit / manipulation.js
index f921ea1..e86eb3b 100644 (file)
@@ -376,13 +376,22 @@ test("append(Function) with incoming value", function() {
 });
 
 test("appendTo(String|Element|Array<Element>|jQuery)", function() {
-       expect(12);
+       expect(16);
+
        var defaultText = 'Try them out:'
        jQuery('<b>buga</b>').appendTo('#first');
        equals( jQuery("#first").text(), defaultText + 'buga', 'Check if text appending works' );
        equals( jQuery('<option value="appendTest">Append Test</option>').appendTo('#select3').parent().find('option:last-child').attr('value'), 'appendTest', 'Appending html options to select element');
 
        reset();
+       var l = jQuery("#first").children().length + 3;
+       jQuery("body").map(function(){
+               return jQuery("<strong></strong><b></b><b></b>").get();
+       }).appendTo("p");
+       equals( jQuery("#first").children().length, l, "Make sure the elements were inserted." );
+       equals( jQuery("#first").children().last()[0].nodeName.toLowerCase(), "b", "Verify the last element." );
+
+       reset();
        var expected = "This link has class=\"blog\": Simon Willison's WeblogTry them out:";
        jQuery(document.getElementById('first')).appendTo('#sap');
        equals( expected, jQuery('#sap').text(), "Check for appending of element" );
@@ -424,6 +433,20 @@ test("appendTo(String|Element|Array&lt;Element&gt;|jQuery)", function() {
        ok( jQuery("#moretests div:last").hasClass("test"), "appendTo element was modified after the insertion" );
 
        reset();
+
+       div = jQuery("<div/>");
+       jQuery("<span>a</span><b>b</b>").filter("span").appendTo( div );
+
+       equals( div.children().length, 1, "Make sure the right number of children were inserted." );
+
+       div = jQuery("#moretests div");
+
+       var num = jQuery("#main div").length;
+       div.remove().appendTo("#main");
+
+       equals( jQuery("#main div").length, num, "Make sure all the removed divs were inserted." );
+
+       reset();
 });
 
 var testPrepend = function(val) {
@@ -650,7 +673,7 @@ test("insertAfter(String|Element|Array&lt;Element&gt;|jQuery)", function() {
 });
 
 var testReplaceWith = function(val) {
-       expect(15);
+       expect(17);
        jQuery('#yahoo').replaceWith(val( '<b id="replace">buga</b>' ));
        ok( jQuery("#replace")[0], 'Replace element with string' );
        ok( !jQuery("#yahoo")[0], 'Verify that original element is gone, after string' );
@@ -661,6 +684,12 @@ var testReplaceWith = function(val) {
        ok( !jQuery("#yahoo")[0], 'Verify that original element is gone, after element' );
 
        reset();
+       jQuery("#main").append('<div id="bar"><div id="baz">Foo</div></div>');
+       jQuery('#baz').replaceWith("Baz");
+       equals( jQuery("#bar").text(),"Baz", 'Replace element with text' );
+       ok( !jQuery("#baz")[0], 'Verify that original element is gone, after element' );
+
+       reset();
        jQuery('#yahoo').replaceWith(val( [document.getElementById('first'), document.getElementById('mark')] ));
        ok( jQuery("#first")[0], 'Replace element with array of elements' );
        ok( jQuery("#mark")[0], 'Replace element with array of elements' );
@@ -721,7 +750,7 @@ test("replaceWith(String|Element|Array&lt;Element&gt;|jQuery)", function() {
 test("replaceWith(Function)", function() {
        testReplaceWith(functionReturningObj);
 
-       expect(16);
+       expect(18);
 
        var y = jQuery("#yahoo")[0];
 
@@ -730,7 +759,17 @@ test("replaceWith(Function)", function() {
        });
 
        reset();
-})
+});
+
+test("replaceWith(string) for more than one element", function(){
+       expect(3);
+
+       equals(jQuery('#foo p').length, 3, 'ensuring that test data has not changed');
+
+       jQuery('#foo p').replaceWith('<span>bar</span>');
+       equals(jQuery('#foo span').length, 3, 'verify that all the three original element have been replaced');
+       equals(jQuery('#foo p').length, 0, 'verify that all the three original element have been replaced');
+});
 
 test("replaceAll(String|Element|Array&lt;Element&gt;|jQuery)", function() {
        expect(10);
@@ -835,7 +874,7 @@ test("clone() on XML nodes", function() {
 }
 
 var testHtml = function(valueObj) {
-       expect(24);
+       expect(31);
 
        jQuery.scriptorder = 0;
 
@@ -852,6 +891,15 @@ var testHtml = function(valueObj) {
        equals( div.children().length, 2, "Make sure two child nodes exist." );
        equals( div.children().children().length, 1, "Make sure that a grandchild exists." );
 
+       var space = jQuery("<div/>").html(valueObj("&#160;"))[0].innerHTML;
+       ok( /^\s$|^&nbsp;$/.test( space ), "Make sure entities are passed through correctly." );
+       equals( jQuery("<div/>").html(valueObj("&amp;"))[0].innerHTML, "&amp;", "Make sure entities are passed through correctly." );
+
+       jQuery("#main").html(valueObj("<style>.foobar{color:green;}</style>"));
+
+       equals( jQuery("#main").children().length, 1, "Make sure there is a child element." );
+       equals( jQuery("#main").children()[0].nodeName.toUpperCase(), "STYLE", "And that a style element was inserted." );
+
        reset();
        // using contents will get comments regular, text, and comment nodes
        var j = jQuery("#nonnodes").contents();
@@ -883,16 +931,15 @@ var testHtml = function(valueObj) {
 
        jQuery("#main").html(valueObj('<script type="something/else">ok( false, "Non-script evaluated." );</script><script type="text/javascript">ok( true, "text/javascript is evaluated." );</script><script>ok( true, "No type is evaluated." );</script><div><script type="text/javascript">ok( true, "Inner text/javascript is evaluated." );</script><script>ok( true, "Inner No type is evaluated." );</script><script type="something/else">ok( false, "Non-script evaluated." );</script></div>'));
 
-       stop();
+       jQuery("#main").html(valueObj("<script>ok( true, 'Test repeated injection of script.' );</script>"));
+       jQuery("#main").html(valueObj("<script>ok( true, 'Test repeated injection of script.' );</script>"));
+       jQuery("#main").html(valueObj("<script>ok( true, 'Test repeated injection of script.' );</script>"));
 
        jQuery("#main").html(valueObj('<script type="text/javascript">ok( true, "jQuery().html().evalScripts() Evals Scripts Twice in Firefox, see #975 (1)" );</script>'));
 
        jQuery("#main").html(valueObj('foo <form><script type="text/javascript">ok( true, "jQuery().html().evalScripts() Evals Scripts Twice in Firefox, see #975 (2)" );</script></form>'));
 
-       // 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
        jQuery("#main").html(valueObj("<script>equals(jQuery.scriptorder++, 0, 'Script is executed in order');equals(jQuery('#scriptorder').length, 1,'Execute after html (even though appears before)')<\/script><span id='scriptorder'><script>equals(jQuery.scriptorder++, 1, 'Script (nested) is executed in order');equals(jQuery('#scriptorder').length, 1,'Execute after html')<\/script></span><script>equals(jQuery.scriptorder++, 2, 'Script (unnested) is executed in order');equals(jQuery('#scriptorder').length, 1,'Execute after html')<\/script>"));
-
-       setTimeout( start, 100 );
 }
 
 test("html(String)", function() {