From ffb5bb29cd86e39b78b5b3c560b7c2c9267cfb14 Mon Sep 17 00:00:00 2001 From: Angelos Chalaris Date: Tue, 14 Aug 2018 20:55:06 +0300 Subject: [PATCH] Updated longestItem + tests --- snippets/longestItem.md | 6 ++++-- test/longestItem/longestItem.js | 2 +- test/longestItem/longestItem.test.js | 25 ++++++++++++++++++++++++- 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/snippets/longestItem.md b/snippets/longestItem.md index 9e277e1d8..5cb85504a 100644 --- a/snippets/longestItem.md +++ b/snippets/longestItem.md @@ -1,11 +1,13 @@ ### longestItem Takes any number of iterable objects or objects with a `length` property and returns the longest one. +If multiple objects have the same length, the first one will be returned. +Returns `undefined` if no arguments are provided. -Use `Array.reduce()` to collect the longest element. Returns [] for empty array. +Use `Array.reduce()`, comparing the `length` of objects to find the longest one. ```js -const longestItem = (...vals) => [...vals].reduce((a, x) => (a.length > x.length ? a : x), []); +const longestItem = (val, ...vals) => [val, ...vals].reduce((a, x) => x.length > a.length ? x : a); ``` ```js diff --git a/test/longestItem/longestItem.js b/test/longestItem/longestItem.js index 4d63c3413..5afb29e1d 100644 --- a/test/longestItem/longestItem.js +++ b/test/longestItem/longestItem.js @@ -1,2 +1,2 @@ -const longestItem = (...vals) => [...vals].reduce((a, x) => (a.length > x.length ? a : x), []); +const longestItem = (val, ...vals) => [val, ...vals].reduce((a, x) => x.length > a.length ? x : a); module.exports = longestItem; diff --git a/test/longestItem/longestItem.test.js b/test/longestItem/longestItem.test.js index 7e8c01357..1b75e63aa 100644 --- a/test/longestItem/longestItem.test.js +++ b/test/longestItem/longestItem.test.js @@ -4,6 +4,29 @@ const longestItem = require('./longestItem.js'); test('longestItem is a Function', () => { expect(longestItem).toBeInstanceOf(Function); }); -test('Returns the longest object', () => { +test('Returns the longest object from plain values', () => { expect(longestItem('this', 'is', 'a', 'testcase')).toEqual('testcase'); }); +test('Returns the longest object from a spread array', () => { + expect(longestItem(...['a', 'ab', 'abc'])).toEqual('abc'); +}); +test('Returns the longest object from mixed input', () => { + expect(longestItem(...['a', 'ab', 'abc'],'abcd')).toEqual('abcd'); +}); +test('Returns the longest array', () => { + expect(longestItem([1, 2, 3], [1, 2], [1, 2, 3, 4, 5])).toEqual([1, 2, 3, 4, 5]); +}); +test('Returns the longest object when comparing arrays and strings', () => { + expect(longestItem([1, 2, 3], 'foobar')).toEqual('foobar'); +}); +test('Returns undefined without any input', () => { + expect(longestItem()).toEqual(undefined); +}); +test('Returns first found of all similar', () => { + expect(longestItem('a','b','c')).toEqual('a'); +}); +test('Throws TypeError if all inputs are undefined', () => { + expect(() => { + longestItem(undefined,undefined); + }).toThrow(TypeError); +});