Verify that we do not recurse infinitely through one of the Array->string conversion.

On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".


PASS var arrayDirectlyContainingItself = [];
    arrayDirectlyContainingItself.push(arrayDirectlyContainingItself);
    arrayDirectlyContainingItself.toString(); is ""
PASS var arrayDirectlyContainingItself = [];
    arrayDirectlyContainingItself.push(arrayDirectlyContainingItself);
    arrayDirectlyContainingItself.toLocaleString(); is ""
PASS var arrayDirectlyContainingItself = [];
    arrayDirectlyContainingItself.push(arrayDirectlyContainingItself);
    arrayDirectlyContainingItself.join(","); is ""
PASS var arrayDirectlyContainingItself = [];
    arrayDirectlyContainingItself.push(1);
    arrayDirectlyContainingItself.push(arrayDirectlyContainingItself);
    arrayDirectlyContainingItself.push("WebKit!");
    arrayDirectlyContainingItself.push(arrayDirectlyContainingItself);
    arrayDirectlyContainingItself.toString(); is "1,,WebKit!,"
PASS var arrayDirectlyContainingItself = [];
    arrayDirectlyContainingItself.push(1);
    arrayDirectlyContainingItself.push(arrayDirectlyContainingItself);
    arrayDirectlyContainingItself.push("WebKit!");
    arrayDirectlyContainingItself.push(arrayDirectlyContainingItself);
    arrayDirectlyContainingItself.toLocaleString(); is "1,,WebKit!,"
PASS var arrayDirectlyContainingItself = [];
    arrayDirectlyContainingItself.push(1);
    arrayDirectlyContainingItself.push(arrayDirectlyContainingItself);
    arrayDirectlyContainingItself.push("WebKit!");
    arrayDirectlyContainingItself.push(arrayDirectlyContainingItself);
    arrayDirectlyContainingItself.join("-"); is "1--WebKit!-"
PASS var arrayIndirectlyContainingItself = [];
    arrayIndirectlyContainingItself.push(1);
    arrayIndirectlyContainingItself.push([1, 2, [5, 6, [arrayIndirectlyContainingItself]]]);
    arrayIndirectlyContainingItself.push("WebKit!");
    arrayIndirectlyContainingItself.toString(); is "1,1,2,5,6,,WebKit!"
PASS var arrayIndirectlyContainingItself = [];
    arrayIndirectlyContainingItself.push(1);
    arrayIndirectlyContainingItself.push([1, 2, [5, 6, [arrayIndirectlyContainingItself]]]);
    arrayIndirectlyContainingItself.push("WebKit!");
    arrayIndirectlyContainingItself.toLocaleString(); is "1,1,2,5,6,,WebKit!"
PASS var arrayIndirectlyContainingItself = [];
    arrayIndirectlyContainingItself.push(1);
    arrayIndirectlyContainingItself.push([1, 2, [5, 6, [arrayIndirectlyContainingItself]]]);
    arrayIndirectlyContainingItself.push("WebKit!");
    arrayIndirectlyContainingItself.join("="); is "1=1,2,5,6,=WebKit!"
PASS var arrayIndirectlyContainingItself = [];
    arrayIndirectlyContainingItself.push(1);
    arrayIndirectlyContainingItself.push([1, 2, [5, 6, [arrayIndirectlyContainingItself]]]);
    arrayIndirectlyContainingItself.push("WebKit!");
    ["z", arrayIndirectlyContainingItself, 9].toString(); is "z,1,1,2,5,6,,WebKit!,9"
PASS var arrayIndirectlyContainingItself = [];
    arrayIndirectlyContainingItself.push(1);
    arrayIndirectlyContainingItself.push([1, 2, [5, 6, [arrayIndirectlyContainingItself]]]);
    arrayIndirectlyContainingItself.push("WebKit!");
    ["z", arrayIndirectlyContainingItself, 9].toLocaleString(); is "z,1,1,2,5,6,,WebKit!,9"
PASS var arrayIndirectlyContainingItself = [];
    arrayIndirectlyContainingItself.push(1);
    arrayIndirectlyContainingItself.push([1, 2, [5, 6, [arrayIndirectlyContainingItself]]]);
    arrayIndirectlyContainingItself.push("WebKit!");
    ["z", arrayIndirectlyContainingItself, 9].join("&"); is "z&1,1,2,5,6,,WebKit!&9"
PASS var arrayIndirectlyConvertingItself = ["a"];
    arrayIndirectlyConvertingItself.push({ array: arrayIndirectlyConvertingItself, toString: function() { return this.array.toString() } });
    arrayIndirectlyConvertingItself.push({ array: arrayIndirectlyConvertingItself, toString: function() { return this.array.toLocaleString() } });
    arrayIndirectlyConvertingItself.push({ array: arrayIndirectlyConvertingItself, toString: function() { return this.array.join("~") } });
    arrayIndirectlyConvertingItself.push("WebKit!");
    ["z", arrayIndirectlyConvertingItself, 9].toString(); is "z,a,,,,WebKit!,9"
PASS var arrayIndirectlyConvertingItself = ["a"];
    arrayIndirectlyConvertingItself.push({ array: arrayIndirectlyConvertingItself, toString: function() { return this.array.toString() } });
    arrayIndirectlyConvertingItself.push({ array: arrayIndirectlyConvertingItself, toString: function() { return this.array.toLocaleString() } });
    arrayIndirectlyConvertingItself.push({ array: arrayIndirectlyConvertingItself, toString: function() { return this.array.join("~") } });
    arrayIndirectlyConvertingItself.push("WebKit!");
    ["z", arrayIndirectlyConvertingItself, 9].toLocaleString(); is "z,a,,,,WebKit!,9"
PASS var arrayIndirectlyConvertingItself = ["a"];
    arrayIndirectlyConvertingItself.push({ array: arrayIndirectlyConvertingItself, toString: function() { return this.array.toString() } });
    arrayIndirectlyConvertingItself.push({ array: arrayIndirectlyConvertingItself, toString: function() { return this.array.toLocaleString() } });
    arrayIndirectlyConvertingItself.push({ array: arrayIndirectlyConvertingItself, toString: function() { return this.array.join("~") } });
    arrayIndirectlyConvertingItself.push("WebKit!");
    ["z", arrayIndirectlyConvertingItself, 9].join("*"); is "z*a,,,,WebKit!*9"
PASS successfullyParsed is true

TEST COMPLETE

