From 9d90af409bb4ee5f98684e4d6a170fb675790a8a Mon Sep 17 00:00:00 2001 From: jdalton Date: Sun, 12 Apr 2015 16:00:21 -0700 Subject: [PATCH] Add bizarro test for `Object.getOwnPropertySymbols`. --- test/index.html | 27 +++++++++++++++++++++------ test/test.js | 21 +++++++++++++++++++-- 2 files changed, 40 insertions(+), 8 deletions(-) diff --git a/test/index.html b/test/index.html index b191ddfa6..a525c7df7 100644 --- a/test/index.html +++ b/test/index.html @@ -56,6 +56,7 @@ fnToString = funcProto.toString, nativeString = fnToString.call(objectProto.toString), noop = function() {}, + parseInt = window.parseInt, propertyIsEnumerable = objectProto.propertyIsEnumerable, reToString = /toString/g, whitespace = ' \t\x0B\f\xA0\ufeff\n\r\u2028\u2029\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000'; @@ -89,6 +90,15 @@ setProperty(Date, '_now', Date.now); setProperty(Date, 'now', noop); + setProperty(Object, '_getOwnPropertySymbols', Object.getOwnPropertySymbols); + setProperty(Object, 'getOwnPropertySymbols', (function() { + function getOwnPropertySymbols() { + return []; + } + setProperty(getOwnPropertySymbols, 'toString', createToString('getOwnPropertySymbols')); + return getOwnPropertySymbols; + }())); + setProperty(Object, '_getPrototypeOf', Object.getPrototypeOf); setProperty(Object, 'getPrototypeOf', noop); @@ -150,9 +160,9 @@ setProperty(window, 'WeakMap', noop); setProperty(window, '_parseInt', parseInt); - setProperty(window, 'parseInt', (function(_parseInt) { + setProperty(window, 'parseInt', (function() { var checkStr = whitespace + '08', - isFaked = _parseInt(checkStr) != 8, + isFaked = parseInt(checkStr) != 8, reHexPrefix = /^0[xX]/, reTrim = RegExp('^[' + whitespace + ']+|[' + whitespace + ']+$'); @@ -162,9 +172,9 @@ return 0; } value = String(value == null ? '' : value).replace(reTrim, ''); - return _parseInt(value, +radix || (reHexPrefix.test(value) ? 16 : 10)); + return parseInt(value, +radix || (reHexPrefix.test(value) ? 16 : 10)); }; - }(_parseInt))); + }())); // fake lack of DOM support setProperty(document, '_createDocumentFragment', document.createDocumentFragment); @@ -194,6 +204,11 @@ } else { delete Date.now; } + if (Object._getOwnPropertySymbols) { + setProperty(Object, 'getOwnPropertySymbols', Object._getOwnPropertySymbols); + } else { + delete Object.getOwnPropertySymbols; + } if (Object._getPrototypeOf) { setProperty(Object, 'getPrototypeOf', Object._getPrototypeOf); } else { @@ -240,10 +255,10 @@ delete Array._isArray; delete Date._now; - delete funcProto._method; - delete Object._create; + delete Object._getOwnPropertySymbols; delete Object._getPrototypeOf; delete Object._keys; + delete funcProto._method; delete objectProto._propertyIsEnumerable; } diff --git a/test/test.js b/test/test.js index aeeca77ae..3c868d606 100644 --- a/test/test.js +++ b/test/test.js @@ -460,6 +460,15 @@ var _now = Date.now; setProperty(Date, 'now', _.noop); + var _getOwnPropertySymbols = Object.getOwnPropertySymbols; + setProperty(Object, 'getOwnPropertySymbols', (function() { + function getOwnPropertySymbols() { + return []; + } + setProperty(getOwnPropertySymbols, 'toString', createToString('getOwnPropertySymbols')); + return getOwnPropertySymbols; + }())); + var _getPrototypeOf = Object.getPrototypeOf; setProperty(Object, 'getPrototypeOf', _.noop); @@ -552,6 +561,7 @@ // Restore built-in methods. setProperty(Array, 'isArray', _isArray); setProperty(Date, 'now', _now); + setProperty(Object, 'getOwnPropertySymbols', _getOwnPropertySymbols); setProperty(Object, 'getPrototypeOf', _getPrototypeOf); setProperty(Object, 'keys', _keys); @@ -698,7 +708,7 @@ } }); - test('should avoid overwritten native methods', 12, function() { + test('should avoid overwritten native methods', 13, function() { function Foo() {} function message(lodashMethod, nativeMethod) { @@ -724,6 +734,13 @@ } ok(typeof actual == 'number', message('_.now', 'Date.now')); + try { + actual = lodashBizarro.merge({}, object); + } catch(e) { + actual = null; + } + deepEqual(actual, object, message('_.merge', 'Object.getOwnPropertySymbols')); + try { actual = [lodashBizarro.isPlainObject({}), lodashBizarro.isPlainObject([])]; } catch(e) { @@ -792,7 +809,7 @@ } } else { - skipTest(12); + skipTest(13); } }); }());