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)]);
|
||
|
});
|