mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-08 10:17:48 +00:00
Add bizarro test for Object.getOwnPropertySymbols.
This commit is contained in:
@@ -56,6 +56,7 @@
|
|||||||
fnToString = funcProto.toString,
|
fnToString = funcProto.toString,
|
||||||
nativeString = fnToString.call(objectProto.toString),
|
nativeString = fnToString.call(objectProto.toString),
|
||||||
noop = function() {},
|
noop = function() {},
|
||||||
|
parseInt = window.parseInt,
|
||||||
propertyIsEnumerable = objectProto.propertyIsEnumerable,
|
propertyIsEnumerable = objectProto.propertyIsEnumerable,
|
||||||
reToString = /toString/g,
|
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';
|
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', Date.now);
|
||||||
setProperty(Date, 'now', noop);
|
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', Object.getPrototypeOf);
|
||||||
setProperty(Object, 'getPrototypeOf', noop);
|
setProperty(Object, 'getPrototypeOf', noop);
|
||||||
|
|
||||||
@@ -150,9 +160,9 @@
|
|||||||
setProperty(window, 'WeakMap', noop);
|
setProperty(window, 'WeakMap', noop);
|
||||||
|
|
||||||
setProperty(window, '_parseInt', parseInt);
|
setProperty(window, '_parseInt', parseInt);
|
||||||
setProperty(window, 'parseInt', (function(_parseInt) {
|
setProperty(window, 'parseInt', (function() {
|
||||||
var checkStr = whitespace + '08',
|
var checkStr = whitespace + '08',
|
||||||
isFaked = _parseInt(checkStr) != 8,
|
isFaked = parseInt(checkStr) != 8,
|
||||||
reHexPrefix = /^0[xX]/,
|
reHexPrefix = /^0[xX]/,
|
||||||
reTrim = RegExp('^[' + whitespace + ']+|[' + whitespace + ']+$');
|
reTrim = RegExp('^[' + whitespace + ']+|[' + whitespace + ']+$');
|
||||||
|
|
||||||
@@ -162,9 +172,9 @@
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
value = String(value == null ? '' : value).replace(reTrim, '');
|
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
|
// fake lack of DOM support
|
||||||
setProperty(document, '_createDocumentFragment', document.createDocumentFragment);
|
setProperty(document, '_createDocumentFragment', document.createDocumentFragment);
|
||||||
@@ -194,6 +204,11 @@
|
|||||||
} else {
|
} else {
|
||||||
delete Date.now;
|
delete Date.now;
|
||||||
}
|
}
|
||||||
|
if (Object._getOwnPropertySymbols) {
|
||||||
|
setProperty(Object, 'getOwnPropertySymbols', Object._getOwnPropertySymbols);
|
||||||
|
} else {
|
||||||
|
delete Object.getOwnPropertySymbols;
|
||||||
|
}
|
||||||
if (Object._getPrototypeOf) {
|
if (Object._getPrototypeOf) {
|
||||||
setProperty(Object, 'getPrototypeOf', Object._getPrototypeOf);
|
setProperty(Object, 'getPrototypeOf', Object._getPrototypeOf);
|
||||||
} else {
|
} else {
|
||||||
@@ -240,10 +255,10 @@
|
|||||||
|
|
||||||
delete Array._isArray;
|
delete Array._isArray;
|
||||||
delete Date._now;
|
delete Date._now;
|
||||||
delete funcProto._method;
|
delete Object._getOwnPropertySymbols;
|
||||||
delete Object._create;
|
|
||||||
delete Object._getPrototypeOf;
|
delete Object._getPrototypeOf;
|
||||||
delete Object._keys;
|
delete Object._keys;
|
||||||
|
delete funcProto._method;
|
||||||
delete objectProto._propertyIsEnumerable;
|
delete objectProto._propertyIsEnumerable;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
21
test/test.js
21
test/test.js
@@ -460,6 +460,15 @@
|
|||||||
var _now = Date.now;
|
var _now = Date.now;
|
||||||
setProperty(Date, 'now', _.noop);
|
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;
|
var _getPrototypeOf = Object.getPrototypeOf;
|
||||||
setProperty(Object, 'getPrototypeOf', _.noop);
|
setProperty(Object, 'getPrototypeOf', _.noop);
|
||||||
|
|
||||||
@@ -552,6 +561,7 @@
|
|||||||
// Restore built-in methods.
|
// Restore built-in methods.
|
||||||
setProperty(Array, 'isArray', _isArray);
|
setProperty(Array, 'isArray', _isArray);
|
||||||
setProperty(Date, 'now', _now);
|
setProperty(Date, 'now', _now);
|
||||||
|
setProperty(Object, 'getOwnPropertySymbols', _getOwnPropertySymbols);
|
||||||
setProperty(Object, 'getPrototypeOf', _getPrototypeOf);
|
setProperty(Object, 'getPrototypeOf', _getPrototypeOf);
|
||||||
setProperty(Object, 'keys', _keys);
|
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 Foo() {}
|
||||||
|
|
||||||
function message(lodashMethod, nativeMethod) {
|
function message(lodashMethod, nativeMethod) {
|
||||||
@@ -724,6 +734,13 @@
|
|||||||
}
|
}
|
||||||
ok(typeof actual == 'number', message('_.now', 'Date.now'));
|
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 {
|
try {
|
||||||
actual = [lodashBizarro.isPlainObject({}), lodashBizarro.isPlainObject([])];
|
actual = [lodashBizarro.isPlainObject({}), lodashBizarro.isPlainObject([])];
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
@@ -792,7 +809,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
skipTest(12);
|
skipTest(13);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}());
|
}());
|
||||||
|
|||||||
Reference in New Issue
Block a user