diff --git a/test/index.html b/test/index.html index ae666d35a..1feee957c 100644 --- a/test/index.html +++ b/test/index.html @@ -42,6 +42,7 @@ } catch(e) { object[key] = value; } + return object; }; }()); @@ -61,9 +62,11 @@ return value; }; } + function createToString(funcName) { return constant(nativeString.replace(reToString, funcName)); } + // Allow bypassing native checks. setProperty(funcProto, 'toString', (function() { function wrapper() { @@ -84,12 +87,25 @@ return !(key == 'valueOf' && this && this.valueOf === 1) && _propertyIsEnumerable.call(this, key); }); + setProperty(window, '_Map', window.Map); + if (_Map) { + setProperty(window, 'Map', (function(Map) { + var count = 0; + return function() { + if (count++) { + return new Map; + } + var result = {}; + setProperty(window, 'Map', Map); + return result; + }; + }(_Map))); + + setProperty(Map, 'toString', createToString('Map')); + } setProperty(Object, '_create', window.create); setProperty(Object, 'create', noop); - setProperty(window, '_Map', window.Map); - setProperty(window, 'Map', noop); - setProperty(window, '_Set', window.Set); setProperty(window, 'Set', noop); @@ -114,21 +130,23 @@ } else { delete Object.create; } - if (window._Map) { + if (_Map) { Map = _Map; } else { setProperty(window, 'Map', undefined); } - if (window._Set) { + if (_Set) { Set = _Set; } else { setProperty(window, 'Set', undefined); } - if (window._WeakMap) { + if (_WeakMap) { WeakMap = _WeakMap; } else { setProperty(window, 'WeakMap', undefined); } + setProperty(objectProto, 'propertyIsEnumerable', objectProto._propertyIsEnumerable); + setProperty(window, '_Map', undefined); setProperty(window, '_Set', undefined); setProperty(window, '_WeakMap', undefined); @@ -139,8 +157,6 @@ setProperty(window, 'global', undefined); setProperty(window, 'module', undefined); - setProperty(objectProto, 'propertyIsEnumerable', objectProto._propertyIsEnumerable); - delete funcProto._method; delete objectProto._propertyIsEnumerable; delete Object._create; diff --git a/test/test.js b/test/test.js index ff8e64e2b..e33e2e88d 100644 --- a/test/test.js +++ b/test/test.js @@ -375,6 +375,7 @@ } catch (e) { object[key] = value; } + return object; } /** @@ -422,8 +423,22 @@ return !(key == 'valueOf' && this && this.valueOf === 1) && _propertyIsEnumerable.call(this, key); }); + if (Map) { + setProperty(root, 'Map', (function() { + var count = 0; + return function() { + if (count++) { + return new Map; + } + var result = {}; + setProperty(root, 'Map', Map); + return result; + }; + }())); + + setProperty(root.Map, 'toString', createToString('Map')); + } setProperty(Object, 'create', _.noop); - setProperty(root, 'Map', _.noop); setProperty(root, 'Set', _.noop); setProperty(root, 'WeakMap', _.noop); @@ -438,9 +453,6 @@ root._ = oldDash; // Restore built-in methods. - setProperty(objectProto, 'propertyIsEnumerable', _propertyIsEnumerable); - setProperty(Object, 'create', create); - if (Map) { setProperty(root, 'Map', Map); } else { @@ -456,6 +468,9 @@ } else { delete root.WeakMap; } + setProperty(objectProto, 'propertyIsEnumerable', _propertyIsEnumerable); + setProperty(Object, 'create', create); + delete root.WinRTError; delete funcProto._method; }()); @@ -661,18 +676,13 @@ function Foo() { this.a = 1; } Foo.prototype.b = 2; - var cyclical = {}, - object = { 'a': 1 }, + var object = { 'a': 1 }, otherObject = { 'b': 2 }, largeArray = _.times(LARGE_ARRAY_SIZE, _.constant(object)); - _.times(LARGE_ARRAY_SIZE + 1, function(index) { - cyclical['v' + index] = [index ? cyclical['v' + (index - 1)] : cyclical]; - }); - if (lodashBizarro) { try { - var actual = _.keysIn(new Foo).sort(); + var actual = lodashBizarro.keysIn(new Foo).sort(); } catch (e) { actual = null; } @@ -692,14 +702,16 @@ assert.deepEqual(actual, [[otherObject], [object], [object]], label); try { - var clone = _.cloneDeep(cyclical); - actual = clone['v' + LARGE_ARRAY_SIZE][0]; + var map = new (Map || Object); + if (Symbol && Symbol.iterator) { + map[Symbol.iterator] = null; + } + actual = lodashBizarro.toArray(map); } catch (e) { actual = null; - clone = {}; } - label = message('_.cloneDeep', 'Object.create` and `Map'); - assert.strictEqual(actual, clone['v' + (LARGE_ARRAY_SIZE - 1)], label); + label = message('_.toArray', 'Map'); + assert.deepEqual(actual, [], label); } else { skipTest(assert, 3);