121 lines
2.5 KiB
TypeScript
121 lines
2.5 KiB
TypeScript
|
import { getJoiner } from '../../src/parser/tokenizers/description.js';
|
||
|
import { Line } from '../../src/primitives.js';
|
||
|
import { seedTokens } from '../../src/util.js';
|
||
|
|
||
|
const source: Line[] = [
|
||
|
{
|
||
|
number: 1,
|
||
|
source: ' /**',
|
||
|
tokens: seedTokens({
|
||
|
start: ' ',
|
||
|
delimiter: '/**',
|
||
|
}),
|
||
|
},
|
||
|
{
|
||
|
number: 2,
|
||
|
source: ' * ',
|
||
|
tokens: seedTokens({
|
||
|
start: ' ',
|
||
|
delimiter: '*',
|
||
|
postDelimiter: ' ',
|
||
|
}),
|
||
|
},
|
||
|
{
|
||
|
number: 3,
|
||
|
source: ' * Description first line\twith\ttabs ',
|
||
|
tokens: seedTokens({
|
||
|
start: ' ',
|
||
|
delimiter: '*',
|
||
|
postDelimiter: ' ',
|
||
|
description: 'Description first line\twith\ttabs ',
|
||
|
}),
|
||
|
},
|
||
|
{
|
||
|
number: 4,
|
||
|
source: ' * second line ',
|
||
|
tokens: seedTokens({
|
||
|
start: ' ',
|
||
|
delimiter: '*',
|
||
|
postDelimiter: ' ',
|
||
|
description: 'second line ',
|
||
|
}),
|
||
|
},
|
||
|
{
|
||
|
number: 5,
|
||
|
source: ' * ',
|
||
|
tokens: seedTokens({
|
||
|
start: ' ',
|
||
|
delimiter: '*',
|
||
|
postDelimiter: ' ',
|
||
|
}),
|
||
|
},
|
||
|
{
|
||
|
number: 6,
|
||
|
source: ' * third line ',
|
||
|
tokens: seedTokens({
|
||
|
start: ' ',
|
||
|
delimiter: '*',
|
||
|
postDelimiter: ' ',
|
||
|
description: 'third line ',
|
||
|
}),
|
||
|
},
|
||
|
{
|
||
|
number: 7,
|
||
|
source: ' */',
|
||
|
tokens: seedTokens({
|
||
|
start: ' ',
|
||
|
end: '*/',
|
||
|
}),
|
||
|
},
|
||
|
];
|
||
|
|
||
|
test('compact', () => {
|
||
|
const joined = getJoiner('compact')(source);
|
||
|
expect(joined).toBe(
|
||
|
'Description first line\twith\ttabs second line third line'
|
||
|
);
|
||
|
});
|
||
|
|
||
|
test('preserve', () => {
|
||
|
const joined = getJoiner('preserve')(source);
|
||
|
expect(joined).toBe(
|
||
|
' \n Description first line\twith\ttabs \n second line \n \n third line '
|
||
|
);
|
||
|
});
|
||
|
|
||
|
test('preserve - empty', () => {
|
||
|
const joined = getJoiner('preserve')([]);
|
||
|
expect(joined).toBe('');
|
||
|
});
|
||
|
|
||
|
test('preserve - no delimiter', () => {
|
||
|
const joined = getJoiner('preserve')([
|
||
|
{
|
||
|
number: 1,
|
||
|
source: '...',
|
||
|
tokens: seedTokens({
|
||
|
start: ' ',
|
||
|
delimiter: '',
|
||
|
postDelimiter: '',
|
||
|
description: 'line with no delimiter',
|
||
|
}),
|
||
|
},
|
||
|
]);
|
||
|
expect(joined).toBe(' line with no delimiter');
|
||
|
});
|
||
|
|
||
|
test('custom', () => {
|
||
|
const spacerFn = (source: Line[]) =>
|
||
|
source
|
||
|
.map(({ tokens: { description } }) =>
|
||
|
description.replace(/\s+/g, ' ').trim().toUpperCase()
|
||
|
)
|
||
|
.filter((s) => s !== '')
|
||
|
.join(' ');
|
||
|
|
||
|
const joined = getJoiner(spacerFn)(source);
|
||
|
expect(joined).toBe(
|
||
|
'DESCRIPTION FIRST LINE WITH TABS SECOND LINE THIRD LINE'
|
||
|
);
|
||
|
});
|