1841 lines
36 KiB
JavaScript
1841 lines
36 KiB
JavaScript
const { parse } = require('../../lib/index.cjs');
|
|
|
|
test('description only', () => {
|
|
const parsed = parse(`
|
|
/**
|
|
* Description
|
|
*/`);
|
|
expect(parsed).toEqual([
|
|
{
|
|
description: 'Description',
|
|
tags: [],
|
|
source: [
|
|
{
|
|
number: 1,
|
|
source: ' /**',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '/**',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 2,
|
|
source: ' * Description',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '*',
|
|
postDelimiter: ' ',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: 'Description',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 3,
|
|
source: ' */',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '*/',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
],
|
|
problems: [],
|
|
},
|
|
]);
|
|
});
|
|
|
|
test('description one-liner', () => {
|
|
const parsed = parse(`
|
|
/** Description */
|
|
var a`);
|
|
expect(parsed).toEqual([
|
|
{
|
|
description: 'Description',
|
|
tags: [],
|
|
source: [
|
|
{
|
|
number: 1,
|
|
source: ' /** Description */',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '/**',
|
|
postDelimiter: ' ',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: 'Description ',
|
|
end: '*/',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
],
|
|
problems: [],
|
|
},
|
|
]);
|
|
});
|
|
|
|
test('block closed on same line', () => {
|
|
const parsed = parse(`
|
|
/**
|
|
* Description */`);
|
|
expect(parsed).toEqual([
|
|
{
|
|
description: 'Description',
|
|
tags: [],
|
|
source: [
|
|
{
|
|
number: 1,
|
|
source: ' /**',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '/**',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 2,
|
|
source: ' * Description */',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '*',
|
|
postDelimiter: ' ',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: 'Description ',
|
|
end: '*/',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
],
|
|
problems: [],
|
|
},
|
|
]);
|
|
});
|
|
|
|
test('no mid stars', () => {
|
|
const parsed = parse(`
|
|
/**
|
|
Description
|
|
*/`);
|
|
expect(parsed).toEqual([
|
|
{
|
|
description: 'Description',
|
|
tags: [],
|
|
source: [
|
|
{
|
|
number: 1,
|
|
source: ' /**',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '/**',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 2,
|
|
source: ' Description',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: 'Description',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 3,
|
|
source: ' */',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '*/',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
],
|
|
problems: [],
|
|
},
|
|
]);
|
|
});
|
|
|
|
test('skip surrounding empty lines while preserving line numbers', () => {
|
|
const parsed = parse(`
|
|
/**
|
|
*
|
|
*
|
|
* Description first line
|
|
*
|
|
* Description second line
|
|
*
|
|
*/
|
|
var a`);
|
|
expect(parsed).toEqual([
|
|
{
|
|
description: 'Description first line Description second line',
|
|
tags: [],
|
|
source: [
|
|
{
|
|
number: 1,
|
|
source: ' /**',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '/**',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 2,
|
|
source: ' *',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '*',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 3,
|
|
source: ' *',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '*',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 4,
|
|
source: ' * Description first line',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '*',
|
|
postDelimiter: ' ',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: 'Description first line',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 5,
|
|
source: ' *',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '*',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 6,
|
|
source: ' * Description second line',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '*',
|
|
postDelimiter: ' ',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: 'Description second line',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 7,
|
|
source: ' *',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '*',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 8,
|
|
source: ' */',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '*/',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
],
|
|
problems: [],
|
|
},
|
|
]);
|
|
});
|
|
|
|
test('description on the first line', () => {
|
|
const parsed = parse(`
|
|
/** Description first line
|
|
*
|
|
* Description second line
|
|
*/
|
|
var a`);
|
|
expect(parsed).toEqual([
|
|
{
|
|
description: 'Description first line Description second line',
|
|
tags: [],
|
|
source: [
|
|
{
|
|
number: 1,
|
|
source: ' /** Description first line',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '/**',
|
|
postDelimiter: ' ',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: 'Description first line',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 2,
|
|
source: ' *',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '*',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 3,
|
|
source: ' * Description second line',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '*',
|
|
postDelimiter: ' ',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: 'Description second line',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 4,
|
|
source: ' */',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '*/',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
],
|
|
problems: [],
|
|
},
|
|
]);
|
|
});
|
|
|
|
test('multiple blocks', () => {
|
|
const parsed = parse(`
|
|
/**
|
|
* Description first line
|
|
*/
|
|
var a
|
|
|
|
/**
|
|
* Description second line
|
|
*/
|
|
var b`);
|
|
|
|
expect(parsed).toHaveLength(2);
|
|
|
|
expect(parsed).toEqual([
|
|
{
|
|
description: 'Description first line',
|
|
tags: [],
|
|
source: [
|
|
{
|
|
number: 1,
|
|
source: ' /**',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '/**',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 2,
|
|
source: ' * Description first line',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '*',
|
|
postDelimiter: ' ',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: 'Description first line',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 3,
|
|
source: ' */',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '*/',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
],
|
|
problems: [],
|
|
},
|
|
{
|
|
description: 'Description second line',
|
|
tags: [],
|
|
source: [
|
|
{
|
|
number: 6,
|
|
source: ' /**',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '/**',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 7,
|
|
source: ' * Description second line',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '*',
|
|
postDelimiter: ' ',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: 'Description second line',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 8,
|
|
source: ' */',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '*/',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
],
|
|
problems: [],
|
|
},
|
|
]);
|
|
});
|
|
|
|
test('skip `/* */` blocks', () => {
|
|
const parsed = parse(`
|
|
/*
|
|
*
|
|
*/
|
|
var a`);
|
|
expect(parsed).toHaveLength(0);
|
|
});
|
|
|
|
test('skip `/*** */` blocks', () => {
|
|
const parsed = parse(`
|
|
/***
|
|
*
|
|
*/
|
|
var a`);
|
|
expect(parsed).toHaveLength(0);
|
|
});
|
|
|
|
test('tag only one-liner', () => {
|
|
const parsed = parse(`/** @my-tag */`);
|
|
const source = [
|
|
{
|
|
number: 0,
|
|
source: '/** @my-tag */',
|
|
tokens: {
|
|
start: '',
|
|
delimiter: '/**',
|
|
postDelimiter: ' ',
|
|
tag: '@my-tag',
|
|
postTag: ' ',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '*/',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
];
|
|
expect(parsed).toEqual([
|
|
{
|
|
description: '',
|
|
tags: [
|
|
{
|
|
tag: 'my-tag',
|
|
name: '',
|
|
type: '',
|
|
optional: false,
|
|
description: '',
|
|
problems: [],
|
|
source,
|
|
},
|
|
],
|
|
source,
|
|
problems: [],
|
|
},
|
|
]);
|
|
});
|
|
|
|
test('tag only', () => {
|
|
const parsed = parse(`
|
|
/**
|
|
*
|
|
* @my-tag
|
|
*/
|
|
var a`);
|
|
const source = [
|
|
{
|
|
number: 1,
|
|
source: ' /**',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '/**',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 2,
|
|
source: ' *',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '*',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 3,
|
|
source: ' * @my-tag',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '*',
|
|
postDelimiter: ' ',
|
|
tag: '@my-tag',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 4,
|
|
source: ' */',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '*/',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
];
|
|
expect(parsed).toEqual([
|
|
{
|
|
description: '',
|
|
tags: [
|
|
{
|
|
tag: 'my-tag',
|
|
name: '',
|
|
type: '',
|
|
optional: false,
|
|
description: '',
|
|
problems: [],
|
|
source: source.slice(2),
|
|
},
|
|
],
|
|
source,
|
|
problems: [],
|
|
},
|
|
]);
|
|
});
|
|
|
|
test('tag and type only', () => {
|
|
const parsed = parse(`
|
|
/**
|
|
*
|
|
* @my-tag {my.type}
|
|
*/
|
|
var a`);
|
|
const source = [
|
|
{
|
|
number: 1,
|
|
source: ' /**',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '/**',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 2,
|
|
source: ' *',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '*',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 3,
|
|
source: ' * @my-tag {my.type}',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '*',
|
|
postDelimiter: ' ',
|
|
tag: '@my-tag',
|
|
postTag: ' ',
|
|
name: '',
|
|
postName: '',
|
|
type: '{my.type}',
|
|
postType: '',
|
|
description: '',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 4,
|
|
source: ' */',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '*/',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
];
|
|
expect(parsed).toEqual([
|
|
{
|
|
description: '',
|
|
tags: [
|
|
{
|
|
tag: 'my-tag',
|
|
name: '',
|
|
type: 'my.type',
|
|
optional: false,
|
|
description: '',
|
|
problems: [],
|
|
source: source.slice(2),
|
|
},
|
|
],
|
|
source,
|
|
problems: [],
|
|
},
|
|
]);
|
|
});
|
|
|
|
test('tag and name only', () => {
|
|
const parsed = parse(`
|
|
/**
|
|
*
|
|
* @my-tag my-name
|
|
*/
|
|
var a`);
|
|
const source = [
|
|
{
|
|
number: 1,
|
|
source: ' /**',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '/**',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 2,
|
|
source: ' *',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '*',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 3,
|
|
source: ' * @my-tag my-name',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '*',
|
|
postDelimiter: ' ',
|
|
tag: '@my-tag',
|
|
postTag: ' ',
|
|
name: 'my-name',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 4,
|
|
source: ' */',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '*/',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
];
|
|
expect(parsed).toEqual([
|
|
{
|
|
description: '',
|
|
tags: [
|
|
{
|
|
tag: 'my-tag',
|
|
name: 'my-name',
|
|
type: '',
|
|
optional: false,
|
|
description: '',
|
|
problems: [],
|
|
source: source.slice(2),
|
|
},
|
|
],
|
|
source,
|
|
problems: [],
|
|
},
|
|
]);
|
|
});
|
|
|
|
test('tag, type, and name', () => {
|
|
const parsed = parse(`
|
|
/**
|
|
*
|
|
* @my-tag {my.type} my-name
|
|
*/
|
|
var a`);
|
|
const source = [
|
|
{
|
|
number: 1,
|
|
source: ' /**',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '/**',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 2,
|
|
source: ' *',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '*',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 3,
|
|
source: ' * @my-tag {my.type} my-name',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '*',
|
|
postDelimiter: ' ',
|
|
tag: '@my-tag',
|
|
postTag: ' ',
|
|
name: 'my-name',
|
|
postName: '',
|
|
type: '{my.type}',
|
|
postType: ' ',
|
|
description: '',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 4,
|
|
source: ' */',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '*/',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
];
|
|
expect(parsed).toEqual([
|
|
{
|
|
description: '',
|
|
tags: [
|
|
{
|
|
tag: 'my-tag',
|
|
name: 'my-name',
|
|
type: 'my.type',
|
|
optional: false,
|
|
description: '',
|
|
problems: [],
|
|
source: source.slice(2),
|
|
},
|
|
],
|
|
source,
|
|
problems: [],
|
|
},
|
|
]);
|
|
});
|
|
|
|
test('tag, type, name, and description', () => {
|
|
const parsed = parse(`
|
|
/**
|
|
*
|
|
* @my-tag {my.type} my-name description text
|
|
*/
|
|
var a`);
|
|
const source = [
|
|
{
|
|
number: 1,
|
|
source: ' /**',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '/**',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 2,
|
|
source: ' *',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '*',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 3,
|
|
source: ' * @my-tag {my.type} my-name description text',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '*',
|
|
postDelimiter: ' ',
|
|
tag: '@my-tag',
|
|
postTag: ' ',
|
|
name: 'my-name',
|
|
postName: ' ',
|
|
type: '{my.type}',
|
|
postType: ' ',
|
|
description: 'description text',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 4,
|
|
source: ' */',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '*/',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
];
|
|
expect(parsed).toEqual([
|
|
{
|
|
description: '',
|
|
tags: [
|
|
{
|
|
tag: 'my-tag',
|
|
name: 'my-name',
|
|
type: 'my.type',
|
|
optional: false,
|
|
description: 'description text',
|
|
problems: [],
|
|
source: source.slice(2),
|
|
},
|
|
],
|
|
source,
|
|
problems: [],
|
|
},
|
|
]);
|
|
});
|
|
|
|
test('description contains /**', () => {
|
|
const parsed = parse(`
|
|
/**
|
|
*
|
|
* @my-tag {my.type} my-name description text /**
|
|
*/
|
|
var a`);
|
|
const source = [
|
|
{
|
|
number: 1,
|
|
source: ' /**',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '/**',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 2,
|
|
source: ' *',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '*',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 3,
|
|
source: ' * @my-tag {my.type} my-name description text /**',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '*',
|
|
postDelimiter: ' ',
|
|
tag: '@my-tag',
|
|
postTag: ' ',
|
|
name: 'my-name',
|
|
postName: ' ',
|
|
type: '{my.type}',
|
|
postType: ' ',
|
|
description: 'description text /**',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 4,
|
|
source: ' */',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '*/',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
];
|
|
expect(parsed).toEqual([
|
|
{
|
|
description: '',
|
|
tags: [
|
|
{
|
|
tag: 'my-tag',
|
|
name: 'my-name',
|
|
type: 'my.type',
|
|
optional: false,
|
|
description: 'description text /**',
|
|
problems: [],
|
|
source: source.slice(2),
|
|
},
|
|
],
|
|
source,
|
|
problems: [],
|
|
},
|
|
]);
|
|
});
|
|
|
|
test('tag, type, name, and description separated by mixed spaces', () => {
|
|
const parsed = parse(`
|
|
/**
|
|
*
|
|
* @my-tag\t {my.type}\t my-name\t description text
|
|
*/
|
|
var a`);
|
|
const source = [
|
|
{
|
|
number: 1,
|
|
source: ' /**',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '/**',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 2,
|
|
source: ' *',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '*',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 3,
|
|
source: ' * @my-tag\t {my.type}\t my-name\t description text',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '*',
|
|
postDelimiter: ' ',
|
|
tag: '@my-tag',
|
|
postTag: '\t ',
|
|
name: 'my-name',
|
|
postName: '\t ',
|
|
type: '{my.type}',
|
|
postType: '\t ',
|
|
description: 'description text',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 4,
|
|
source: ' */',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '*/',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
];
|
|
expect(parsed).toEqual([
|
|
{
|
|
description: '',
|
|
tags: [
|
|
{
|
|
tag: 'my-tag',
|
|
name: 'my-name',
|
|
type: 'my.type',
|
|
optional: false,
|
|
description: 'description text',
|
|
problems: [],
|
|
source: source.slice(2),
|
|
},
|
|
],
|
|
source,
|
|
problems: [],
|
|
},
|
|
]);
|
|
});
|
|
|
|
test('tag with multiline description', () => {
|
|
const parsed = parse(`
|
|
/**
|
|
* @my-tag {my.type} my-name description line 1
|
|
* description line 2
|
|
* description line 3
|
|
*/
|
|
var a`);
|
|
const source = [
|
|
{
|
|
number: 1,
|
|
source: ' /**',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '/**',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 2,
|
|
source: ' * @my-tag {my.type} my-name description line 1',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '*',
|
|
postDelimiter: ' ',
|
|
tag: '@my-tag',
|
|
postTag: ' ',
|
|
name: 'my-name',
|
|
postName: ' ',
|
|
type: '{my.type}',
|
|
postType: ' ',
|
|
description: 'description line 1',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 3,
|
|
source: ' * description line 2',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '*',
|
|
postDelimiter: ' ',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: 'description line 2',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 4,
|
|
source: ' * description line 3',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '*',
|
|
postDelimiter: ' ',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: 'description line 3',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 5,
|
|
source: ' */',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '*/',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
];
|
|
expect(parsed).toEqual([
|
|
{
|
|
description: '',
|
|
tags: [
|
|
{
|
|
tag: 'my-tag',
|
|
name: 'my-name',
|
|
type: 'my.type',
|
|
optional: false,
|
|
description:
|
|
'description line 1 description line 2 description line 3',
|
|
problems: [],
|
|
source: source.slice(1),
|
|
},
|
|
],
|
|
source,
|
|
problems: [],
|
|
},
|
|
]);
|
|
});
|
|
|
|
test('optional name', () => {
|
|
const parsed = parse(`
|
|
/**
|
|
*
|
|
* @my-tag {my.type} [my-name] description text
|
|
*/
|
|
var a`);
|
|
const source = [
|
|
{
|
|
number: 1,
|
|
source: ' /**',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '/**',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 2,
|
|
source: ' *',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '*',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 3,
|
|
source: ' * @my-tag {my.type} [my-name] description text',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '*',
|
|
postDelimiter: ' ',
|
|
tag: '@my-tag',
|
|
postTag: ' ',
|
|
name: '[my-name]',
|
|
postName: ' ',
|
|
type: '{my.type}',
|
|
postType: ' ',
|
|
description: 'description text',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 4,
|
|
source: ' */',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '*/',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
];
|
|
expect(parsed).toEqual([
|
|
{
|
|
description: '',
|
|
tags: [
|
|
{
|
|
tag: 'my-tag',
|
|
name: 'my-name',
|
|
type: 'my.type',
|
|
optional: true,
|
|
description: 'description text',
|
|
problems: [],
|
|
source: source.slice(2),
|
|
},
|
|
],
|
|
source,
|
|
problems: [],
|
|
},
|
|
]);
|
|
});
|
|
|
|
test('report name errors', () => {
|
|
const parsed = parse(`
|
|
/**
|
|
*
|
|
* @my-tag {my.type} [my-name description text
|
|
*/
|
|
var a`);
|
|
const source = [
|
|
{
|
|
number: 1,
|
|
source: ' /**',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '/**',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 2,
|
|
source: ' *',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '*',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 3,
|
|
source: ' * @my-tag {my.type} [my-name description text',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '*',
|
|
postDelimiter: ' ',
|
|
tag: '@my-tag',
|
|
postTag: ' ',
|
|
name: '',
|
|
postName: '',
|
|
type: '{my.type}',
|
|
postType: ' ',
|
|
description: '[my-name description text',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 4,
|
|
source: ' */',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '*/',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
];
|
|
const problems = [
|
|
{
|
|
code: 'spec:name:unpaired-brackets',
|
|
critical: true,
|
|
message: 'unpaired brackets',
|
|
line: 3,
|
|
},
|
|
];
|
|
expect(parsed).toEqual([
|
|
{
|
|
description: '',
|
|
tags: [
|
|
{
|
|
tag: 'my-tag',
|
|
name: '',
|
|
type: 'my.type',
|
|
optional: false,
|
|
description: '',
|
|
source: source.slice(2),
|
|
problems,
|
|
},
|
|
],
|
|
source,
|
|
problems,
|
|
},
|
|
]);
|
|
});
|
|
|
|
test('misaligned block', () => {
|
|
const parsed = parse(`
|
|
/**
|
|
* @my-tag {my.type} my-name description line 1
|
|
description line 2
|
|
* description line 3
|
|
*/
|
|
var a`);
|
|
const source = [
|
|
{
|
|
number: 1,
|
|
source: ' /**',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '/**',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 2,
|
|
source: '* @my-tag {my.type} my-name description line 1',
|
|
tokens: {
|
|
start: '',
|
|
delimiter: '*',
|
|
postDelimiter: ' ',
|
|
tag: '@my-tag',
|
|
postTag: ' ',
|
|
name: 'my-name',
|
|
postName: ' ',
|
|
type: '{my.type}',
|
|
postType: ' ',
|
|
description: 'description line 1',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 3,
|
|
source: ' description line 2',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: 'description line 2',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 4,
|
|
source: ' * description line 3',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '*',
|
|
postDelimiter: ' ',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: 'description line 3',
|
|
end: '',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
{
|
|
number: 5,
|
|
source: ' */',
|
|
tokens: {
|
|
start: ' ',
|
|
delimiter: '',
|
|
postDelimiter: '',
|
|
tag: '',
|
|
postTag: '',
|
|
name: '',
|
|
postName: '',
|
|
type: '',
|
|
postType: '',
|
|
description: '',
|
|
end: '*/',
|
|
lineEnd: '',
|
|
},
|
|
},
|
|
];
|
|
expect(parsed).toEqual([
|
|
{
|
|
description: '',
|
|
tags: [
|
|
{
|
|
tag: 'my-tag',
|
|
name: 'my-name',
|
|
type: 'my.type',
|
|
optional: false,
|
|
description:
|
|
'description line 1 description line 2 description line 3',
|
|
problems: [],
|
|
source: source.slice(1),
|
|
},
|
|
],
|
|
source,
|
|
problems: [],
|
|
},
|
|
]);
|
|
});
|