Add bizarro test for Object.getOwnPropertySymbols.

This commit is contained in:
jdalton
2015-04-12 16:00:21 -07:00
parent 20183bbd57
commit 9d90af409b
2 changed files with 40 additions and 8 deletions

View File

@@ -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;
}

View File

@@ -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);
}
});
}());