88 lines
5.9 KiB
JavaScript
88 lines
5.9 KiB
JavaScript
description("Verify that we do not recurse infinitely through one of the Array->string conversion.");
|
|
|
|
// Array that only contains itself.
|
|
shouldBeEqualToString(`var arrayDirectlyContainingItself = [];
|
|
arrayDirectlyContainingItself.push(arrayDirectlyContainingItself);
|
|
arrayDirectlyContainingItself.toString();`, "");
|
|
shouldBeEqualToString(`var arrayDirectlyContainingItself = [];
|
|
arrayDirectlyContainingItself.push(arrayDirectlyContainingItself);
|
|
arrayDirectlyContainingItself.toLocaleString();`, "");
|
|
shouldBeEqualToString(`var arrayDirectlyContainingItself = [];
|
|
arrayDirectlyContainingItself.push(arrayDirectlyContainingItself);
|
|
arrayDirectlyContainingItself.join(",");`, "");
|
|
|
|
// Array containing itself and a bunch of other objects.
|
|
shouldBeEqualToString(`var arrayDirectlyContainingItself = [];
|
|
arrayDirectlyContainingItself.push(1);
|
|
arrayDirectlyContainingItself.push(arrayDirectlyContainingItself);
|
|
arrayDirectlyContainingItself.push("WebKit!");
|
|
arrayDirectlyContainingItself.push(arrayDirectlyContainingItself);
|
|
arrayDirectlyContainingItself.toString();`, "1,,WebKit!,");
|
|
shouldBeEqualToString(`var arrayDirectlyContainingItself = [];
|
|
arrayDirectlyContainingItself.push(1);
|
|
arrayDirectlyContainingItself.push(arrayDirectlyContainingItself);
|
|
arrayDirectlyContainingItself.push("WebKit!");
|
|
arrayDirectlyContainingItself.push(arrayDirectlyContainingItself);
|
|
arrayDirectlyContainingItself.toLocaleString();`, "1,,WebKit!,");
|
|
shouldBeEqualToString(`var arrayDirectlyContainingItself = [];
|
|
arrayDirectlyContainingItself.push(1);
|
|
arrayDirectlyContainingItself.push(arrayDirectlyContainingItself);
|
|
arrayDirectlyContainingItself.push("WebKit!");
|
|
arrayDirectlyContainingItself.push(arrayDirectlyContainingItself);
|
|
arrayDirectlyContainingItself.join("-");`, "1--WebKit!-");
|
|
|
|
// Array indirectly containing itself.
|
|
shouldBeEqualToString(`var arrayIndirectlyContainingItself = [];
|
|
arrayIndirectlyContainingItself.push(1);
|
|
arrayIndirectlyContainingItself.push([1, 2, [5, 6, [arrayIndirectlyContainingItself]]]);
|
|
arrayIndirectlyContainingItself.push("WebKit!");
|
|
arrayIndirectlyContainingItself.toString();`, "1,1,2,5,6,,WebKit!");
|
|
shouldBeEqualToString(`var arrayIndirectlyContainingItself = [];
|
|
arrayIndirectlyContainingItself.push(1);
|
|
arrayIndirectlyContainingItself.push([1, 2, [5, 6, [arrayIndirectlyContainingItself]]]);
|
|
arrayIndirectlyContainingItself.push("WebKit!");
|
|
arrayIndirectlyContainingItself.toLocaleString();`, "1,1,2,5,6,,WebKit!");
|
|
shouldBeEqualToString(`var arrayIndirectlyContainingItself = [];
|
|
arrayIndirectlyContainingItself.push(1);
|
|
arrayIndirectlyContainingItself.push([1, 2, [5, 6, [arrayIndirectlyContainingItself]]]);
|
|
arrayIndirectlyContainingItself.push("WebKit!");
|
|
arrayIndirectlyContainingItself.join("=");`, "1=1,2,5,6,=WebKit!");
|
|
|
|
// Array containing another array with recursion.
|
|
shouldBeEqualToString(`var arrayIndirectlyContainingItself = [];
|
|
arrayIndirectlyContainingItself.push(1);
|
|
arrayIndirectlyContainingItself.push([1, 2, [5, 6, [arrayIndirectlyContainingItself]]]);
|
|
arrayIndirectlyContainingItself.push("WebKit!");
|
|
["z", arrayIndirectlyContainingItself, 9].toString();`, "z,1,1,2,5,6,,WebKit!,9");
|
|
shouldBeEqualToString(`var arrayIndirectlyContainingItself = [];
|
|
arrayIndirectlyContainingItself.push(1);
|
|
arrayIndirectlyContainingItself.push([1, 2, [5, 6, [arrayIndirectlyContainingItself]]]);
|
|
arrayIndirectlyContainingItself.push("WebKit!");
|
|
["z", arrayIndirectlyContainingItself, 9].toLocaleString();`, "z,1,1,2,5,6,,WebKit!,9");
|
|
shouldBeEqualToString(`var arrayIndirectlyContainingItself = [];
|
|
arrayIndirectlyContainingItself.push(1);
|
|
arrayIndirectlyContainingItself.push([1, 2, [5, 6, [arrayIndirectlyContainingItself]]]);
|
|
arrayIndirectlyContainingItself.push("WebKit!");
|
|
["z", arrayIndirectlyContainingItself, 9].join("&");`, "z&1,1,2,5,6,,WebKit!&9");
|
|
|
|
// Indirectly recurse to an other of the functions. The object do not contains itself, but contains object that recursively call
|
|
// an array to string conversion.
|
|
shouldBeEqualToString(`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();`, "z,a,,,,WebKit!,9");
|
|
shouldBeEqualToString(`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();`, "z,a,,,,WebKit!,9");
|
|
shouldBeEqualToString(`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("*");`, "z*a,,,,WebKit!*9");
|