/
javascript.js
108 lines (100 loc) · 2.09 KB
/
javascript.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
const removePosition = require('../../../src/remark-remove-position');
const remarkParse = require('remark')().use(removePosition).parse;
const parse = require('../../../src/parsers/javascript');
function toComments(source, filename, opts) {
source = typeof source === 'string' ? source : '(' + source.toString() + ')';
return parse(
{
file: filename || 'test.js',
source
},
opts || {}
);
}
test('parse - leading comment', function () {
expect(
toComments(function () {
/** one */
/** two */
function two() {}
}).map(function (c) {
return c.description;
})
).toEqual([remarkParse('one'), remarkParse('two')]);
});
test('parse - trailing comment', function () {
expect(
toComments(function () {
/** one */
function one() {}
/** two */
}).map(function (c) {
return c.description;
})
).toEqual([remarkParse('one'), remarkParse('two')]);
});
test('parse - unknown tag', function () {
expect(
toComments(function () {
/** @unknown */
})[0].tags[0].title
).toBe('unknown');
});
test('parse - error', function () {
expect(
toComments(function () {
/** @param {foo */
})[0].errors
).toEqual([
{ message: 'Braces are not balanced' },
{ message: 'Missing or invalid tag name' }
]);
});
test('parse - document exported', function () {
expect(
toComments(
`
export class C {}
`
).length
).toBe(0);
expect(
toComments(
`
export class C {}
`,
'test.js',
{ documentExported: true }
).length
).toBe(1);
expect(
toComments(
`
export class C {
method() {}
}
`,
'test.js',
{ documentExported: true }
).length
).toBe(2);
});
test('parse - constructor comments', function () {
expect(
toComments(`
class Test {
/** @hideconstructor */
constructor() {}
}
`).length
).toBe(0);
expect(
toComments(`
/** Test */
export class Test {
/** @hideconstructor */
constructor() {}
}
`)[0].constructorComment
).toBeDefined();
});