mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-13 12:27:49 +00:00
Add coverage for WeakMap usage.
This commit is contained in:
@@ -21,7 +21,7 @@
|
|||||||
/*--------------------------------------------------------------------------*/
|
/*--------------------------------------------------------------------------*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a Set object to optimize linear searches of large arrays.
|
* Creates a `Set` object.
|
||||||
*/
|
*/
|
||||||
function Set() {
|
function Set() {
|
||||||
this.__cache__ = {};
|
this.__cache__ = {};
|
||||||
@@ -81,7 +81,7 @@
|
|||||||
* Adds `value` to the set.
|
* Adds `value` to the set.
|
||||||
*
|
*
|
||||||
* @memberOf Set
|
* @memberOf Set
|
||||||
* @param {*} value The value to add to the set.
|
* @param {*} value The value to add.
|
||||||
*/
|
*/
|
||||||
function add(value) {
|
function add(value) {
|
||||||
var cache = this.__cache__,
|
var cache = this.__cache__,
|
||||||
|
|||||||
76
test/asset/weakmap.js
Normal file
76
test/asset/weakmap.js
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
;(function() {
|
||||||
|
|
||||||
|
/** Used to determine if values are of the language type Object */
|
||||||
|
var objectTypes = {
|
||||||
|
'function': true,
|
||||||
|
'object': true
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Used as the `WeakMap#toString` return value */
|
||||||
|
var nativeString = String(Object.prototype.toString).replace(/toString/g, 'WeakMap');
|
||||||
|
|
||||||
|
/** Used as a reference to the global object */
|
||||||
|
var root = (objectTypes[typeof window] && window) || this;
|
||||||
|
|
||||||
|
/** Detect free variable `global` from Node.js or Browserified code and use it as `root` */
|
||||||
|
var freeGlobal = objectTypes[typeof global] && global;
|
||||||
|
if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal || freeGlobal.self === freeGlobal)) {
|
||||||
|
root = freeGlobal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a `WeakMap` object.
|
||||||
|
*/
|
||||||
|
function WeakMap() {
|
||||||
|
// no-op
|
||||||
|
}
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the value associated with the given key.
|
||||||
|
*
|
||||||
|
* @memberOf WeakMap
|
||||||
|
* @param {Object} key The key object.
|
||||||
|
* @returns {*} Returns the associated value, else `undefined`.
|
||||||
|
*/
|
||||||
|
function get(key) {
|
||||||
|
return key.__weakmap__;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for the given key.
|
||||||
|
*
|
||||||
|
* @memberOf WeakMap
|
||||||
|
* @param {Object} key The key object.
|
||||||
|
* @param {*} value The value to set.
|
||||||
|
*/
|
||||||
|
function set(key, value) {
|
||||||
|
key.__weakmap__ = value;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Produces the `toString` result of `WeakMap`.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
* @memberOf WeakMap
|
||||||
|
* @returns {string} Returns the string result.
|
||||||
|
*/
|
||||||
|
function toString() {
|
||||||
|
return nativeString;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
WeakMap.toString = toString;
|
||||||
|
WeakMap.prototype.get = get;
|
||||||
|
WeakMap.prototype.set = set;
|
||||||
|
|
||||||
|
// expose `WeakMap`
|
||||||
|
if (!root.WeakMap) {
|
||||||
|
root.WeakMap = WeakMap;
|
||||||
|
}
|
||||||
|
}.call(this));
|
||||||
@@ -26,6 +26,7 @@
|
|||||||
<script src="../vendor/qunit-extras/qunit-extras.js"></script>
|
<script src="../vendor/qunit-extras/qunit-extras.js"></script>
|
||||||
<script src="../vendor/platform.js/platform.js"></script>
|
<script src="../vendor/platform.js/platform.js"></script>
|
||||||
<script src="./asset/set.js"></script>
|
<script src="./asset/set.js"></script>
|
||||||
|
<script src="./asset/weakmap.js"></script>
|
||||||
<script src="./asset/test-ui.js"></script>
|
<script src="./asset/test-ui.js"></script>
|
||||||
<div id="qunit"></div>
|
<div id="qunit"></div>
|
||||||
<div id="exports"></div>
|
<div id="exports"></div>
|
||||||
@@ -154,6 +155,9 @@
|
|||||||
return Float64Array;
|
return Float64Array;
|
||||||
}());
|
}());
|
||||||
}
|
}
|
||||||
|
setProperty(window, '_Set', window.Set);
|
||||||
|
setProperty(window, 'Set', noop);
|
||||||
|
|
||||||
setProperty(window, '_WeakMap', window.WeakMap);
|
setProperty(window, '_WeakMap', window.WeakMap);
|
||||||
setProperty(window, 'WeakMap', noop);
|
setProperty(window, 'WeakMap', noop);
|
||||||
|
|
||||||
@@ -238,6 +242,11 @@
|
|||||||
}
|
}
|
||||||
setProperty(window, '_ArrayBuffer', undefined);
|
setProperty(window, '_ArrayBuffer', undefined);
|
||||||
|
|
||||||
|
if (window._Set) {
|
||||||
|
Set = _Set;
|
||||||
|
}
|
||||||
|
setProperty(window, '_Set', undefined);
|
||||||
|
|
||||||
if (window._WeakMap) {
|
if (window._WeakMap) {
|
||||||
WeakMap = _WeakMap;
|
WeakMap = _WeakMap;
|
||||||
}
|
}
|
||||||
@@ -274,6 +283,7 @@
|
|||||||
// store Lo-Dash to test for bad extensions/shims
|
// store Lo-Dash to test for bad extensions/shims
|
||||||
if (!ui.isModularize) {
|
if (!ui.isModularize) {
|
||||||
var lodashBizarro = window._;
|
var lodashBizarro = window._;
|
||||||
|
lodashBizarro.support.funcNames = !lodashBizarro.support.funcNames;
|
||||||
window._ = undefined;
|
window._ = undefined;
|
||||||
removeBizarroMethods();
|
removeBizarroMethods();
|
||||||
}
|
}
|
||||||
|
|||||||
20
test/test.js
20
test/test.js
@@ -38,6 +38,7 @@
|
|||||||
noop = function() {},
|
noop = function() {},
|
||||||
params = root.arguments,
|
params = root.arguments,
|
||||||
push = arrayProto.push,
|
push = arrayProto.push,
|
||||||
|
Set = root.Set,
|
||||||
slice = arrayProto.slice,
|
slice = arrayProto.slice,
|
||||||
system = root.system,
|
system = root.system,
|
||||||
toString = objectProto.toString,
|
toString = objectProto.toString,
|
||||||
@@ -339,8 +340,9 @@
|
|||||||
function createToString(funcName) {
|
function createToString(funcName) {
|
||||||
return _.constant(nativeString.replace(reToString, funcName));
|
return _.constant(nativeString.replace(reToString, funcName));
|
||||||
}
|
}
|
||||||
// load ES6 Set shim
|
// load ES6 Set and WeakMap shims
|
||||||
require('./asset/set');
|
require('./asset/set');
|
||||||
|
require('./asset/weakmap');
|
||||||
|
|
||||||
// expose `baseEach` for better code coverage
|
// expose `baseEach` for better code coverage
|
||||||
if (isModularize && !isNpm) {
|
if (isModularize && !isNpm) {
|
||||||
@@ -443,6 +445,12 @@
|
|||||||
};
|
};
|
||||||
}()));
|
}()));
|
||||||
|
|
||||||
|
if (Set) {
|
||||||
|
setProperty(root, 'Set', _.noop);
|
||||||
|
}
|
||||||
|
if (WeakMap) {
|
||||||
|
setProperty(root, 'WeakMap', _.noop);
|
||||||
|
}
|
||||||
// fake `WinRTError`
|
// fake `WinRTError`
|
||||||
setProperty(root, 'WinRTError', Error);
|
setProperty(root, 'WinRTError', Error);
|
||||||
|
|
||||||
@@ -485,6 +493,16 @@
|
|||||||
} else {
|
} else {
|
||||||
delete root.ArrayBuffer;
|
delete root.ArrayBuffer;
|
||||||
}
|
}
|
||||||
|
if (Set) {
|
||||||
|
setProperty(root, 'Set', Set);
|
||||||
|
} else {
|
||||||
|
delete root.Set;
|
||||||
|
}
|
||||||
|
if (WeakMap) {
|
||||||
|
setProperty(root, 'WeakMap', WeakMap);
|
||||||
|
} else {
|
||||||
|
delete root.WeakMap;
|
||||||
|
}
|
||||||
delete root.WinRTError;
|
delete root.WinRTError;
|
||||||
delete root.window;
|
delete root.window;
|
||||||
delete funcProto._method;
|
delete funcProto._method;
|
||||||
|
|||||||
Reference in New Issue
Block a user