Add more bad shim tests.

This commit is contained in:
John-David Dalton
2013-09-16 23:57:01 -07:00
parent 3daff8ab8a
commit 7726b5c56b
2 changed files with 47 additions and 9 deletions

View File

@@ -17,7 +17,16 @@
<div id="qunit"></div>
<div id="exports"></div>
<script>
// set a bad shim
// set bad shims
Array._isArray = Array.isArray;
Array.isArray = function() { return false; };
Function.prototype._bind = Function.prototype.bind;
Function.prototype.bind = function() { return function() {}; };
Object._defineProperty = Object.defineProperty;
Object.defineProperty = function() {};
Object._keys = Object.keys;
Object.keys = function() { return []; };
@@ -28,7 +37,16 @@
// store Lo-Dash to test for bad shim detection
var lodashBadShim = window._;
// restore nativeKeys
// restore native methods
Array.isArray = Array._isArray;
delete Array._isArray;
Function.prototype.bind = Function.prototype._bind;
delete Function.prototype._bind;
Object.defineProperty = Object._defineProperty;
delete Object._defineProperty;
Object.keys = Object._keys;
delete Object._keys;

View File

@@ -255,10 +255,30 @@
});
test('avoids overwritten native methods', function() {
function message(methodName) {
return '`_.' + methodName + '` should avoid overwritten native methods';
}
var object = { 'a': true };
if (document) {
notDeepEqual(lodashBadShim.keys({ 'a': 1 }), []);
} else {
skipTest();
try {
var actual = lodashBadShim.bind(function() { return this.a; }, object)();
} catch(e) { }
ok(actual, message('bind'));
try {
actual = lodashBadShim.isArray([]);
} catch(e) { }
ok(actual, message('isArray'));
try {
actual = lodashBadShim.keys(object);
} catch(e) { }
deepEqual(actual, ['a'], message('keys'));
}
else {
skipTest(3);
}
});
}());
@@ -604,7 +624,7 @@
});
test('`_.' + methodName + '` should handle cloning if `callback` returns `undefined`', function() {
var actual = _.clone({ 'a': { 'b': 'c' } }, function() { });
var actual = _.clone({ 'a': { 'b': 'c' } }, function() {});
deepEqual(actual, { 'a': { 'b': 'c' } });
});
});
@@ -2077,7 +2097,7 @@
});
test('should handle comparisons if `callback` returns `undefined`', function() {
var actual = _.isEqual('a', 'a', function() { });
var actual = _.isEqual('a', 'a', function() {});
strictEqual(actual, true);
});
@@ -2596,7 +2616,7 @@
});
test('should handle merging if `callback` returns `undefined`', function() {
var actual = _.merge({ 'a': { 'b': [1, 1] } }, { 'a': { 'b': [0] } }, function() { });
var actual = _.merge({ 'a': { 'b': [1, 1] } }, { 'a': { 'b': [0] } }, function() {});
deepEqual(actual, { 'a': { 'b': [0, 1] } });
});
@@ -4437,7 +4457,7 @@
_.forEach(falsey, function(value, index) {
try {
actual.push(index ? func(value) : func());
} catch(e) { console.log(e)}
} catch(e) { }
});
deepEqual(actual, expected);