import getParser from '../../src/parser/block-parser'; import { Line } from '../../src/primitives'; import { seedTokens } from '../../src/util'; let source: Line[]; beforeEach(() => { source = [ { number: 1, source: ' /**', tokens: seedTokens({ start: ' ', delimiter: '/**', postDelimiter: '', description: '', end: '', }), }, { number: 2, source: ' * description 0', tokens: seedTokens({ start: ' ', delimiter: '*', postDelimiter: ' ', description: 'description 0', end: '', }), }, { number: 3, source: ' *', tokens: seedTokens({ start: ' ', delimiter: '*', postDelimiter: '', description: '', end: '', }), }, { number: 4, source: ' * description 1', tokens: seedTokens({ start: ' ', delimiter: '*', postDelimiter: ' ', description: 'description 1', end: '', }), }, { number: 5, source: ' *', tokens: seedTokens({ start: ' ', delimiter: '*', postDelimiter: '', description: '', end: '', }), }, { number: 6, source: ' * @param {string} value value description 0', tokens: seedTokens({ start: ' ', delimiter: '*', postDelimiter: ' ', description: '@param {string} value value description 0', end: '', }), }, { number: 7, source: ' ```', tokens: seedTokens({ start: ' ', delimiter: '', postDelimiter: '', description: '```', end: '', }), }, { number: 8, source: ' @sample code', tokens: seedTokens({ start: ' ', delimiter: '', postDelimiter: '', description: '@sample code', end: '', }), }, { number: 9, source: ' ```', tokens: seedTokens({ start: ' ', delimiter: '', postDelimiter: '', description: '```', end: '', }), }, { number: 10, source: ' * value description 1', tokens: seedTokens({ start: ' ', delimiter: '*', postDelimiter: ' ', description: 'value description 1', end: '', }), }, { number: 11, source: ' */', tokens: seedTokens({ start: ' ', delimiter: '', postDelimiter: '', description: '', end: '*/', }), }, ]; }); test('standard fences', () => { const parser = getParser(); const groups: Line[][] = parser(source); expect(groups.length).toBe(2); expect(groups).toEqual([source.slice(0, 5), source.slice(5)]); }); test('custom fence', () => { source = source.map((line) => { line.tokens.description = line.tokens.description.replace('```', '###'); return line; }); const parser = getParser({ fence: '###' }); const groups: Line[][] = parser(source); expect(groups.length).toBe(2); expect(groups).toEqual([source.slice(0, 5), source.slice(5)]); }); test('fence function', () => { source = source.map((line) => { line.tokens.description = line.tokens.description.replace('```', '###'); return line; }); function isFenced(source: string) { return source.split('###').length % 2 === 0; } const parser = getParser({ fence: isFenced }); const groups: Line[][] = parser(source); expect(groups.length).toBe(2); expect(groups).toEqual([source.slice(0, 5), source.slice(5)]); });