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="qunit"></div>
<div id="exports"></div> <div id="exports"></div>
<script> <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 = Object.keys;
Object.keys = function() { return []; }; Object.keys = function() { return []; };
@@ -28,7 +37,16 @@
// store Lo-Dash to test for bad shim detection // store Lo-Dash to test for bad shim detection
var lodashBadShim = window._; 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; Object.keys = Object._keys;
delete Object._keys; delete Object._keys;

View File

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