RetroZilla/layout/html/tests/block/dom/testlogic.js
2015-10-20 23:03:22 -04:00

219 lines
5.6 KiB
JavaScript

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 1998
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*
* Alternatively, the contents of this file may be used under the terms of
* either of the GNU General Public License Version 2 or later (the "GPL"),
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
var newTextCount = 1;
function NewText() {
return document.createTextNode("Some text #" + newTextCount++);
}
function NewImage() {
var img = document.createElement("img");
if (img) {
img.src = "blue-square.gif";
img.width = "50";
img.height = "50";
}
return img;
}
function NewComment() {
return document.createComment("Another pesky comment");
}
function NewInline() {
var i = document.createElement("i");
if (i) {
i.appendChild(NewText());
i.appendChild(NewComment());
i.appendChild(NewText());
}
return i;
}
function NewBlock() {
var b = document.createElement("p");
if (b) {
b.appendChild(NewText());
b.appendChild(NewComment());
b.appendChild(NewText());
}
return b;
}
function NewButton(msg,func) {
var b = document.createElement("input");
if (b) {
b.type = "button";
b.value = msg;
b.onclick = func;
}
return b;
}
function InsertIt(ctor) {
var list = document.getElementsByName("it");
if (list) {
for (var i = 0; i < list.length; i++) {
var node = list[i];
if (node) {
node.insertBefore(ctor(), node.childNodes[0]);
}
}
}
}
function AppendIt(ctor) {
var list = document.getElementsByName("it");
if (list) {
for (var i = 0; i < list.length; i++) {
var node = list[i];
if (node) {
node.appendChild(ctor());
}
}
}
}
function InsertText() { InsertIt(NewText); }
function AppendText() { AppendIt(NewText); }
function InsertImage() { InsertIt(NewImage); }
function AppendImage() { AppendIt(NewImage); }
function InsertComment() { InsertIt(NewComment); }
function AppendComment() { AppendIt(NewComment); }
function InsertBlock() { InsertIt(NewBlock); }
function AppendBlock() { AppendIt(NewBlock); }
function InsertInline() { InsertIt(NewInline); }
function AppendInline() { AppendIt(NewInline); }
function FindText(n) {
var kids = n.childNodes;
for (var i = 0; i < kids.length; i++) {
var kid = kids[i];
if (kid.nodeType == Node.TEXT_NODE) {
return kid;
}
}
return null;
}
function ShrinkText() {
var list = document.getElementsByName("it");
if (list) {
for (var i = 0; i < list.length; i++) {
var text = FindText(list[i]);
if (text) {
text.deleteData(0, 1);
}
}
}
}
function GrowText() {
var list = document.getElementsByName("it");
if (list) {
for (var i = 0; i < list.length; i++) {
var text = FindText(list[i]);
if (text) {
text.insertData(0, "Zz");
}
}
}
}
function RemoveNode(n) {
var list = document.getElementsByName("it");
if (list) {
for (var i = 0; i < list.length; i++) {
var node = list[i];
if (node && node.childNodes[n]) {
node.removeChild(node.childNodes[n]);
}
}
}
}
function RemoveNodeN() {
var list = document.getElementsByName("it");
if (list) {
for (var i = 0; i < list.length; i++) {
var node = list[i];
if (node && node.childNodes.length) {
node.removeChild(node.childNodes[node.childNodes.length-1]);
}
}
}
}
function RemoveNode0() { RemoveNode(0); }
function RemoveNode1() { RemoveNode(1); }
function RemoveNode2() { RemoveNode(2); }
function RemoveNode3() { RemoveNode(3); }
var seed = 0;
function Rand() {
seed = (seed * 69069 + 12359) & 0x7fffffff;
return seed;
}
var tests = new Array(17);
tests[0] = InsertText;
tests[1] = AppendText;
tests[2] = InsertComment;
tests[3] = AppendComment;
tests[4] = InsertImage;
tests[5] = AppendImage;
tests[6] = InsertBlock;
tests[7] = AppendBlock;
tests[8] = InsertInline;
tests[9] = AppendInline;
tests[10] = ShrinkText;
tests[11] = GrowText;
tests[12] = RemoveNode0;
tests[13] = RemoveNode1;
tests[14] = RemoveNode2;
tests[15] = RemoveNode3;
tests[16] = RemoveNodeN;
function RandomTests() {
for (var i = 0; i < 100; i++) {
var rr = Rand() >> 3;
var ix = rr % tests.length;
dump(ix + "\n");
var f = tests[ix];
f();
}
}