| Index: test/webkit/array-every.js
|
| diff --git a/test/webkit/array-every.js b/test/webkit/array-every.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..bbd50cb2a81641df76da50fc0f5b2a7b458b51d6
|
| --- /dev/null
|
| +++ b/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)");
|
|
|