From 49a88e75e69548a494fabf74a1312591bb284bb7 Mon Sep 17 00:00:00 2001 From: John-David Dalton Date: Tue, 22 Jul 2014 09:42:34 -0700 Subject: [PATCH] Fix test fails in Safari 5. --- lodash.js | 13 ++++++++++++- test/test.js | 8 ++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/lodash.js b/lodash.js index e4bbf84c5..67c09cd72 100644 --- a/lodash.js +++ b/lodash.js @@ -660,7 +660,6 @@ bufferSlice = isNative(bufferSlice = ArrayBuffer && new ArrayBuffer(0).slice) && bufferSlice, ceil = Math.ceil, clearTimeout = context.clearTimeout, - Float64Array = isNative(Float64Array = context.Float64Array) && Float64Array, floor = Math.floor, getPrototypeOf = isNative(getPrototypeOf = Object.getPrototypeOf) && getPrototypeOf, hasOwnProperty = objectProto.hasOwnProperty, @@ -672,6 +671,18 @@ Uint8Array = isNative(Uint8Array = context.Uint8Array) && Uint8Array, unshift = arrayProto.unshift; + /** Used to clone array buffers */ + var Float64Array = (function() { + // Safari 5 errors when using an array buffer to initialize a typed array + // where the array buffer's `byteLength` is not a multiple of the typed + // array's `BYTES_PER_ELEMENT` + try { + var func = isNative(func = context.Float64Array) && func, + result = new func(new ArrayBuffer(10), 0, 1) && func; + } catch(e) { } + return result; + }()); + /** Used to set metadata on functions */ var defineProperty = (function() { // IE 8 only accepts DOM elements diff --git a/test/test.js b/test/test.js index 242926f8f..1fcc5d65b 100644 --- a/test/test.js +++ b/test/test.js @@ -657,7 +657,7 @@ if (ArrayBuffer) { try { - var buffer = new ArrayBuffer(12); + var buffer = new ArrayBuffer(10); actual = lodashBizarro.clone(buffer); } catch(e) { actual = null; @@ -670,13 +670,13 @@ } if (ArrayBuffer && Uint8Array) { try { - var array = new Uint8Array(new ArrayBuffer(12)); + var array = new Uint8Array(new ArrayBuffer(10)); actual = lodashBizarro.cloneDeep(array); } catch(e) { actual = null; } deepEqual(actual, array, message('_.cloneDeep', 'Float64Array')); - notStrictEqual(actual.buffer, array.buffer, message('_.cloneDeep', 'Float64Array')); + notStrictEqual(actual && actual.buffer, array.buffer, message('_.cloneDeep', 'Float64Array')); notStrictEqual(actual, array, message('_.cloneDeep', 'Float64Array')); } else { @@ -1553,7 +1553,7 @@ }); test('`_.' + methodName + '` should clone array buffers', 2, function() { - var buffer = ArrayBuffer && new ArrayBuffer(12); + var buffer = ArrayBuffer && new ArrayBuffer(10); if (buffer) { var actual = func(buffer); strictEqual(actual.byteLength, buffer.byteLength);