299 lines
7.0 KiB
TypeScript
299 lines
7.0 KiB
TypeScript
|
import getParser from '../../src/parser/index.js';
|
||
|
import { seedTokens } from '../../src/util.js';
|
||
|
|
||
|
test('block with tags', () => {
|
||
|
const parsed = getParser()(`
|
||
|
/**
|
||
|
* Description may go\x20
|
||
|
* over few lines followed by @tags
|
||
|
* @param {string} name name parameter
|
||
|
*
|
||
|
* @param {any} value value of any type
|
||
|
*/`);
|
||
|
expect(parsed).toEqual([
|
||
|
{
|
||
|
description: 'Description may go over few lines followed by @tags',
|
||
|
tags: [
|
||
|
{
|
||
|
tag: 'param',
|
||
|
name: 'name',
|
||
|
type: 'string',
|
||
|
optional: false,
|
||
|
description: 'name parameter',
|
||
|
problems: [],
|
||
|
source: [
|
||
|
{
|
||
|
number: 4,
|
||
|
source: ' * @param {string} name name parameter',
|
||
|
tokens: seedTokens({
|
||
|
start: ' ',
|
||
|
delimiter: '*',
|
||
|
postDelimiter: ' ',
|
||
|
tag: '@param',
|
||
|
postTag: ' ',
|
||
|
name: 'name',
|
||
|
postName: ' ',
|
||
|
type: '{string}',
|
||
|
postType: ' ',
|
||
|
description: 'name parameter',
|
||
|
}),
|
||
|
},
|
||
|
{
|
||
|
number: 5,
|
||
|
source: ' *',
|
||
|
tokens: seedTokens({
|
||
|
start: ' ',
|
||
|
delimiter: '*',
|
||
|
}),
|
||
|
},
|
||
|
],
|
||
|
},
|
||
|
{
|
||
|
tag: 'param',
|
||
|
name: 'value',
|
||
|
type: 'any',
|
||
|
optional: false,
|
||
|
description: 'value of any type',
|
||
|
problems: [],
|
||
|
source: [
|
||
|
{
|
||
|
number: 6,
|
||
|
source: ' * @param {any} value value of any type',
|
||
|
tokens: seedTokens({
|
||
|
start: ' ',
|
||
|
delimiter: '*',
|
||
|
postDelimiter: ' ',
|
||
|
tag: '@param',
|
||
|
postTag: ' ',
|
||
|
name: 'value',
|
||
|
postName: ' ',
|
||
|
type: '{any}',
|
||
|
postType: ' ',
|
||
|
description: 'value of any type',
|
||
|
}),
|
||
|
},
|
||
|
{
|
||
|
number: 7,
|
||
|
source: ' */',
|
||
|
tokens: seedTokens({
|
||
|
start: ' ',
|
||
|
end: '*/',
|
||
|
}),
|
||
|
},
|
||
|
],
|
||
|
},
|
||
|
],
|
||
|
source: [
|
||
|
{
|
||
|
number: 1,
|
||
|
source: ' /**',
|
||
|
tokens: seedTokens({
|
||
|
start: ' ',
|
||
|
delimiter: '/**',
|
||
|
}),
|
||
|
},
|
||
|
{
|
||
|
number: 2,
|
||
|
source: ' * Description may go ',
|
||
|
tokens: seedTokens({
|
||
|
start: ' ',
|
||
|
delimiter: '*',
|
||
|
postDelimiter: ' ',
|
||
|
description: 'Description may go ',
|
||
|
}),
|
||
|
},
|
||
|
{
|
||
|
number: 3,
|
||
|
source: ' * over few lines followed by @tags',
|
||
|
tokens: seedTokens({
|
||
|
start: ' ',
|
||
|
delimiter: '*',
|
||
|
postDelimiter: ' ',
|
||
|
description: 'over few lines followed by @tags',
|
||
|
}),
|
||
|
},
|
||
|
{
|
||
|
number: 4,
|
||
|
source: ' * @param {string} name name parameter',
|
||
|
tokens: seedTokens({
|
||
|
start: ' ',
|
||
|
delimiter: '*',
|
||
|
postDelimiter: ' ',
|
||
|
tag: '@param',
|
||
|
postTag: ' ',
|
||
|
name: 'name',
|
||
|
postName: ' ',
|
||
|
type: '{string}',
|
||
|
postType: ' ',
|
||
|
description: 'name parameter',
|
||
|
end: '',
|
||
|
}),
|
||
|
},
|
||
|
{
|
||
|
number: 5,
|
||
|
source: ' *',
|
||
|
tokens: seedTokens({
|
||
|
start: ' ',
|
||
|
delimiter: '*',
|
||
|
}),
|
||
|
},
|
||
|
{
|
||
|
number: 6,
|
||
|
source: ' * @param {any} value value of any type',
|
||
|
tokens: seedTokens({
|
||
|
start: ' ',
|
||
|
delimiter: '*',
|
||
|
postDelimiter: ' ',
|
||
|
tag: '@param',
|
||
|
postTag: ' ',
|
||
|
name: 'value',
|
||
|
postName: ' ',
|
||
|
type: '{any}',
|
||
|
postType: ' ',
|
||
|
description: 'value of any type',
|
||
|
}),
|
||
|
},
|
||
|
{
|
||
|
number: 7,
|
||
|
source: ' */',
|
||
|
tokens: seedTokens({
|
||
|
start: ' ',
|
||
|
end: '*/',
|
||
|
}),
|
||
|
},
|
||
|
],
|
||
|
problems: [],
|
||
|
},
|
||
|
]);
|
||
|
});
|
||
|
|
||
|
test('no source cloning', () => {
|
||
|
const parsed = getParser()(`
|
||
|
/**
|
||
|
* Description may go\x20
|
||
|
* over few lines followed by @tags
|
||
|
* @param {string} name name parameter
|
||
|
*
|
||
|
* @param {any} value value of any type
|
||
|
*/`);
|
||
|
expect(parsed[0].tags[0].source[0] === parsed[0].source[3]).toBe(true);
|
||
|
});
|
||
|
|
||
|
test('empty multi-line block', () => {
|
||
|
const parsed = getParser()(`
|
||
|
/**
|
||
|
*
|
||
|
*/`);
|
||
|
expect(parsed).toEqual([
|
||
|
{
|
||
|
description: '',
|
||
|
tags: [],
|
||
|
source: [
|
||
|
{
|
||
|
number: 1,
|
||
|
source: ' /**',
|
||
|
tokens: {
|
||
|
delimiter: '/**',
|
||
|
description: '',
|
||
|
end: '',
|
||
|
lineEnd: '',
|
||
|
name: '',
|
||
|
postDelimiter: '',
|
||
|
postName: '',
|
||
|
postTag: '',
|
||
|
postType: '',
|
||
|
start: ' ',
|
||
|
tag: '',
|
||
|
type: '',
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
number: 2,
|
||
|
source: ' *',
|
||
|
tokens: {
|
||
|
delimiter: '*',
|
||
|
description: '',
|
||
|
end: '',
|
||
|
lineEnd: '',
|
||
|
name: '',
|
||
|
postDelimiter: '',
|
||
|
postName: '',
|
||
|
postTag: '',
|
||
|
postType: '',
|
||
|
start: ' ',
|
||
|
tag: '',
|
||
|
type: '',
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
number: 3,
|
||
|
source: ' */',
|
||
|
tokens: {
|
||
|
delimiter: '',
|
||
|
description: '',
|
||
|
end: '*/',
|
||
|
lineEnd: '',
|
||
|
name: '',
|
||
|
postDelimiter: '',
|
||
|
postName: '',
|
||
|
postTag: '',
|
||
|
postType: '',
|
||
|
start: ' ',
|
||
|
tag: '',
|
||
|
type: '',
|
||
|
},
|
||
|
},
|
||
|
],
|
||
|
problems: [],
|
||
|
},
|
||
|
]);
|
||
|
});
|
||
|
|
||
|
test('empty one-line block', () => {
|
||
|
const parsed = getParser()(`
|
||
|
/** */`);
|
||
|
expect(parsed).toEqual([
|
||
|
{
|
||
|
description: '',
|
||
|
tags: [],
|
||
|
source: [
|
||
|
{
|
||
|
number: 1,
|
||
|
source: ' /** */',
|
||
|
tokens: {
|
||
|
delimiter: '/**',
|
||
|
description: '',
|
||
|
end: '*/',
|
||
|
lineEnd: '',
|
||
|
name: '',
|
||
|
postDelimiter: ' ',
|
||
|
postName: '',
|
||
|
postTag: '',
|
||
|
postType: '',
|
||
|
start: ' ',
|
||
|
tag: '',
|
||
|
type: '',
|
||
|
},
|
||
|
},
|
||
|
],
|
||
|
problems: [],
|
||
|
},
|
||
|
]);
|
||
|
});
|
||
|
|
||
|
test.each([
|
||
|
['one-star', '/*\n*\n*/'],
|
||
|
['three-star', '/***\n*\n*/'],
|
||
|
['one-star oneliner', '/* */'],
|
||
|
['three-star oneliner', '/*** */'],
|
||
|
])('skip block - %s', (name, source) => {
|
||
|
expect(getParser()(source)).toEqual([]);
|
||
|
});
|
||
|
|
||
|
test.each([
|
||
|
['negative', -1],
|
||
|
['float', 1.5],
|
||
|
])('invalid start line - %s', (name, startLine) => {
|
||
|
expect(() => getParser({ startLine })).toThrow('Invalid startLine');
|
||
|
});
|