import descriptionTokenizer from '../../src/parser/tokenizers/description'; import { seedSpec, seedTokens } from '../../src/util'; const sourceSingle = [ { number: 1, source: '...', tokens: seedTokens({ description: ' one two ' }), }, ]; const sourceMultiple = [ { number: 1, source: '...', tokens: seedTokens({ description: 'one two ' }), }, { number: 2, source: '...', tokens: seedTokens({ description: '' }), }, { number: 3, source: '...', tokens: seedTokens({ description: ' three four' }), }, { number: 4, source: '...', tokens: seedTokens({ description: '' }), }, ]; test('compact - single line', () => { const tokenize = descriptionTokenizer('compact'); const input = seedSpec({ source: sourceSingle }); const output = seedSpec({ source: sourceSingle, description: 'one two' }); expect(tokenize(input)).toEqual(output); }); test('compact - multiple lines', () => { const tokenize = descriptionTokenizer('compact'); const input = seedSpec({ source: sourceMultiple }); const output = seedSpec({ source: sourceMultiple, description: 'one two three four', }); expect(tokenize(input)).toEqual(output); }); test('preserve - multiple lines', () => { const tokenize = descriptionTokenizer('preserve'); const input = seedSpec({ source: sourceMultiple }); const output = seedSpec({ source: sourceMultiple, description: 'one two \n\n three four\n', }); expect(tokenize(input)).toEqual(output); }); test('preserve - one-liner', () => { const tokenize = descriptionTokenizer('preserve'); const input = seedSpec({ source: [ { number: 1, source: '...', tokens: seedTokens({ delimiter: '/**', postDelimiter: ' ', description: 'description', end: '*/', }), }, ], }); const output = seedSpec({ description: 'description', source: [ { number: 1, source: '...', tokens: seedTokens({ delimiter: '/**', postDelimiter: ' ', description: 'description', end: '*/', }), }, ], }); expect(tokenize(input)).toEqual(output); }); test('preserve - leading empty lines', () => { const source = [ { number: 1, source: '...', tokens: seedTokens({ delimiter: '/**' }), }, { number: 2, source: '...', tokens: seedTokens(), }, { number: 3, source: '...', tokens: seedTokens({ description: ' line 1 ' }), }, { number: 4, source: '...', tokens: seedTokens({ description: ' line 2 ' }), }, { number: 5, source: '...', tokens: seedTokens({ description: '' }), }, ]; const tokenize = descriptionTokenizer('preserve'); const input = seedSpec({ source }); const output = seedSpec({ source, description: '\n line 1 \n line 2 \n', }); expect(tokenize(input)).toEqual(output); }); test('preserve - leading type lines', () => { const source = [ { number: 1, source: '...', tokens: seedTokens({ delimiter: '/**' }), }, { number: 2, source: '...', tokens: seedTokens(), }, { number: 3, source: '...', tokens: seedTokens({ type: '{function(' }), }, { number: 4, source: '...', tokens: seedTokens({ type: ' number' }), }, { number: 5, source: '...', tokens: seedTokens({ type: ')}', postType: ' ', description: 'line 1 ', }), }, { number: 6, source: '...', tokens: seedTokens({ description: ' line 2 ' }), }, { number: 7, source: '...', tokens: seedTokens({ description: '' }), }, ]; const tokenize = descriptionTokenizer('preserve'); const input = seedSpec({ source }); const output = seedSpec({ source, description: 'line 1 \n line 2 \n', }); expect(tokenize(input)).toEqual(output); }); test('custom joiner - single line', () => { const tokenize = descriptionTokenizer((lines) => { return lines .reduce((str, { tokens: { description } }) => { const trimmed = description.trim(); if (!trimmed) { return str; } return str + ' ' + trimmed; }, '') .slice(1); }); const input = seedSpec({ source: sourceSingle }); const output = seedSpec({ source: sourceSingle, description: 'one two' }); expect(tokenize(input)).toEqual(output); }); test('custom joiner - multiple lines', () => { const tokenize = descriptionTokenizer((lines) => { return lines .reduce((str, { tokens: { description } }) => { const trimmed = description.trim(); if (!trimmed) { return str; } return str + ' ' + trimmed; }, '') .slice(1); }); const input = seedSpec({ source: sourceMultiple }); const output = seedSpec({ source: sourceMultiple, description: 'one two three four', }); expect(tokenize(input)).toEqual(output); });