Files
lodash/test/overSome.js
Benjamin Tan d5ef31929a Add initial test files from lodash v4. (#4172)
* Install test dependencies.

* Add initial test files.

These files were created using a simplistic AST manipulator using `recast` to
preserve formatting. There's bound to be a huge chunk of errors, but this serves
as a good start. QUnit was replaced with Mocha, with ES2015 imports running via
`esm`.

As far as possible, QUnit-specific syntax has been replaced with Mocha's
`describe` and `it`, while the native Node.js `assert` module is used for
assertions. Files in the `test` directory ending in `.test.js` will be treated
as test files.

* Add initial passing files to test run.
2019-02-12 09:11:32 -08:00

99 lines
3.1 KiB
JavaScript

import assert from 'assert';
import { stubFalse, stubOne, stubString, stubNull, stubA, stubZero, stubTrue, slice } from './utils.js';
import overSome from '../overSome.js';
describe('overSome', function() {
it('should create a function that returns `true` if any predicates return truthy', function() {
var over = overSome(stubFalse, stubOne, stubString);
assert.strictEqual(over(), true);
over = overSome(stubNull, stubA, stubZero);
assert.strictEqual(over(), true);
});
it('should return `true` as soon as `predicate` returns truthy', function() {
var count = 0,
countFalse = function() { count++; return false; },
countTrue = function() { count++; return true; },
over = overSome(countFalse, countTrue, countFalse);
assert.strictEqual(over(), true);
assert.strictEqual(count, 2);
});
it('should return `false` if all predicates return falsey', function() {
var over = overSome(stubFalse, stubFalse, stubFalse);
assert.strictEqual(over(), false);
over = overSome(stubNull, stubZero, stubString);
assert.strictEqual(over(), false);
});
it('should use `_.identity` when a predicate is nullish', function() {
var over = overSome(undefined, null);
assert.strictEqual(over(true), true);
assert.strictEqual(over(false), false);
});
it('should work with `_.property` shorthands', function() {
var over = overSome('b', 'a');
assert.strictEqual(over({ 'a': 1, 'b': 0 }), true);
assert.strictEqual(over({ 'a': 0, 'b': 0 }), false);
});
it('should work with `_.matches` shorthands', function() {
var over = overSome({ 'b': 2 }, { 'a': 1 });
assert.strictEqual(over({ 'a': 0, 'b': 2 }), true);
assert.strictEqual(over({ 'a': 0, 'b': 0 }), false);
});
it('should work with `_.matchesProperty` shorthands', function() {
var over = overSome([['b', 2], ['a', 1]]);
assert.strictEqual(over({ 'a': 0, 'b': 2 }), true);
assert.strictEqual(over({ 'a': 0, 'b': 0 }), false);
});
it('should differentiate between `_.property` and `_.matchesProperty` shorthands', function() {
var over = overSome(['a', 1]);
assert.strictEqual(over({ 'a': 0, '1': 0 }), false);
assert.strictEqual(over({ 'a': 1, '1': 0 }), true);
assert.strictEqual(over({ 'a': 0, '1': 1 }), true);
over = overSome([['a', 1]]);
assert.strictEqual(over({ 'a': 1 }), true);
assert.strictEqual(over({ 'a': 2 }), false);
});
it('should flatten `predicates`', function() {
var over = overSome(stubFalse, [stubTrue]);
assert.strictEqual(over(), true);
});
it('should provide arguments to predicates', function() {
var args;
var over = overSome(function() {
args = slice.call(arguments);
});
over('a', 'b', 'c');
assert.deepStrictEqual(args, ['a', 'b', 'c']);
});
it('should use `this` binding of function for `predicates`', function() {
var over = overSome(function() { return this.b; }, function() { return this.a; }),
object = { 'over': over, 'a': 1, 'b': 2 };
assert.strictEqual(object.over(), true);
object.a = object.b = 0;
assert.strictEqual(object.over(), false);
});
});