UNPKG

holyfills

Version:

No more "Holy Sxxt!!" when writting ES5/ES6

149 lines (117 loc) 6.39 kB
"use strict"; describe("prototype.splice", function () { var array_splice, b = ["b"], a = [1, "a", b], test; before(function () { array_splice = require("../../lib/array/array_splice"); }); beforeEach(function () { test = a.slice(0); }); it("should be a polyfill", function () { array_splice.toString().should.not.containEql("[native code]"); }); it("has the right length", function () { array_splice.should.have.lengthOf(2); }); /* This test is disabled, because ES6 normalizes actual * browser behavior, contradicting ES5. */ xit("treats undefined deleteCount as 0", function () { array_splice.call(test, 0).should.containDeep(array_splice.call(test, 0, 0)).and.should.have.lengthOf(0); }); it("basic implementation test 1", function () { array_splice.call(test, 0, 0).should.be.empty; }); it("basic implementation test 2", function () { array_splice.call(test, 0, 2); test.should.eql([b]); }); it("should return right result 1", function () { var array = []; array_splice.call(array, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20); array_splice.call(array, 1, 0, "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12", "F13", "F14", "F15", "F16", "F17", "F18", "F19", "F20", "F21", "F22", "F23", "F24", "F25", "F26"); array_splice.call(array, 5, 0, "XXX"); array.should.eql([1, "F1", "F2", "F3", "F4", "XXX", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12", "F13", "F14", "F15", "F16", "F17", "F18", "F19", "F20", "F21", "F22", "F23", "F24", "F25", "F26", 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]); }); it("should return right result 2", function () { var array = makeArray(6); array_splice.call(array, array.length - 1, 1, ""); array_splice.call(array, 0, 1, 1, 2, 3, 4); array_splice.call(array, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45); array_splice.call(array, 4, 0, "99999999999999"); array.should.eql([1, 2, 3, 4, "99999999999999", 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 1, 2, 3, 4, " 1", " 2", " 3", " 4", ""]); }); it("should return right result 3", function () { var array = [1, 2, 3]; array_splice.call(array, 0, array.length); array_splice.call(array, 0, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10); array_splice.call(array, 1, 1, "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12", "F13", "F14", "F15", "F16", "F17", "F18", "F19", "F20", "F21", "F22", "F23", "F24", "F25", "F26"); array_splice.call(array, 5, 1, "YYY", "XXX"); array_splice.call(array, 0, 1); array_splice.call(array, 0, 2); array.pop(); array.push.apply(array, makeArray(10, "-")); array_splice.call(array, array.length - 2, 10); array_splice.call(array); array_splice.call(array, 1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9); array_splice.call(array, 1, 1, "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12", "F13", "F14", "F15", "F16", "F17", "F18", "F19", "F20", "F21", "F22", "F23", "F24", "F25", "F26", 1, 23, 4, 5, 6, 7, 8); array_splice.call(array, 30, 10); array_splice.call(array, 30, 1); array_splice.call(array, 30, 0); array_splice.call(array, 2, 5, 1, 2, 3, "P", "LLL", "CCC", "YYY", "XXX"); array.push(1, 2, 3, 4, 5, 6); array_splice.call(array, 1, 6, 1, 2, 3, 4, 5, 6, 7, 8, 9, 4, 5, 6, 7, 8, 9); array_splice.call(array, 3, 7); array.unshift(7, 8, 9, 10, 11); array.pop(); array_splice.call(array, 5, 2); array.pop(); array.unshift.apply(array, makeArray(8, "~")); array.pop(); array_splice.call(array, 3, 1, "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12", "F13", "F14", "F15", "F16", "F17", "F18", "F19", "F20", "F21","F22", "F23", "F24", "F25", "F26", 1, 23, 4, 5, 6, 7, 8); array_splice.call(array, 4, 5, "P", "LLL", "CCC", "YYY", "XXX"); array.should.eql(["~0", "~ 1", "~ 2", "F1", "P", "LLL", "CCC", "YYY", "XXX", "F7", "F8", "F9", "F10", "F11", "F12", "F13", "F14", "F15", "F16", "F17", "F18", "F19", "F20", "F21", "F22", "F23", "F24", "F25", "F26", 1, 23, 4, 5, 6, 7, 8, "~ 4", "~ 5", "~ 6", "~ 7", 7, 8, 9, 10, 11, 2, 4, 5, 6, 7, 8, 9, "CCC", "YYY", "XXX", "F7", "F8", "F9", "F10", "F11", "F12", "F13", "F14", "F15", "F16", "F17", "F18", "F19", "F20", "F21", "F22", "F23", "F24", "F25", "F26", 1, 23, 4, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, "YYY", "XXX", "F6", "F7", "F8", "F9", "F10", "F11", "F12", "F13", "F14", "F15", "F16", "F17", "F18", "F19", "F20", "F21", "F22", "F23", "F24", "F25", "F26", 3, 4, 5, 6, 7, 8, 9, "-0", "- 1", "- 2", "- 3", "- 4", "- 5", "- 6", "- 7", 1, 2, 3]); }); it("should do nothing if method called with no arguments", function () { // Safari 5.0 bug where .splice() returns undefined array_splice.call(test).should.eql([]); test.should.eql(a); }); it("should set first argument to 0 if first argument is set but undefined", function () { var test2 = test.slice(0); array_splice.call(test, void 0, 2).should.eql(array_splice.call(test2, 0, 2)); test.should.eql(test2); }); it("should work with objects - adding 1", function () { var obj = {}; array_splice.call(obj, 0, 0, 1, 2, 3); obj.should.have.lengthOf(3); }); it("should work with objects - adding 2", function () { var obj = { 0: 1, length: 1 }; array_splice.call(obj, 1, 0, 2, 3); obj.should.have.lengthOf(3); }); it("should work with objects - removing", function () { var obj = { 0: 1, 1: 2, 2: 3, length: 3 }; array_splice.call(obj, 0, 3); obj.should.have.lengthOf(0); }); it("should work with objects - replacing", function () { var obj = { 0: 99, length: 1 }; array_splice.call(obj, 0, 1, 1, 2, 3); obj.should.have.property('0', 1); obj.should.have.lengthOf(3); }); function makeArray (l, prefix) { prefix = prefix || ""; var a = []; while (l--) { a.unshift(prefix + Array(l + 1).join(" ") + l); } return a; } });