diff --git a/layout/html/tests/TestInline.html b/layout/html/tests/TestInline.html new file mode 100644 index 000000000000..5857a3662c04 --- /dev/null +++ b/layout/html/tests/TestInline.html @@ -0,0 +1,17 @@ + + + + + + + This test uses the DOM to exercise incremental reflow for inline frames. + In particular, the test attempts to exercise all of the code paths for + appending, inserting and removing frames from an inline frame. See + TestInline.js for the source to the test.
+
+ + diff --git a/layout/html/tests/TestInline.js b/layout/html/tests/TestInline.js new file mode 100644 index 000000000000..906fc42c0dab --- /dev/null +++ b/layout/html/tests/TestInline.js @@ -0,0 +1,131 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * + * The contents of this file are subject to the Netscape Public License + * Version 1.0 (the "NPL"); you may not use this file except in + * compliance with the NPL. You may obtain a copy of the NPL at + * http://www.mozilla.org/NPL/ + * + * Software distributed under the NPL is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL + * for the specific language governing rights and limitations under the + * NPL. + * + * The Initial Developer of this code under the NPL is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All Rights + * Reserved. + */ +function makeInline() +{ + var image = document.createElement("IMG"); + image.setAttribute("SRC", "bluedot.gif"); + image.setAttribute("WIDTH", "100"); + image.setAttribute("HEIGHT", "40"); + image.setAttribute("BORDER", "2"); + return image; +} + +function makeBlock() +{ + var block = document.createElement("DIV"); + var text = document.createTextNode("Block Text"); + block.appendChild(text); + return block; +} + +function appendInline() +{ + var i = makeInline(); + var it = document.getElementById("it"); + it.appendChild(i); +} + +function insertInline(index) +{ + var i = makeInline(); + var it = document.getElementById("it"); + var kids = it.childNodes; + if ((index < 0) || (index > kids.length)) index = 0; + var before = kids[index]; + it.insertBefore(i, before); +} + +function appendBlock() +{ + var b = makeBlock(); + var it = document.getElementById("it"); + it.appendChild(b); +} + +function insertBlock(index) +{ + var b = makeBlock(); + var it = document.getElementById("it"); + var kids = it.childNodes; + if ((index < 0) || (index > kids.length)) index = 0; + var before = kids[index]; + it.insertBefore(b, before); +} + +function removeAllChildren() +{ + var it = document.getElementById("it"); + var kids = it.childNodes; + var n = kids.length; + for (i = 0; i < n; i++) { + it.removeChild(kids[0]); + } +} + +function testAppend() +{ + appendInline(); // case 3 + appendBlock(); // case 2 + appendInline(); // case 3 + appendBlock(); // case 1 + appendBlock(); // case 1 + appendInline(); // case 3 +} + +function testInsert() +{ + // first test inserting inlines + insertInline(0); // case 1 + insertInline(3); // case 2 + insertInline(7); // case 3 + insertInline(8); // case 4 + + // test inserting blocks + insertBlock(0); // case 2 + insertBlock(1); // case 3 + insertInline(0); + insertInline(0); + insertInline(11); + insertBlock(13); // case 4 + insertInline(0); + insertInline(0); + insertBlock(2); // case 5 + + // Remove all the children before doing block case 1 + if (false) { + removeAllChildren(); + appendInline(); + insertBlock(0); // case 1 + + removeAllChildren(); + appendInline(); + appendInline(); + insertBlock(1); // case 6 + } +} + +function testRemove() +{ +} + +function runTest() +{ + testAppend(); + testInsert(); + testRemove(); +} diff --git a/layout/html/tests/bluedot.gif b/layout/html/tests/bluedot.gif new file mode 100755 index 000000000000..4f4127fe2f9a Binary files /dev/null and b/layout/html/tests/bluedot.gif differ