| 'use strict'; |
| |
| var inspect = require('object-inspect'); |
| var forEach = require('for-each'); |
| var v = require('es-value-fixtures'); |
| |
| module.exports = function (groupBy, t) { |
| t.test('callback function', function (st) { |
| forEach(v.nonFunctions, function (nonFunction) { |
| st['throws']( |
| function () { groupBy([], nonFunction); }, |
| TypeError, |
| inspect(nonFunction) + ' is not a function' |
| ); |
| }); |
| |
| st.end(); |
| }); |
| |
| t.test('grouping', function (st) { |
| st.deepEqual( |
| groupBy([], function () { return 'a'; }), |
| { __proto__: null }, |
| 'an empty array produces an empty object' |
| ); |
| |
| var arr = [0, -0, 1, 2, 3, 4, 5, NaN, Infinity, -Infinity]; |
| var parity = function (x) { |
| if (x !== x) { |
| return void undefined; |
| } |
| if (!isFinite(x)) { |
| return '∞'; |
| } |
| return x % 2 === 0 ? 'even' : 'odd'; |
| }; |
| var grouped = { |
| __proto__: null, |
| even: [0, -0, 2, 4], |
| odd: [1, 3, 5], |
| undefined: [NaN], |
| '∞': [Infinity, -Infinity] |
| }; |
| st.deepEqual( |
| groupBy(arr, parity), |
| grouped, |
| inspect(arr) + ' group by parity groups to ' + inspect(grouped) |
| ); |
| |
| st.deepEqual( |
| groupBy(arr, function (x, i) { |
| st.equal(this, undefined, 'receiver is as expected'); // eslint-disable-line no-invalid-this |
| st.equal(x, arr[i], 'second argument ' + i + ' is ' + inspect(arr[i])); |
| return 42; |
| }), |
| { __proto__: null, 42: arr }, |
| 'thisArg and callback arguments are as expected' |
| ); |
| |
| st.end(); |
| }); |
| }; |