Increase test coverage.

This commit is contained in:
John-David Dalton
2014-04-19 17:51:08 -07:00
parent aef5c61415
commit 082e95b700
2 changed files with 40 additions and 15 deletions

View File

@@ -38,15 +38,15 @@
function addBizarroMethods() {
// allow bypassing native checks
setProperty(Function.prototype, 'toString', (function() {
function fnToString() {
setProperty(Function.prototype, 'toString', _fnToString);
var result = this === Set ? this.toString() : _fnToString.call(this);
function wrapper() {
setProperty(Function.prototype, 'toString', fnToString);
var result = this === Set ? this.toString() : fnToString.call(this);
setProperty(Function.prototype, 'toString', wrapper);
return result;
}
var _fnToString = Function.prototype.toString;
setProperty(Function.prototype, '_toString', _fnToString);
return fnToString;
var fnToString = Function.prototype.toString;
setProperty(Function.prototype, '_toString', fnToString);
return wrapper;
}()));
// add extensions
@@ -71,6 +71,23 @@
setProperty(Object, '_keys', Object.keys);
setProperty(Object, 'keys', function() {});
setProperty(Object.prototype, 'hasOwnProperty', (function() {
function wrapper(key) {
if (key == '1' && this && typeof this == 'object' && this.length === 2 &&
hasOwnProperty.call(this, 'callee') &&
!propertyIsEnumerable.call(this, 'callee') &&
this[0] === 0 && this[1] === 0) {
throw new Error;
}
return hasOwnProperty.call(this, key);
}
var hasOwnProperty = Object.prototype.hasOwnProperty,
propertyIsEnumerable = Object.prototype.propertyIsEnumerable;
setProperty(Object.prototype, '_hasOwnProperty', hasOwnProperty);
return wrapper;
}()));
setProperty(String.prototype, '_contains', String.prototype.contains);
setProperty(String.prototype, 'contains', String.prototype._contains ? function() {} : Boolean);
@@ -118,6 +135,7 @@
}
setProperty(window, 'WinRTError', undefined);
setProperty(Function.prototype, 'toString', Function.prototype._toString);
setProperty(Object.prototype, 'hasOwnProperty', Object.prototype._hasOwnProperty);
document.createDocumentFragment = document._createDocumentFragment;
setProperty(document, '_createDocumentFragment', undefined);
@@ -130,6 +148,7 @@
delete Object._defineProperty;
delete Object._getPrototypeOf;
delete Object._keys;
delete Object.prototype._hasOwnProperty;
delete String.prototype._contains;
}

View File

@@ -297,15 +297,12 @@
}
// allow bypassing native checks
var _fnToString = Function.prototype.toString;
setProperty(Function.prototype, 'toString', (function() {
function fnToString() {
setProperty(Function.prototype, 'toString', _fnToString);
var result = this === Set ? this.toString() : _fnToString.call(this);
setProperty(Function.prototype, 'toString', fnToString);
return result;
}
return fnToString;
}()));
setProperty(Function.prototype, 'toString', function wrapper() {
setProperty(Function.prototype, 'toString', _fnToString);
var result = this === Set ? this.toString() : _fnToString.call(this);
setProperty(Function.prototype, 'toString', wrapper);
return result;
});
// fake DOM
setProperty(global, 'window', {});
@@ -339,6 +336,14 @@
var _keys = Object.keys;
setProperty(Object, 'keys', function() {});
var _hasOwnProperty = Object.prototype.hasOwnProperty;
setProperty(Object.prototype, 'hasOwnProperty', function(key) {
if (key == '1' && _.isArguments(this) && _.isEqual(_.values(this), [0, 0])) {
throw new Error;
}
return _hasOwnProperty.call(this, key);
});
var _contains = String.prototype.contains;
setProperty(String.prototype, 'contains', _contains ? function() {} : Boolean);
@@ -355,6 +360,7 @@
setProperty(Object, 'defineProperty', _defineProperty);
setProperty(Object, 'getPrototypeOf', _getPrototypeOf);
setProperty(Object, 'keys', _keys);
setProperty(Object.prototype, 'hasOwnProperty', _hasOwnProperty);
setProperty(Function.prototype, 'toString', _fnToString);
if (_contains) {