mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-13 12:27:49 +00:00
Add bizarro Map tests.
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
44
test/test.js
44
test/test.js
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user