-
Notifications
You must be signed in to change notification settings - Fork 486
/
Copy pathformat_type.js
127 lines (119 loc) · 4.15 KB
/
format_type.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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
/*eslint max-len: 0 */
'use strict';
var _formatType = require('../lib/output/util/format_type'),
LinkerStack = require('../lib/output/util/linker_stack'),
remark = require('remark'),
parse = require('doctrine').parse,
test = require('tap').test;
function stringify(children) {
return remark().stringify({
type: 'paragraph',
children
});
}
test('formatType', function(t) {
var linkerStack = new LinkerStack({});
var formatType = _formatType.bind(undefined, linkerStack.link);
[
['Foo', 'Foo'],
['null', 'null'],
['null', 'null'],
['*', 'any'],
[
'Array|undefined',
'([Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array) \\| [undefined](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined))'
],
[
'Array<number>',
'[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)<[number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)>'
],
[
'number!',
'[number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)!'
],
["('pre'|'post')", '(`"pre"` \\| `"post"`)'],
["'pre'|'post'", '(`"pre"` \\| `"post"`)'],
[
'function(string, boolean)',
'function ([string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String), [boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean))'
],
[
'function(string, boolean): number',
'function ([string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String), [boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)): [number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)'
],
['function()', 'function ()'],
[
'function(this:something, string)',
'function (this: something, [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String))'
],
['function(new:something)', 'function (new: something)'],
[
'{myNum: number, myObject}',
'{myNum: [number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number), myObject}'
],
[
'[string,]',
'\\[[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)]'
],
[
'number?',
'[number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)?'
],
[
'number',
'[number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)'
],
['?', '?'],
['void', 'void'],
['function(a:b)', 'function (a: b)'],
['function(a):void', 'function (a): void'],
[
'number=',
'[number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)?'
],
[
'...number',
'...[number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)'
],
[
'undefined',
'[undefined](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined)'
]
].forEach(function(example) {
t.deepEqual(
stringify(
formatType(
parse('@param {' + example[0] + '} a', { sloppy: true }).tags[0].type
)
),
example[1],
example[0]
);
});
t.deepEqual(
stringify(
formatType(parse('@param {number} [a=1]', { sloppy: true }).tags[0].type)
),
'[number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)?',
'default'
);
t.deepEqual(
stringify(
_formatType(
function(str) {
return str.toUpperCase();
},
parse('@param {Foo} a', {
sloppy: true
}).tags[0].type
)
),
'[Foo](FOO)',
'with custom linker'
);
t.deepEqual(stringify(formatType()), 'any', 'empty case');
t.throws(function() {
formatType({});
});
t.end();
});