170 lines
3.6 KiB
TypeScript
170 lines
3.6 KiB
TypeScript
import getParser from '../../src/parser/block-parser.js';
|
|
import { Line } from '../../src/primitives.js';
|
|
import { seedTokens } from '../../src/util.js';
|
|
|
|
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)]);
|
|
});
|