diff options
Diffstat (limited to 'deps/v8/test/webkit/toString-elision-trailing-comma.js')
-rw-r--r-- | deps/v8/test/webkit/toString-elision-trailing-comma.js | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/deps/v8/test/webkit/toString-elision-trailing-comma.js b/deps/v8/test/webkit/toString-elision-trailing-comma.js new file mode 100644 index 0000000000..d64990515f --- /dev/null +++ b/deps/v8/test/webkit/toString-elision-trailing-comma.js @@ -0,0 +1,131 @@ +// Copyright 2013 the V8 project authors. All rights reserved. +// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +description( +"This test checks that toString() round-trip on a function that has a array with elision does not remove a comma." +); + +function f1() { + return [,]; +} + +function f2() { + return [1]; +} + +function f3() { + return [1,]; +} + +// this is the first testcase that proves that trailing +// elision comma is not removed +function f4() { + return [1,,]; +} + +function f5() { + return [1,,,]; +} +function f6() { + return [1,,,4]; +} + +function f7() { + return [,2,]; +} + +function f8() { + return [,2,,]; +} + +function f9() { + return [,2,,,5]; +} + +function f10() { + return [,,3,,,]; +} + +function f11() { + return [,,3,,,6]; +} + +function f12() { + return [,undefined]; +} + +function f13() { + return [,undefined,]; +} + +function f14() { + return [,undefined,,]; +} + +function f15() { + return [,,]; +} + +function f16() { + return [,,,]; +} + +shouldBe("typeof undefined", "'undefined'"); + +unevalf = function(x) { return '(' + x.toString() + ')'; }; + +function testToStringAndLength(fn, length, lastElement) +{ + // check that array length is correct + shouldBe(""+ fn +"().length", "" + length); + + // check that last element is what it is supposed to be + shouldBe(""+ fn +"()[" + length +"-1]", "" + lastElement); + + // check that toString result evaluates to code that can be evaluated + // and that toString doesn't remove the trailing elision comma. + shouldBe("unevalf(eval(unevalf("+fn+")))", "unevalf(" + fn + ")"); + + // check that toString()ed functions should retain semantics + + shouldBe("eval(unevalf("+fn+"))().length", ""+length); + shouldBe("eval(unevalf("+fn+"))()[" + length +"-1]", ""+lastElement); +} + + +testToStringAndLength("f1", 1); +testToStringAndLength("f2", 1, 1); +testToStringAndLength("f3", 1,1); +testToStringAndLength("f4", 2); +testToStringAndLength("f5", 3); +testToStringAndLength("f6", 4, 4); +testToStringAndLength("f7", 2, 2); +testToStringAndLength("f8", 3); +testToStringAndLength("f9", 5, 5); +testToStringAndLength("f10", 5); +testToStringAndLength("f11", 6, 6); +testToStringAndLength("f12", 2); +testToStringAndLength("f13", 2); +testToStringAndLength("f14", 3); +testToStringAndLength("f15", 2); +testToStringAndLength("f16", 3); |