diff options
Diffstat (limited to 'deps/v8/test/webkit/array-every.js')
-rw-r--r-- | deps/v8/test/webkit/array-every.js | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/deps/v8/test/webkit/array-every.js b/deps/v8/test/webkit/array-every.js new file mode 100644 index 0000000000..bbd50cb2a8 --- /dev/null +++ b/deps/v8/test/webkit/array-every.js @@ -0,0 +1,116 @@ +// 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 the behavior of the every() method on Array objects." +); + +debug("1.0 Single Argument Testing"); +function isBigEnough(element, index, array) { + return (element >= 10); +} +shouldBeFalse("[12, 5, 8, 130, 44].every(isBigEnough)"); +shouldBeTrue("[12, 54, 18, 130, 44].every(isBigEnough)"); +debug(""); + +debug("2.0 Two Argument Testing"); +var predicate = { + comparison: 11, + isBigEnough: function(s) { + return (s >= comparison); + } +}; +shouldBeFalse("[12, 5, 10, 130, 44].every(isBigEnough, predicate)"); +shouldBeTrue("[12, 54, 18, 130, 44].every(isBigEnough, predicate)"); +debug(""); + +debug("3.0 Array Mutation Tests"); +debug(""); + +debug("3.1 Array Element Removal"); +function isBigEnoughAndPop(element, index, array) { + array.pop(); + return (element >= 10); +} +shouldBeFalse("[12, 5, 8, 130, 44].every(isBigEnoughAndPop)"); +shouldBeTrue("[12, 54, 18, 130, 44].every(isBigEnoughAndPop)"); +debug(""); + +debug("3.2 Array Element Changing"); +function isBigEnoughAndChange(element, index, array) { + array[array.length-1-index]= 5; + return (element >= 10); +} +shouldBeFalse("[12, 5, 8, 130, 44].every(isBigEnoughAndChange)"); +shouldBeFalse("[12, 54, 18, 130, 44].every(isBigEnoughAndChange)"); +debug(""); + +debug("3.3 Array Element Addition"); +function isBigEnoughAndPush(element, index, array) { + array.push(131); + return (element >= 131); +} +shouldBeFalse("[12, 5, 8, 130, 44].every(isBigEnoughAndPush)"); +shouldBeFalse("[12, 54, 18, 130, 44].every(isBigEnoughAndPush)"); +debug(""); + +debug("4.0 Exception Test"); +function isBigEnoughAndException(element, index, array) { + if(index==1) throw "exception from function"; + return (element >= 10); +} +shouldThrow("[12, 5, 8, 130, 44].every(isBigEnoughAndException)", '"exception from function"'); +shouldThrow("[12, 54, 18, 130, 44].every(isBigEnoughAndException)", '"exception from function"'); +debug(""); + +debug("5.0 Wrong Type for Callback Test"); +shouldThrow("[12, 5, 8, 130, 44].every(5)"); +shouldThrow("[12, 5, 8, 130, 44].every('wrong')"); +shouldThrow("[12, 5, 8, 130, 44].every(new Object())"); +shouldThrow("[12, 5, 8, 130, 44].every(null)"); +shouldThrow("[12, 5, 8, 130, 44].every(undefined)"); +shouldThrow("[12, 5, 8, 130, 44].every()"); +debug(""); + +debug('6.0 Early Exit ("Short Circuiting")'); +var accumulator = new Array(); +function isBigEnoughShortCircuit(element, index, array) { + accumulator.push(element); + return (element >= 10); +} +shouldBeFalse("[12, 5, 8, 130, 44].every(isBigEnoughShortCircuit)"); +shouldBe("accumulator.toString()", "[12, 5].toString()"); +accumulator.length = 0; +shouldBeTrue("[12, 54, 18, 130, 44].every(isBigEnoughShortCircuit)"); +shouldBe("accumulator.toString()", "[12, 54, 18, 130, 44].toString()"); +debug(""); + +debug('7.0 Behavior for Holes in Arrays'); +var arr = [5, 5, 5, 5]; +delete arr[1]; +function isNotUndefined(element, index, array) { + return typeof element !== "undefined"; +} +shouldBeTrue("arr.every(isNotUndefined)"); +arr = new Array(20); +shouldBeTrue("arr.every(isNotUndefined)"); |