diff --git a/lib/utils/text-utils.js b/lib/utils/text-utils.js --- a/lib/utils/text-utils.js +++ b/lib/utils/text-utils.js @@ -24,8 +24,10 @@ function trimText(text: string, maxLength: number): string { if (text.length <= maxLength) { return text; + } else if (maxLength <= 3) { + return text.substring(0, maxLength); } - return text.substr(0, maxLength - 3) + '...'; + return `${text.substring(0, maxLength - 3)}...`; } function pluralizeAndTrim( diff --git a/lib/utils/text-utils.test.js b/lib/utils/text-utils.test.js --- a/lib/utils/text-utils.test.js +++ b/lib/utils/text-utils.test.js @@ -1,6 +1,6 @@ // @flow -import { pluralize } from './text-utils.js'; +import { pluralize, trimText } from './text-utils.js'; describe('pluralize(nouns, maxNumberOfNouns)', () => { it('should return an empty string when no words are given', () => { @@ -49,3 +49,68 @@ ); }); }); + +describe('trimText(text, maxLength)', () => { + it('should return the original text when the text is shorter than maxLength', () => { + expect(trimText('a', 2)).toBe('a'); + expect(trimText('a', 3)).toBe('a'); + expect(trimText('a', 4)).toBe('a'); + + expect(trimText('ab', 3)).toBe('ab'); + expect(trimText('ab', 4)).toBe('ab'); + + expect(trimText('abc', 4)).toBe('abc'); + + expect(trimText('the quick brown fox jumps', 400)).toBe( + 'the quick brown fox jumps', + ); + }); + + it('should return the original text when the text length is equal to maxLength', () => { + expect(trimText('a', 1)).toBe('a'); + expect(trimText('ab', 2)).toBe('ab'); + expect(trimText('abc', 3)).toBe('abc'); + + expect(trimText('the quick brown fox jumps', 25)).toBe( + 'the quick brown fox jumps', + ); + }); + + it('should return the first maxLength characters of the text when (maxLength <= 3)', () => { + expect(trimText('the quick brown fox jumps', 0)).toBe(''); + expect(trimText('the quick brown fox jumps', 1)).toBe('t'); + expect(trimText('the quick brown fox jumps', 2)).toBe('th'); + expect(trimText('the quick brown fox jumps', 3)).toBe('the'); + }); + + it('should return ellipsized text when (text.length > maxLength) && (maxLength > 3)', () => { + expect(trimText('the quick brown fox jumps', 4)).toBe('t...'); + expect(trimText('the quick brown fox jumps', 5)).toBe('th...'); + expect(trimText('the quick brown fox jumps', 6)).toBe('the...'); + expect(trimText('the quick brown fox jumps', 7)).toBe('the ...'); + expect(trimText('the quick brown fox jumps', 8)).toBe('the q...'); + expect(trimText('the quick brown fox jumps', 9)).toBe('the qu...'); + }); + + it("shouldn't return a string longer than maxLength", () => { + expect(trimText('', 0).length).toBeLessThanOrEqual(0); + expect(trimText('a', 0).length).toBeLessThanOrEqual(0); + expect(trimText('ab', 0).length).toBeLessThanOrEqual(0); + expect(trimText('abc', 0).length).toBeLessThanOrEqual(0); + + expect(trimText('', 1).length).toBeLessThanOrEqual(1); + expect(trimText('a', 1).length).toBeLessThanOrEqual(1); + expect(trimText('ab', 1).length).toBeLessThanOrEqual(1); + expect(trimText('abc', 1).length).toBeLessThanOrEqual(1); + + expect(trimText('', 2).length).toBeLessThanOrEqual(2); + expect(trimText('a', 2).length).toBeLessThanOrEqual(2); + expect(trimText('ab', 2).length).toBeLessThanOrEqual(2); + expect(trimText('abc', 2).length).toBeLessThanOrEqual(2); + + expect(trimText('', 3).length).toBeLessThanOrEqual(3); + expect(trimText('a', 3).length).toBeLessThanOrEqual(3); + expect(trimText('ab', 3).length).toBeLessThanOrEqual(3); + expect(trimText('abc', 3).length).toBeLessThanOrEqual(3); + }); +});