Add bizarro Map tests.

This commit is contained in:
John-David Dalton
2015-10-06 21:58:06 -07:00
parent f880e39838
commit 9fd48bab69
2 changed files with 52 additions and 24 deletions

View File

@@ -42,6 +42,7 @@
} catch(e) { } catch(e) {
object[key] = value; object[key] = value;
} }
return object;
}; };
}()); }());
@@ -61,9 +62,11 @@
return value; return value;
}; };
} }
function createToString(funcName) { function createToString(funcName) {
return constant(nativeString.replace(reToString, funcName)); return constant(nativeString.replace(reToString, funcName));
} }
// Allow bypassing native checks. // Allow bypassing native checks.
setProperty(funcProto, 'toString', (function() { setProperty(funcProto, 'toString', (function() {
function wrapper() { function wrapper() {
@@ -84,12 +87,25 @@
return !(key == 'valueOf' && this && this.valueOf === 1) && _propertyIsEnumerable.call(this, key); 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', window.create);
setProperty(Object, 'create', noop); setProperty(Object, 'create', noop);
setProperty(window, '_Map', window.Map);
setProperty(window, 'Map', noop);
setProperty(window, '_Set', window.Set); setProperty(window, '_Set', window.Set);
setProperty(window, 'Set', noop); setProperty(window, 'Set', noop);
@@ -114,21 +130,23 @@
} else { } else {
delete Object.create; delete Object.create;
} }
if (window._Map) { if (_Map) {
Map = _Map; Map = _Map;
} else { } else {
setProperty(window, 'Map', undefined); setProperty(window, 'Map', undefined);
} }
if (window._Set) { if (_Set) {
Set = _Set; Set = _Set;
} else { } else {
setProperty(window, 'Set', undefined); setProperty(window, 'Set', undefined);
} }
if (window._WeakMap) { if (_WeakMap) {
WeakMap = _WeakMap; WeakMap = _WeakMap;
} else { } else {
setProperty(window, 'WeakMap', undefined); setProperty(window, 'WeakMap', undefined);
} }
setProperty(objectProto, 'propertyIsEnumerable', objectProto._propertyIsEnumerable);
setProperty(window, '_Map', undefined); setProperty(window, '_Map', undefined);
setProperty(window, '_Set', undefined); setProperty(window, '_Set', undefined);
setProperty(window, '_WeakMap', undefined); setProperty(window, '_WeakMap', undefined);
@@ -139,8 +157,6 @@
setProperty(window, 'global', undefined); setProperty(window, 'global', undefined);
setProperty(window, 'module', undefined); setProperty(window, 'module', undefined);
setProperty(objectProto, 'propertyIsEnumerable', objectProto._propertyIsEnumerable);
delete funcProto._method; delete funcProto._method;
delete objectProto._propertyIsEnumerable; delete objectProto._propertyIsEnumerable;
delete Object._create; delete Object._create;

View File

@@ -375,6 +375,7 @@
} catch (e) { } catch (e) {
object[key] = value; object[key] = value;
} }
return object;
} }
/** /**
@@ -422,8 +423,22 @@
return !(key == 'valueOf' && this && this.valueOf === 1) && _propertyIsEnumerable.call(this, key); 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(Object, 'create', _.noop);
setProperty(root, 'Map', _.noop);
setProperty(root, 'Set', _.noop); setProperty(root, 'Set', _.noop);
setProperty(root, 'WeakMap', _.noop); setProperty(root, 'WeakMap', _.noop);
@@ -438,9 +453,6 @@
root._ = oldDash; root._ = oldDash;
// Restore built-in methods. // Restore built-in methods.
setProperty(objectProto, 'propertyIsEnumerable', _propertyIsEnumerable);
setProperty(Object, 'create', create);
if (Map) { if (Map) {
setProperty(root, 'Map', Map); setProperty(root, 'Map', Map);
} else { } else {
@@ -456,6 +468,9 @@
} else { } else {
delete root.WeakMap; delete root.WeakMap;
} }
setProperty(objectProto, 'propertyIsEnumerable', _propertyIsEnumerable);
setProperty(Object, 'create', create);
delete root.WinRTError; delete root.WinRTError;
delete funcProto._method; delete funcProto._method;
}()); }());
@@ -661,18 +676,13 @@
function Foo() { this.a = 1; } function Foo() { this.a = 1; }
Foo.prototype.b = 2; Foo.prototype.b = 2;
var cyclical = {}, var object = { 'a': 1 },
object = { 'a': 1 },
otherObject = { 'b': 2 }, otherObject = { 'b': 2 },
largeArray = _.times(LARGE_ARRAY_SIZE, _.constant(object)); 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) { if (lodashBizarro) {
try { try {
var actual = _.keysIn(new Foo).sort(); var actual = lodashBizarro.keysIn(new Foo).sort();
} catch (e) { } catch (e) {
actual = null; actual = null;
} }
@@ -692,14 +702,16 @@
assert.deepEqual(actual, [[otherObject], [object], [object]], label); assert.deepEqual(actual, [[otherObject], [object], [object]], label);
try { try {
var clone = _.cloneDeep(cyclical); var map = new (Map || Object);
actual = clone['v' + LARGE_ARRAY_SIZE][0]; if (Symbol && Symbol.iterator) {
map[Symbol.iterator] = null;
}
actual = lodashBizarro.toArray(map);
} catch (e) { } catch (e) {
actual = null; actual = null;
clone = {};
} }
label = message('_.cloneDeep', 'Object.create` and `Map'); label = message('_.toArray', 'Map');
assert.strictEqual(actual, clone['v' + (LARGE_ARRAY_SIZE - 1)], label); assert.deepEqual(actual, [], label);
} }
else { else {
skipTest(assert, 3); skipTest(assert, 3);