Files
react-native-devtools-frontend/node_modules/comment-parser/tests/unit/spec-description-tokenizer.spec.ts
T
Jack Franklin fd72c071cc Enforce alignment of JSDoc comments
This CL adds the eslint-plugin-jsdoc plugin and enables just one rule,
`jsdoc/check-alignment`, which ensures that all the lines in a comment
are correctly aligned. For example:

```
/**
* foo
 * bar
*/
```

Would fail the check and be corrected to:

```
/**
 * foo
 * bar
 */
```

DISABLE_THIRD_PARTY_CHECK=deliberate install + use of
eslint-plugin-jsdoc node_module

Bug: none
Change-Id: I969983cd550653654a334ede3409b8c850467245
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/4110906
Commit-Queue: Andres Olivares <andoli@chromium.org>
Reviewed-by: Andres Olivares <andoli@chromium.org>
Auto-Submit: Jack Franklin <jacktfranklin@chromium.org>
Commit-Queue: Jack Franklin <jacktfranklin@chromium.org>
2022-12-21 12:30:47 +00:00

228 lines
5.0 KiB
TypeScript

import descriptionTokenizer from '../../src/parser/tokenizers/description';
import { seedSpec, seedTokens } from '../../src/util';
const sourceSingle = [
{
number: 1,
source: '...',
tokens: seedTokens({ description: ' one two ' }),
},
];
const sourceMultiple = [
{
number: 1,
source: '...',
tokens: seedTokens({ description: 'one two ' }),
},
{
number: 2,
source: '...',
tokens: seedTokens({ description: '' }),
},
{
number: 3,
source: '...',
tokens: seedTokens({ description: ' three four' }),
},
{
number: 4,
source: '...',
tokens: seedTokens({ description: '' }),
},
];
test('compact - single line', () => {
const tokenize = descriptionTokenizer('compact');
const input = seedSpec({ source: sourceSingle });
const output = seedSpec({ source: sourceSingle, description: 'one two' });
expect(tokenize(input)).toEqual(output);
});
test('compact - multiple lines', () => {
const tokenize = descriptionTokenizer('compact');
const input = seedSpec({ source: sourceMultiple });
const output = seedSpec({
source: sourceMultiple,
description: 'one two three four',
});
expect(tokenize(input)).toEqual(output);
});
test('preserve - multiple lines', () => {
const tokenize = descriptionTokenizer('preserve');
const input = seedSpec({ source: sourceMultiple });
const output = seedSpec({
source: sourceMultiple,
description: 'one two \n\n three four\n',
});
expect(tokenize(input)).toEqual(output);
});
test('preserve - one-liner', () => {
const tokenize = descriptionTokenizer('preserve');
const input = seedSpec({
source: [
{
number: 1,
source: '...',
tokens: seedTokens({
delimiter: '/**',
postDelimiter: ' ',
description: 'description',
end: '*/',
}),
},
],
});
const output = seedSpec({
description: 'description',
source: [
{
number: 1,
source: '...',
tokens: seedTokens({
delimiter: '/**',
postDelimiter: ' ',
description: 'description',
end: '*/',
}),
},
],
});
expect(tokenize(input)).toEqual(output);
});
test('preserve - leading empty lines', () => {
const source = [
{
number: 1,
source: '...',
tokens: seedTokens({ delimiter: '/**' }),
},
{
number: 2,
source: '...',
tokens: seedTokens(),
},
{
number: 3,
source: '...',
tokens: seedTokens({ description: ' line 1 ' }),
},
{
number: 4,
source: '...',
tokens: seedTokens({ description: ' line 2 ' }),
},
{
number: 5,
source: '...',
tokens: seedTokens({ description: '' }),
},
];
const tokenize = descriptionTokenizer('preserve');
const input = seedSpec({ source });
const output = seedSpec({
source,
description: '\n line 1 \n line 2 \n',
});
expect(tokenize(input)).toEqual(output);
});
test('preserve - leading type lines', () => {
const source = [
{
number: 1,
source: '...',
tokens: seedTokens({ delimiter: '/**' }),
},
{
number: 2,
source: '...',
tokens: seedTokens(),
},
{
number: 3,
source: '...',
tokens: seedTokens({ type: '{function(' }),
},
{
number: 4,
source: '...',
tokens: seedTokens({ type: ' number' }),
},
{
number: 5,
source: '...',
tokens: seedTokens({
type: ')}',
postType: ' ',
description: 'line 1 ',
}),
},
{
number: 6,
source: '...',
tokens: seedTokens({ description: ' line 2 ' }),
},
{
number: 7,
source: '...',
tokens: seedTokens({ description: '' }),
},
];
const tokenize = descriptionTokenizer('preserve');
const input = seedSpec({ source });
const output = seedSpec({
source,
description: 'line 1 \n line 2 \n',
});
expect(tokenize(input)).toEqual(output);
});
test('custom joiner - single line', () => {
const tokenize = descriptionTokenizer((lines) => {
return lines
.reduce((str, { tokens: { description } }) => {
const trimmed = description.trim();
if (!trimmed) {
return str;
}
return str + ' ' + trimmed;
}, '')
.slice(1);
});
const input = seedSpec({ source: sourceSingle });
const output = seedSpec({ source: sourceSingle, description: 'one two' });
expect(tokenize(input)).toEqual(output);
});
test('custom joiner - multiple lines', () => {
const tokenize = descriptionTokenizer((lines) => {
return lines
.reduce((str, { tokens: { description } }) => {
const trimmed = description.trim();
if (!trimmed) {
return str;
}
return str + ' ' + trimmed;
}, '')
.slice(1);
});
const input = seedSpec({ source: sourceMultiple });
const output = seedSpec({
source: sourceMultiple,
description: 'one two three four',
});
expect(tokenize(input)).toEqual(output);
});