Comparing version 1.1.0 to 1.1.1
@@ -0,1 +1,19 @@ | ||
v1.1.1 | ||
===== | ||
### API Changes ### | ||
- Object.merge now accepts a third parameter that determines what to do in the case of property conflicts. This parameter can be true, false, or a function. This change means that it now no longer accepts an arbitrary number of arguments. | ||
- Added Object.isNaN | ||
- Added Object.tap | ||
- Consolidated the arguments that are passed to mapping functions on methods such as Array#min/max/groupBy/sortBy. All such functions will now be passed the array element, array index, and array object, in that order, to conform to ES5 Array#map behavior. | ||
- Array#flatten can now accept a level of nesting to flatten to. Default is all levels. | ||
- Array#remove no longer works like a reverse concat (ie. no longer flattens arguments passed to it as if they were passed as separate arguments, so removing arrays within arrays should now work properly. This applies to Array#exclude as well. | ||
- Added Array#zip | ||
### Internal Changes ### | ||
- Refactored way in which type/hash methods are mapped | ||
- Fixed Date bug "2 weeks from Monday" | ||
v1.1 | ||
@@ -2,0 +20,0 @@ ===== |
{ | ||
"name": "sugar", | ||
"version": "1.1.0", | ||
"version": "1.1.1", | ||
"description": "A Javascript library for working with native objects.", | ||
@@ -5,0 +5,0 @@ "keywords": ["functional", "utility", "ender"], |
@@ -8,3 +8,10 @@ Sugar | ||
Edge Build | ||
=============== | ||
Public stable releases will be made available on the site and also exist in `release/`. | ||
Any push made to `master` branch will have its unit tests passing, although maybe not | ||
in all browsing environments (IE, etc) to ensure that it is stable, at least to a certain degree. | ||
I will also include a minified version that will also have its unit tests run against it here: | ||
`release/sugar-edge.min.js` | ||
@@ -15,14 +22,5 @@ | ||
## Pre-requisites | ||
Unit tests can be run through the shell script at `./unit_tests/node.sh`. | ||
node.js and npm | ||
## Running the tests | ||
Run all the tests by running the shell script: | ||
./unit_tests/node.sh | ||
Date Localizations | ||
@@ -54,4 +52,5 @@ ================== | ||
## Contributing Locales | ||
Contributing Locales | ||
==================== | ||
If you do add a custom format for your locale, please consider forking and adding it to the repo! This especially includes the addition of new locales, but also new formats or tweaks to existing locales. Not everything can be added to the main package, but I would like to have as many languages/formats as possible available. When adding a locale contribution, the most important thing is to add unit tests that assert the correct format. These unit tests are found at `unit_tests/environments/sugar/date_LOCALE.js`. Simply add or adjust the formats for the locale (the more tests, the better!) and issue me a pull request -- I will update the code to add these locales/formats. Have a look at other unit tests files for an example of the unit testing format. |
@@ -378,2 +378,5 @@ | ||
}, ''); | ||
[1].map(function(){ | ||
equal(Number(this), 0, 'Array#map | scope can be a number'); | ||
}, 0); | ||
@@ -380,0 +383,0 @@ arr = ['c','c','c']; |
@@ -58,19 +58,21 @@ test('Function', function () { | ||
async(function(){ | ||
skipEnvironments(['prototype'], function() { | ||
async(function(){ | ||
var counter = 0; | ||
var fn = function(){ counter++; } | ||
var counter = 0; | ||
var fn = function(){ counter++; } | ||
fn.delay(50); | ||
fn.delay(10); | ||
fn.delay(50); | ||
fn.delay(10); | ||
setTimeout(function() { | ||
fn.cancel(); | ||
}, 30); | ||
setTimeout(function() { | ||
fn.cancel(); | ||
}, 30); | ||
setTimeout(function() { | ||
equal(counter, 1, 'Function#cancel | should be able to find the correct timers', { prototype: 0 }); | ||
fn.cancel(); | ||
}, 60); | ||
setTimeout(function() { | ||
equal(counter, 1, 'Function#cancel | should be able to find the correct timers', { prototype: 0 }); | ||
fn.cancel(); | ||
}, 60); | ||
}); | ||
}); | ||
@@ -77,0 +79,0 @@ |
@@ -8,128 +8,144 @@ test('Object', function () { | ||
equal(Object.isObject({}), true, 'Object#isObject | {}'); | ||
equal(Object.isObject(new Object({})), true, 'Object#isObject | new Object()'); | ||
equal(Object.isObject([]), false, 'Object#isObject | []'); | ||
equal(Object.isObject(new Array(1,2,3)), false, 'Object#isObject | new Array(1,2,3)'); | ||
equal(Object.isObject(new RegExp()), false, 'Object#isObject | new RegExp()'); | ||
equal(Object.isObject(new Date()), false, 'Object#isObject | new Date()'); | ||
equal(Object.isObject(function() {}), false, 'Object#isObject | function() {}'); | ||
equal(Object.isObject(1), false, 'Object#isObject | 1'); | ||
equal(Object.isObject('wasabi'), false, 'Object#isObject | "wasabi"'); | ||
equal(Object.isObject(null), false, 'Object#isObject | null'); | ||
equal(Object.isObject(undefined), false, 'Object#isObject | undefined'); | ||
equal(Object.isObject(NaN), false, 'Object#isObject | NaN'); | ||
equal(Object.isObject(), false, 'Object#isObject | blank'); | ||
equal(Object.isObject(false), false, 'Object#isObject | false'); | ||
equal(Object.isObject(true), false, 'Object#isObject | true'); | ||
equal(Object.isObject(p), false, 'Object#isObject | {}'); | ||
equal(Object.isObject({}), true, 'Object.isObject | {}'); | ||
equal(Object.isObject(new Object({})), true, 'Object.isObject | new Object()'); | ||
equal(Object.isObject([]), false, 'Object.isObject | []'); | ||
equal(Object.isObject(new Array(1,2,3)), false, 'Object.isObject | new Array(1,2,3)'); | ||
equal(Object.isObject(new RegExp()), false, 'Object.isObject | new RegExp()'); | ||
equal(Object.isObject(new Date()), false, 'Object.isObject | new Date()'); | ||
equal(Object.isObject(function() {}), false, 'Object.isObject | function() {}'); | ||
equal(Object.isObject(1), false, 'Object.isObject | 1'); | ||
equal(Object.isObject('wasabi'), false, 'Object.isObject | "wasabi"'); | ||
equal(Object.isObject(null), false, 'Object.isObject | null'); | ||
equal(Object.isObject(undefined), false, 'Object.isObject | undefined'); | ||
equal(Object.isObject(NaN), false, 'Object.isObject | NaN'); | ||
equal(Object.isObject(), false, 'Object.isObject | blank'); | ||
equal(Object.isObject(false), false, 'Object.isObject | false'); | ||
equal(Object.isObject(true), false, 'Object.isObject | true'); | ||
equal(Object.isObject(p), false, 'Object.isObject | {}'); | ||
equal(Object.isArray({}), false, 'Object#isArray | {}'); | ||
equal(Object.isArray([]), true, 'Object#isArray | []'); | ||
equal(Object.isArray(new Array(1,2,3)), true, 'Object#isArray | new Array(1,2,3)'); | ||
equal(Object.isArray(new RegExp()), false, 'Object#isArray | new RegExp()'); | ||
equal(Object.isArray(new Date()), false, 'Object#isArray | new Date()'); | ||
equal(Object.isArray(function() {}), false, 'Object#isArray | function() {}'); | ||
equal(Object.isArray(1), false, 'Object#isArray | 1'); | ||
equal(Object.isArray('wasabi'), false, 'Object#isArray | "wasabi"'); | ||
equal(Object.isArray(null), false, 'Object#isArray | null'); | ||
equal(Object.isArray(undefined), false, 'Object#isArray | undefined'); | ||
equal(Object.isArray(NaN), false, 'Object#isArray | NaN'); | ||
equal(Object.isArray(), false, 'Object#isArray | blank'); | ||
equal(Object.isArray(false), false, 'Object#isArray | false'); | ||
equal(Object.isArray(true), false, 'Object#isArray | true'); | ||
equal(Object.isArray({}), false, 'Object.isArray | {}'); | ||
equal(Object.isArray([]), true, 'Object.isArray | []'); | ||
equal(Object.isArray(new Array(1,2,3)), true, 'Object.isArray | new Array(1,2,3)'); | ||
equal(Object.isArray(new RegExp()), false, 'Object.isArray | new RegExp()'); | ||
equal(Object.isArray(new Date()), false, 'Object.isArray | new Date()'); | ||
equal(Object.isArray(function() {}), false, 'Object.isArray | function() {}'); | ||
equal(Object.isArray(1), false, 'Object.isArray | 1'); | ||
equal(Object.isArray('wasabi'), false, 'Object.isArray | "wasabi"'); | ||
equal(Object.isArray(null), false, 'Object.isArray | null'); | ||
equal(Object.isArray(undefined), false, 'Object.isArray | undefined'); | ||
equal(Object.isArray(NaN), false, 'Object.isArray | NaN'); | ||
equal(Object.isArray(), false, 'Object.isArray | blank'); | ||
equal(Object.isArray(false), false, 'Object.isArray | false'); | ||
equal(Object.isArray(true), false, 'Object.isArray | true'); | ||
equal(Object.isBoolean({}), false, 'Object#isBoolean | {}'); | ||
equal(Object.isBoolean([]), false, 'Object#isBoolean | []'); | ||
equal(Object.isBoolean(new RegExp()), false, 'Object#isBoolean | new RegExp()'); | ||
equal(Object.isBoolean(new Date()), false, 'Object#isBoolean | new Date()'); | ||
equal(Object.isBoolean(function() {}), false, 'Object#isBoolean | function() {}'); | ||
equal(Object.isBoolean(1), false, 'Object#isBoolean | 1'); | ||
equal(Object.isBoolean('wasabi'), false, 'Object#isBoolean | "wasabi"'); | ||
equal(Object.isBoolean(null), false, 'Object#isBoolean | null'); | ||
equal(Object.isBoolean(undefined), false, 'Object#isBoolean | undefined'); | ||
equal(Object.isBoolean(NaN), false, 'Object#isBoolean | NaN'); | ||
equal(Object.isBoolean(), false, 'Object#isBoolean | blank'); | ||
equal(Object.isBoolean(false), true, 'Object#isBoolean | false'); | ||
equal(Object.isBoolean(true), true, 'Object#isBoolean | true'); | ||
equal(Object.isBoolean({}), false, 'Object.isBoolean | {}'); | ||
equal(Object.isBoolean([]), false, 'Object.isBoolean | []'); | ||
equal(Object.isBoolean(new RegExp()), false, 'Object.isBoolean | new RegExp()'); | ||
equal(Object.isBoolean(new Date()), false, 'Object.isBoolean | new Date()'); | ||
equal(Object.isBoolean(function() {}), false, 'Object.isBoolean | function() {}'); | ||
equal(Object.isBoolean(1), false, 'Object.isBoolean | 1'); | ||
equal(Object.isBoolean('wasabi'), false, 'Object.isBoolean | "wasabi"'); | ||
equal(Object.isBoolean(null), false, 'Object.isBoolean | null'); | ||
equal(Object.isBoolean(undefined), false, 'Object.isBoolean | undefined'); | ||
equal(Object.isBoolean(NaN), false, 'Object.isBoolean | NaN'); | ||
equal(Object.isBoolean(), false, 'Object.isBoolean | blank'); | ||
equal(Object.isBoolean(false), true, 'Object.isBoolean | false'); | ||
equal(Object.isBoolean(true), true, 'Object.isBoolean | true'); | ||
equal(Object.isDate({}), false, 'Object#isDate | {}'); | ||
equal(Object.isDate([]), false, 'Object#isDate | []'); | ||
equal(Object.isDate(new RegExp()), false, 'Object#isDate | new RegExp()'); | ||
equal(Object.isDate(new Date()), true, 'Object#isDate | new Date()'); | ||
equal(Object.isDate(function() {}), false, 'Object#isDate | function() {}'); | ||
equal(Object.isDate(1), false, 'Object#isDate | 1'); | ||
equal(Object.isDate('wasabi'), false, 'Object#isDate | "wasabi"'); | ||
equal(Object.isDate(null), false, 'Object#isDate | null'); | ||
equal(Object.isDate(undefined), false, 'Object#isDate | undefined'); | ||
equal(Object.isDate(NaN), false, 'Object#isDate | NaN'); | ||
equal(Object.isDate(), false, 'Object#isDate | blank'); | ||
equal(Object.isDate(false), false, 'Object#isDate | false'); | ||
equal(Object.isDate(true), false, 'Object#isDate | true'); | ||
equal(Object.isDate({}), false, 'Object.isDate | {}'); | ||
equal(Object.isDate([]), false, 'Object.isDate | []'); | ||
equal(Object.isDate(new RegExp()), false, 'Object.isDate | new RegExp()'); | ||
equal(Object.isDate(new Date()), true, 'Object.isDate | new Date()'); | ||
equal(Object.isDate(function() {}), false, 'Object.isDate | function() {}'); | ||
equal(Object.isDate(1), false, 'Object.isDate | 1'); | ||
equal(Object.isDate('wasabi'), false, 'Object.isDate | "wasabi"'); | ||
equal(Object.isDate(null), false, 'Object.isDate | null'); | ||
equal(Object.isDate(undefined), false, 'Object.isDate | undefined'); | ||
equal(Object.isDate(NaN), false, 'Object.isDate | NaN'); | ||
equal(Object.isDate(), false, 'Object.isDate | blank'); | ||
equal(Object.isDate(false), false, 'Object.isDate | false'); | ||
equal(Object.isDate(true), false, 'Object.isDate | true'); | ||
equal(Object.isFunction({}), false, 'Object#isFunction | {}'); | ||
equal(Object.isFunction([]), false, 'Object#isFunction | []'); | ||
equal(Object.isFunction(new RegExp()), false, 'Object#isFunction | new RegExp()'); | ||
equal(Object.isFunction(new Date()), false, 'Object#isFunction | new Date()'); | ||
equal(Object.isFunction(function() {}), true, 'Object#isFunction | function() {}'); | ||
equal(Object.isFunction(new Function()), true, 'Object#isFunction | new Function()'); | ||
equal(Object.isFunction(1), false, 'Object#isFunction | 1'); | ||
equal(Object.isFunction('wasabi'), false, 'Object#isFunction | "wasabi"'); | ||
equal(Object.isFunction(null), false, 'Object#isFunction | null'); | ||
equal(Object.isFunction(undefined), false, 'Object#isFunction | undefined'); | ||
equal(Object.isFunction(NaN), false, 'Object#isFunction | NaN'); | ||
equal(Object.isFunction(), false, 'Object#isFunction | blank'); | ||
equal(Object.isFunction(false), false, 'Object#isFunction | false'); | ||
equal(Object.isFunction(true), false, 'Object#isFunction | true'); | ||
equal(Object.isFunction({}), false, 'Object.isFunction | {}'); | ||
equal(Object.isFunction([]), false, 'Object.isFunction | []'); | ||
equal(Object.isFunction(new RegExp()), false, 'Object.isFunction | new RegExp()'); | ||
equal(Object.isFunction(new Date()), false, 'Object.isFunction | new Date()'); | ||
equal(Object.isFunction(function() {}), true, 'Object.isFunction | function() {}'); | ||
equal(Object.isFunction(new Function()), true, 'Object.isFunction | new Function()'); | ||
equal(Object.isFunction(1), false, 'Object.isFunction | 1'); | ||
equal(Object.isFunction('wasabi'), false, 'Object.isFunction | "wasabi"'); | ||
equal(Object.isFunction(null), false, 'Object.isFunction | null'); | ||
equal(Object.isFunction(undefined), false, 'Object.isFunction | undefined'); | ||
equal(Object.isFunction(NaN), false, 'Object.isFunction | NaN'); | ||
equal(Object.isFunction(), false, 'Object.isFunction | blank'); | ||
equal(Object.isFunction(false), false, 'Object.isFunction | false'); | ||
equal(Object.isFunction(true), false, 'Object.isFunction | true'); | ||
equal(Object.isNumber({}), false, 'Object#isNumber | {}'); | ||
equal(Object.isNumber([]), false, 'Object#isNumber | []'); | ||
equal(Object.isNumber(new RegExp()), false, 'Object#isNumber | new RegExp()'); | ||
equal(Object.isNumber(new Date()), false, 'Object#isNumber | new Date()'); | ||
equal(Object.isNumber(function() {}), false, 'Object#isNumber | function() {}'); | ||
equal(Object.isNumber(new Function()), false, 'Object#isNumber | new Function()'); | ||
equal(Object.isNumber(1), true, 'Object#isNumber | 1'); | ||
equal(Object.isNumber(0), true, 'Object#isNumber | 0'); | ||
equal(Object.isNumber(-1), true, 'Object#isNumber | -1'); | ||
equal(Object.isNumber(new Number('3')), true, 'Object#isNumber | new Number("3")'); | ||
equal(Object.isNumber('wasabi'), false, 'Object#isNumber | "wasabi"'); | ||
equal(Object.isNumber(null), false, 'Object#isNumber | null'); | ||
equal(Object.isNumber(undefined), false, 'Object#isNumber | undefined'); | ||
equal(Object.isNumber(NaN), true, 'Object#isNumber | NaN'); | ||
equal(Object.isNumber(), false, 'Object#isNumber | blank'); | ||
equal(Object.isNumber(false), false, 'Object#isNumber | false'); | ||
equal(Object.isNumber(true), false, 'Object#isNumber | true'); | ||
equal(Object.isNumber({}), false, 'Object.isNumber | {}'); | ||
equal(Object.isNumber([]), false, 'Object.isNumber | []'); | ||
equal(Object.isNumber(new RegExp()), false, 'Object.isNumber | new RegExp()'); | ||
equal(Object.isNumber(new Date()), false, 'Object.isNumber | new Date()'); | ||
equal(Object.isNumber(function() {}), false, 'Object.isNumber | function() {}'); | ||
equal(Object.isNumber(new Function()), false, 'Object.isNumber | new Function()'); | ||
equal(Object.isNumber(1), true, 'Object.isNumber | 1'); | ||
equal(Object.isNumber(0), true, 'Object.isNumber | 0'); | ||
equal(Object.isNumber(-1), true, 'Object.isNumber | -1'); | ||
equal(Object.isNumber(new Number('3')), true, 'Object.isNumber | new Number("3")'); | ||
equal(Object.isNumber('wasabi'), false, 'Object.isNumber | "wasabi"'); | ||
equal(Object.isNumber(null), false, 'Object.isNumber | null'); | ||
equal(Object.isNumber(undefined), false, 'Object.isNumber | undefined'); | ||
equal(Object.isNumber(NaN), true, 'Object.isNumber | NaN'); | ||
equal(Object.isNumber(), false, 'Object.isNumber | blank'); | ||
equal(Object.isNumber(false), false, 'Object.isNumber | false'); | ||
equal(Object.isNumber(true), false, 'Object.isNumber | true'); | ||
equal(Object.isString({}), false, 'Object#isString | {}'); | ||
equal(Object.isString([]), false, 'Object#isString | []'); | ||
equal(Object.isString(new RegExp()), false, 'Object#isString | new RegExp()'); | ||
equal(Object.isString(new Date()), false, 'Object#isString | new Date()'); | ||
equal(Object.isString(function() {}), false, 'Object#isString | function() {}'); | ||
equal(Object.isString(new Function()), false, 'Object#isString | new Function()'); | ||
equal(Object.isString(1), false, 'Object#isString | 1'); | ||
equal(Object.isString('wasabi'), true, 'Object#isString | "wasabi"'); | ||
equal(Object.isString(new String('wasabi')), true, 'Object#isString | new String("wasabi")'); | ||
equal(Object.isString(null), false, 'Object#isString | null'); | ||
equal(Object.isString(undefined), false, 'Object#isString | undefined'); | ||
equal(Object.isString(NaN), false, 'Object#isString | NaN'); | ||
equal(Object.isString(), false, 'Object#isString | blank'); | ||
equal(Object.isString(false), false, 'Object#isString | false'); | ||
equal(Object.isString(true), false, 'Object#isString | true'); | ||
equal(Object.isString({}), false, 'Object.isString | {}'); | ||
equal(Object.isString([]), false, 'Object.isString | []'); | ||
equal(Object.isString(new RegExp()), false, 'Object.isString | new RegExp()'); | ||
equal(Object.isString(new Date()), false, 'Object.isString | new Date()'); | ||
equal(Object.isString(function() {}), false, 'Object.isString | function() {}'); | ||
equal(Object.isString(new Function()), false, 'Object.isString | new Function()'); | ||
equal(Object.isString(1), false, 'Object.isString | 1'); | ||
equal(Object.isString('wasabi'), true, 'Object.isString | "wasabi"'); | ||
equal(Object.isString(new String('wasabi')), true, 'Object.isString | new String("wasabi")'); | ||
equal(Object.isString(null), false, 'Object.isString | null'); | ||
equal(Object.isString(undefined), false, 'Object.isString | undefined'); | ||
equal(Object.isString(NaN), false, 'Object.isString | NaN'); | ||
equal(Object.isString(), false, 'Object.isString | blank'); | ||
equal(Object.isString(false), false, 'Object.isString | false'); | ||
equal(Object.isString(true), false, 'Object.isString | true'); | ||
equal(Object.isRegExp({}), false, 'Object#isRegExp | {}'); | ||
equal(Object.isRegExp([]), false, 'Object#isRegExp | []'); | ||
equal(Object.isRegExp(new RegExp()), true, 'Object#isRegExp | new RegExp()'); | ||
equal(Object.isRegExp(/afda/), true, 'Object#isRegExp | /afda/'); | ||
equal(Object.isRegExp(new Date()), false, 'Object#isRegExp | new Date()'); | ||
equal(Object.isRegExp(function() {}), false, 'Object#isRegExp | function() {}'); | ||
equal(Object.isRegExp(new Function()), false, 'Object#isRegExp | new Function()'); | ||
equal(Object.isRegExp(1), false, 'Object#isRegExp | 1'); | ||
equal(Object.isRegExp('wasabi'), false, 'Object#isRegExp | "wasabi"'); | ||
equal(Object.isRegExp(null), false, 'Object#isRegExp | null'); | ||
equal(Object.isRegExp(undefined), false, 'Object#isRegExp | undefined'); | ||
equal(Object.isRegExp(NaN), false, 'Object#isRegExp | NaN'); | ||
equal(Object.isRegExp(), false, 'Object#isRegExp | blank'); | ||
equal(Object.isRegExp(false), false, 'Object#isRegExp | false'); | ||
equal(Object.isRegExp(true), false, 'Object#isRegExp | true'); | ||
equal(Object.isRegExp({}), false, 'Object.isRegExp | {}'); | ||
equal(Object.isRegExp([]), false, 'Object.isRegExp | []'); | ||
equal(Object.isRegExp(new RegExp()), true, 'Object.isRegExp | new RegExp()'); | ||
equal(Object.isRegExp(/afda/), true, 'Object.isRegExp | /afda/'); | ||
equal(Object.isRegExp(new Date()), false, 'Object.isRegExp | new Date()'); | ||
equal(Object.isRegExp(function() {}), false, 'Object.isRegExp | function() {}'); | ||
equal(Object.isRegExp(new Function()), false, 'Object.isRegExp | new Function()'); | ||
equal(Object.isRegExp(1), false, 'Object.isRegExp | 1'); | ||
equal(Object.isRegExp('wasabi'), false, 'Object.isRegExp | "wasabi"'); | ||
equal(Object.isRegExp(null), false, 'Object.isRegExp | null'); | ||
equal(Object.isRegExp(undefined), false, 'Object.isRegExp | undefined'); | ||
equal(Object.isRegExp(NaN), false, 'Object.isRegExp | NaN'); | ||
equal(Object.isRegExp(), false, 'Object.isRegExp | blank'); | ||
equal(Object.isRegExp(false), false, 'Object.isRegExp | false'); | ||
equal(Object.isRegExp(true), false, 'Object.isRegExp | true'); | ||
equal(Object.isNaN({}), false, 'Object.isNaN | {}'); | ||
equal(Object.isNaN([]), false, 'Object.isNaN | []'); | ||
equal(Object.isNaN(new RegExp()), false, 'Object.isNaN | new RegExp()'); | ||
equal(Object.isNaN(/afda/), false, 'Object.isNaN | /afda/'); | ||
equal(Object.isNaN(new Date()), false, 'Object.isNaN | new Date()'); | ||
equal(Object.isNaN(function() {}), false, 'Object.isNaN | function() {}'); | ||
equal(Object.isNaN(new Function()), false, 'Object.isNaN | new Function()'); | ||
equal(Object.isNaN(1), false, 'Object.isNaN | 1'); | ||
equal(Object.isNaN('wasabi'), false, 'Object.isNaN | "wasabi"'); | ||
equal(Object.isNaN(null), false, 'Object.isNaN | null'); | ||
equal(Object.isNaN(undefined), false, 'Object.isNaN | undefined'); | ||
equal(Object.isNaN(NaN), true, 'Object.isNaN | NaN'); | ||
equal(Object.isNaN(), false, 'Object.isNaN | blank'); | ||
equal(Object.isNaN(false), false, 'Object.isNaN | false'); | ||
equal(Object.isNaN(true), false, 'Object.isNaN | true'); | ||
equal(({}).keys, undefined, 'Object | native objects are not wrapped by default'); | ||
@@ -227,6 +243,5 @@ equal(Object.extended(), Object.extended({}), 'Object.extended | null argument same as empty object'); | ||
equal(Object.merge({ foo: 'bar' }, { broken: 'wear' }), { foo: 'bar', broken: 'wear' }, 'Object.merge | basic'); | ||
equal(Object.merge({ foo: 'bar' }, { broken: 'wear' }, { jumpy: 'jump' }, { fire: 'breath'}), { foo: 'bar', broken: 'wear', jumpy: 'jump', fire: 'breath' }, 'Object.merge | merge 3'); | ||
equal(Object.merge({ foo: 'bar' }, 'aha'), { foo: 'bar' }, 'Object.merge | will not merge string', { mootools: { foo: 'bar', aha: undefined } }); | ||
equal(Object.merge({ foo: 'bar' }, 'aha'), { foo: 'bar' }, 'Object.merge | will not merge a string', { mootools: { foo: 'bar', aha: undefined } }); | ||
equal(Object.merge({ foo: 'bar' }, null), { foo: 'bar' }, 'Object.merge | merge null'); | ||
equal(Object.merge({}, {}, {}), {}, 'Object.merge | merge multi empty'); | ||
equal(Object.merge({}, {}), {}, 'Object.merge | merge multi empty'); | ||
@@ -237,16 +252,99 @@ | ||
equal(Object.merge({ foo: 'bar' }, 'wear', 8, null), { foo: 'bar' }, 'Object.merge | merge multi invalid', { mootools: { foo: 'bar', wear: 8 } }); | ||
equal(Object.merge({ foo:'bar' }, 'wear', 8, null), { foo:'bar' }, 'Object.merge | merge multi invalid', { mootools: { foo: 'bar', wear: 7 } }); | ||
equal(Object.merge([1,2,3,4], [4,5,6]), [4,5,6,4], 'Object.merge | arrays should also be mergeable'); | ||
equal(Object.merge({ foo: { one: 'two' }}, { foo: { two: 'three' }}), { foo: { one: 'two', two: 'three' }}, 'Object.merge | accepts deep merges'); | ||
equal(Object.merge('foo', 'bar'), 'foo', 'Object.merge | two strings'); | ||
equal(Object.merge({ a:1 }, { a:2 }), { a:2 }, 'Object.merge | incoming wins'); | ||
equal(Object.merge({ a:1 }, { a:2 }, true), { a:2 }, 'Object.merge | incoming wins | params true'); | ||
equal(Object.merge({ a:1 }, { a:2 }, false), { a:1 }, 'Object.merge | target wins'); | ||
equal(Object.merge({ a:undefined }, { a:2 }), { a:2 }, 'Object.merge | existing but undefined properties are overwritten'); | ||
equal(Object.merge({ a:null }, { a:2 }), { a:2 }, 'Object.merge | null properties are not overwritten'); | ||
equal(Object.merge({ a:undefined }, { a:2 }, false), { a:2 }, 'Object.merge | false |existing but undefined properties are overwritten'); | ||
equal(Object.merge({ a:null }, { a:2 }, false), { a:null }, 'Object.merge | false | null properties are not overwritten'); | ||
equal(Object.merge([{ foo:'bar' }], [{ moo:'car' }]), [{ foo:'bar',moo:'car' }], 'Object.merge | can merge arrays as well'); | ||
var fn = function(key, a, b) { | ||
equal(key, 'a', 'Object.merge | resolve function | first argument is the key'); | ||
equal(a, 1, 'Object.merge | resolve function | second argument is the target val'); | ||
equal(b, 2, 'Object.merge | resolve function | third argument is the source val'); | ||
equal(this, { a:2 }, 'Object.merge | resolve function | context is the source object'); | ||
return a + b; | ||
}; | ||
equal(Object.merge({ a:1 }, { a:2 }, fn), { a:3 }, 'Object.merge | function resolves'); | ||
var fn1 = function() { return 'joe' }; | ||
var fn2 = function() { return 'moe' }; | ||
var date1 = new Date(2001, 1, 6); | ||
var date2 = new Date(2005, 1, 6); | ||
var inner1 = { foo: 'bar', hee: 'haw' } | ||
var inner2 = { foo: 'car', mee: 'maw' } | ||
var obj1 = { | ||
str: 'oolala', | ||
num: 18, | ||
fn: fn1, | ||
date: date1, | ||
prop1: 'next', | ||
inner: inner1, | ||
arr: [1,2,3,4] | ||
} | ||
var obj2 = { | ||
str: 'foofy', | ||
num: 67, | ||
fn: fn2, | ||
date: date2, | ||
prop2: 'beebop', | ||
inner: inner2, | ||
arr: [4,5,6] | ||
} | ||
var fn = function(key, a, b) { | ||
if(key == 'str') { | ||
return 'conflict!'; | ||
} else if(key == 'num') { | ||
return a + b; | ||
} else { | ||
return b; | ||
} | ||
} | ||
var expected = { | ||
str: 'conflict!', | ||
num: 85, | ||
fn: fn2, | ||
date: date2, | ||
prop1: 'next', | ||
prop2: 'beebop', | ||
inner: { | ||
foo: 'car', | ||
hee: 'haw', | ||
mee: 'maw' | ||
}, | ||
arr: [4,5,6,4] | ||
} | ||
equal(Object.merge(obj1, obj2, fn), expected, 'Object.merge | complex objects with resolve function'); | ||
equal(obj1.fn(), 'moe', 'Object.merge | fn conflict resolved'); | ||
equal(obj1.date.getTime(), new Date(2005, 1, 6).getTime(), 'Object.merge | date conflict resolved'); | ||
equal(Object.extended({ foo: 'bar' }).merge({ broken: 'wear' }), { foo: 'bar', broken: 'wear' }, 'Object#merge | basic'); | ||
equal(Object.extended({ foo: 'bar' }).merge({ broken: 'wear' }, { jumpy: 'jump' }, { fire: 'breath'}), { foo: 'bar', broken: 'wear', jumpy: 'jump', fire: 'breath' }, 'Object#merge | merge 3'); | ||
equal(Object.extended({ foo: 'bar' }).merge('aha'), { foo: 'bar' }, 'Object#merge | merge string', { mootools: { foo: 'bar', aha: undefined } }); | ||
equal(Object.extended({ foo: 'bar' }).merge('aha'), { foo: 'bar' }, 'Object#merge | will not merge a string', { mootools: { foo: 'bar', aha: undefined } }); | ||
equal(Object.extended({ foo: 'bar' }).merge(null), { foo: 'bar' }, 'Object#merge | merge null'); | ||
equal(Object.extended({}).merge({}, {}, {}), {}, 'Object#merge | merge multi empty'); | ||
equal(Object.extended({ foo: 'bar' }).merge('wear', 8, null), { foo: 'bar' }, 'Object#merge | merge multi invalid', { mootools: { foo: 'bar', wear: 8 } }); | ||
equal(Object.extended({ foo: 'bar' }).merge('wear', 8, null), { foo:'bar' }, 'Object#merge | merge multi invalid', { mootools: { foo: 'bar', wear: 8 } }); | ||
equal(Object.extended({ a:1 }).merge({ a:2 }), { a:2 }, 'Object.merge | incoming wins'); | ||
equal(Object.extended({ a:1 }).merge({ a:2 }, true), { a:2 }, 'Object.merge | incoming wins | params true'); | ||
equal(Object.extended({ a:1 }).merge({ a:2 }, false), { a:1 }, 'Object.merge | target wins'); | ||
equal(Object.extended({ a:1 }).merge({ a:2 }, function(key, a, b){ return a + b; }), { a:3 }, 'Object.merge | function resolves'); | ||
skipEnvironments(['prototype','mootools'], function() { | ||
@@ -395,3 +493,3 @@ equal(Object.clone('hardy'), 'hardy', 'Object.clone | clone on a string'); | ||
equal(count, 3, 'Object | Object.prototype should have correctly called all functions', { mootools: 2 }); | ||
equal(count, 3, 'Object | Object.prototype should have correctly called all functions', { prototype: 2, mootools: 2 }); | ||
@@ -415,2 +513,3 @@ equal(({}).isEmpty(), true, 'Object#empty | Object.prototype'); | ||
equal(([1,2,3]).isRegExp(), false, 'Object#isRegExp | Object.prototype'); | ||
equal(([1,2,3]).isNaN(), false, 'Object#isNaN | Object.prototype'); | ||
equal((true).isArray(), false, 'Object#isArray | Object.prototype'); | ||
@@ -423,2 +522,3 @@ equal((true).isBoolean(), true, 'Object#isBoolean | Object.prototype'); | ||
equal((true).isRegExp(), false, 'Object#isRegExp | Object.prototype'); | ||
equal((true).isNaN(), false, 'Object#isNaN | Object.prototype'); | ||
equal((new Date()).isArray(), false, 'Object#isArray | Object.prototype'); | ||
@@ -431,2 +531,3 @@ equal((new Date()).isBoolean(), false, 'Object#isBoolean | Object.prototype'); | ||
equal((new Date()).isRegExp(), false, 'Object#isRegExp | Object.prototype'); | ||
equal((new Date()).isNaN(), false, 'Object#isNaN | Object.prototype'); | ||
equal((function() {}).isArray(), false, 'Object#isArray | Object.prototype'); | ||
@@ -439,2 +540,3 @@ equal((function() {}).isBoolean(), false, 'Object#isBoolean | Object.prototype'); | ||
equal((function() {}).isRegExp(), false, 'Object#isRegExp | Object.prototype'); | ||
equal((function() {}).isNaN(), false, 'Object#isNaN | Object.prototype'); | ||
equal((3).isArray(), false, 'Object#isArray | Object.prototype'); | ||
@@ -447,2 +549,3 @@ equal((3).isBoolean(), false, 'Object#isBoolean | Object.prototype'); | ||
equal((3).isRegExp(), false, 'Object#isRegExp | Object.prototype'); | ||
equal((3).isNaN(), false, 'Object#isNaN | Object.prototype'); | ||
equal(('wasabi').isArray(), false, 'Object#isArray | Object.prototype'); | ||
@@ -455,2 +558,3 @@ equal(('wasabi').isBoolean(), false, 'Object#isBoolean | Object.prototype'); | ||
equal(('wasabi').isRegExp(), false, 'Object#isRegExp | Object.prototype'); | ||
equal(('wasabi').isNaN(), false, 'Object#isNaN | Object.prototype'); | ||
equal((/wasabi/).isArray(), false, 'Object#isArray | Object.prototype'); | ||
@@ -463,3 +567,46 @@ equal((/wasabi/).isBoolean(), false, 'Object#isBoolean | Object.prototype'); | ||
equal((/wasabi/).isRegExp(), true, 'Object#isRegExp | Object.prototype'); | ||
equal((/wasabi/).isNaN(), false, 'Object#isNaN | Object.prototype'); | ||
equal((NaN).isArray(), false, 'Object#isArray | Object.prototype'); | ||
equal((NaN).isBoolean(), false, 'Object#isBoolean | Object.prototype'); | ||
equal((NaN).isDate(), false, 'Object#isDate | Object.prototype'); | ||
equal((NaN).isFunction(), false, 'Object#isFunction | Object.prototype'); | ||
equal((NaN).isNumber(), true, 'Object#isNumber | Object.prototype'); | ||
equal((NaN).isString(), false, 'Object#isString | Object.prototype'); | ||
equal((NaN).isRegExp(), false, 'Object#isRegExp | Object.prototype'); | ||
equal((NaN).isNaN(), true, 'Object#isNaN | Object.prototype'); | ||
// Object#tap | ||
var fn = function(first) { | ||
equal(this, [1,2,3,4,5], 'Object#tap | context is the object'); | ||
equal(first, [1,2,3,4,5], 'Object#tap | first argument is also the object'); | ||
this.pop(); | ||
} | ||
var map = function(n) { | ||
return n * 2; | ||
} | ||
var expected = [2,4,6,8]; | ||
equal([1,2,3,4,5].tap(fn).map(map), expected, 'Object#tap | pop the array'); | ||
equal([1,2,3,4,5].tap('pop').map(map), expected, 'Object#tap | string shortcut | pop the array'); | ||
equal([1,2].tap(function() { this.push(3, 4); }).map(map), expected, 'Object#tap | push to the array'); | ||
equal([1,2].tap('push', 3, 4).map(map), [2,4], 'Object#tap | string shortcut | passing arguments is not supported'); | ||
equal([1,2,3].tap(function(){ if(this.none(4)) this.add(4); }).map(map), expected, 'Object#tap | Sugar adding elements'); | ||
equal([1,2,3,4].tap(function(){ if(this.last() === 5) this.pop(); }).map(map), expected, 'Object#tap | checking last'); | ||
var obj = { foo: 'bar' }; | ||
equal(obj.tap(), obj, 'Object#tap | return value is strictly equal'); | ||
equal('foo'.fromQueryString, undefined, 'Object.fromQueryString should not be mapped'); | ||
equal('foo'.extended, undefined, 'Object.extended should not be mapped'); | ||
equal('foo'.equal, undefined, 'Object.equal should not be mapped (should be "equals" instead)'); | ||
restoreObjectPrototypeMethods(); | ||
@@ -548,3 +695,32 @@ | ||
// Object.tap | ||
var fn = function(first) { | ||
equal(this, [1,2,3,4,5], 'Object.tap | context is the object'); | ||
equal(first, [1,2,3,4,5], 'Object.tap | first argument is also the object'); | ||
this.pop(); | ||
} | ||
var map = function(n) { | ||
return n * 2; | ||
} | ||
var expected = [2,4,6,8]; | ||
equal(Object.tap([1,2,3,4,5], fn).map(map), expected, 'Object.tap | pop the array'); | ||
equal(Object.tap([1,2,3,4,5], 'pop').map(map), expected, 'Object.tap | string shortcut | pop the array'); | ||
equal(Object.tap([1,2], function() { this.push(3, 4); }).map(map), expected, 'Object.tap | push to the array'); | ||
equal(Object.tap([1,2], 'push', 3, 4).map(map), [2,4], 'Object.tap | string shortcut | not supported'); | ||
equal(Object.tap([1,2,3], function(){ if(this.none(4)) this.add(4); }).map(map), expected, 'Object.tap | Sugar adding elements'); | ||
equal(Object.tap([1,2,3,4], function(){ if(this.last() === 5) this.pop(); }).map(map), expected, 'Object.tap | checking last'); | ||
var obj = { foo: 'bar' }; | ||
equal(Object.tap(obj), obj, 'Object.tap | return value is strictly equal'); | ||
}); | ||
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
946562
16630
0
54