diff --git a/js/src/jsarray.cpp b/js/src/jsarray.cpp index 3917be60f26..5201ebb3b05 100644 --- a/js/src/jsarray.cpp +++ b/js/src/jsarray.cpp @@ -3229,7 +3229,9 @@ static const JSFunctionSpec array_methods[] = { JS_SELF_HOSTED_FN("keys", "ArrayKeys", 0,0), /* ES7 additions */ +#ifdef NIGHTLY_BUILD JS_SELF_HOSTED_FN("includes", "ArrayIncludes", 2,0), +#endif JS_FS_END }; diff --git a/js/src/tests/ecma_7/Array/includes.js b/js/src/tests/ecma_7/Array/includes.js index aa439571ce3..f7daebf05d6 100644 --- a/js/src/tests/ecma_7/Array/includes.js +++ b/js/src/tests/ecma_7/Array/includes.js @@ -8,40 +8,42 @@ var summary = "Implement Array.prototype.includes"; print(BUGNUMBER + ": " + summary); -assertEq(typeof [].includes, "function"); -assertEq([].includes.length, 1); +if ('includes' in []) { + assertEq(typeof [].includes, "function"); + assertEq([].includes.length, 1); -assertTrue([1, 2, 3].includes(2)); -assertTrue([1,,2].includes(2)); -assertTrue([1, 2, 3].includes(2, 1)); -assertTrue([1, 2, 3].includes(2, -2)); -assertTrue([1, 2, 3].includes(2, -100)); -assertTrue([Object, Function, Array].includes(Function)); -assertTrue([-0].includes(0)); -assertTrue([NaN].includes(NaN)); -assertTrue([,].includes()); -assertTrue(staticIncludes("123", "2")); -assertTrue(staticIncludes({length: 3, 1: 2}, 2)); -assertTrue(staticIncludes({length: 3, 1: 2, get 3(){throw ""}}, 2)); -assertTrue(staticIncludes({length: 3, get 1() {return 2}}, 2)); -assertTrue(staticIncludes({__proto__: {1: 2}, length: 3}, 2)); -assertTrue(staticIncludes(new Proxy([1], {get(){return 2}}), 2)); + assertTrue([1, 2, 3].includes(2)); + assertTrue([1,,2].includes(2)); + assertTrue([1, 2, 3].includes(2, 1)); + assertTrue([1, 2, 3].includes(2, -2)); + assertTrue([1, 2, 3].includes(2, -100)); + assertTrue([Object, Function, Array].includes(Function)); + assertTrue([-0].includes(0)); + assertTrue([NaN].includes(NaN)); + assertTrue([,].includes()); + assertTrue(staticIncludes("123", "2")); + assertTrue(staticIncludes({length: 3, 1: 2}, 2)); + assertTrue(staticIncludes({length: 3, 1: 2, get 3(){throw ""}}, 2)); + assertTrue(staticIncludes({length: 3, get 1() {return 2}}, 2)); + assertTrue(staticIncludes({__proto__: {1: 2}, length: 3}, 2)); + assertTrue(staticIncludes(new Proxy([1], {get(){return 2}}), 2)); -assertFalse([1, 2, 3].includes("2")); -assertFalse([1, 2, 3].includes(2, 2)); -assertFalse([1, 2, 3].includes(2, -1)); -assertFalse([undefined].includes(NaN)); -assertFalse([{}].includes({})); -assertFalse(staticIncludes({length: 3, 1: 2}, 2, 2)); -assertFalse(staticIncludes({length: 3, get 0(){delete this[1]}, 1: 2}, 2)); -assertFalse(staticIncludes({length: -100, 0: 1}, 1)); + assertFalse([1, 2, 3].includes("2")); + assertFalse([1, 2, 3].includes(2, 2)); + assertFalse([1, 2, 3].includes(2, -1)); + assertFalse([undefined].includes(NaN)); + assertFalse([{}].includes({})); + assertFalse(staticIncludes({length: 3, 1: 2}, 2, 2)); + assertFalse(staticIncludes({length: 3, get 0(){delete this[1]}, 1: 2}, 2)); + assertFalse(staticIncludes({length: -100, 0: 1}, 1)); -assertThrowsInstanceOf(() => staticIncludes(), TypeError); -assertThrowsInstanceOf(() => staticIncludes(null), TypeError); -assertThrowsInstanceOf(() => staticIncludes({get length(){throw TypeError()}}), TypeError); -assertThrowsInstanceOf(() => staticIncludes({length: 3, get 1() {throw TypeError()}}, 2), TypeError); -assertThrowsInstanceOf(() => staticIncludes({__proto__: {get 1() {throw TypeError()}}, length: 3}, 2), TypeError); -assertThrowsInstanceOf(() => staticIncludes(new Proxy([1], {get(){throw TypeError()}})), TypeError); + assertThrowsInstanceOf(() => staticIncludes(), TypeError); + assertThrowsInstanceOf(() => staticIncludes(null), TypeError); + assertThrowsInstanceOf(() => staticIncludes({get length(){throw TypeError()}}), TypeError); + assertThrowsInstanceOf(() => staticIncludes({length: 3, get 1() {throw TypeError()}}, 2), TypeError); + assertThrowsInstanceOf(() => staticIncludes({__proto__: {get 1() {throw TypeError()}}, length: 3}, 2), TypeError); + assertThrowsInstanceOf(() => staticIncludes(new Proxy([1], {get(){throw TypeError()}})), TypeError); +} function assertTrue(v) { assertEq(v, true); diff --git a/js/xpconnect/tests/chrome/test_xrayToJS.xul b/js/xpconnect/tests/chrome/test_xrayToJS.xul index f933fb8d09c..be176687759 100644 --- a/js/xpconnect/tests/chrome/test_xrayToJS.xul +++ b/js/xpconnect/tests/chrome/test_xrayToJS.xul @@ -169,8 +169,9 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=933681 ["length", "toSource", "toString", "toLocaleString", "join", "reverse", "sort", "push", "pop", "shift", "unshift", "splice", "concat", "slice", "lastIndexOf", "indexOf", "forEach", "map", "reduce", "reduceRight", "filter", "some", "every", "find", - "findIndex", "copyWithin", "fill", "includes", kIteratorSymbol, "entries", "keys", "constructor"]; + "findIndex", "copyWithin", "fill", kIteratorSymbol, "entries", "keys", "constructor"]; if (isNightlyBuild) { + gPrototypeProperties['Array'].push('includes'); let pjsMethods = ['mapPar', 'reducePar', 'scanPar', 'scatterPar', 'filterPar']; gPrototypeProperties['Array'] = gPrototypeProperties['Array'].concat(pjsMethods); }