git.iko.soy/typeable/remark-validate-links
on 7.1.1 help sign in
473 lines 25 kB history raw
1'use strict'
3var fs = require('fs')
4var path = require('path')
5var test = require('tape')
6var execa = require('execa')
7var vfile = require('to-vfile')
8var remark = require('remark')
9var strip = require('strip-ansi')
10var links = require('..')
12process.chdir(path.resolve(process.cwd(), 'test', 'fixtures'))
14test.onFinish(function() {
15 process.chdir(path.resolve(process.cwd(), '..', '..'))
16})
18var bin = path.join('..', '..', 'node_modules', '.bin', 'remark')
20test('remark-validate-links', function(t) {
21 t.test('should work on the API', function(st) {
22 st.plan(1)
24 remark()
25 .use(links)
26 .process(vfile.readSync('github.md'), function(err, file) {
27 st.deepEqual(
28 [err].concat(file.messages.map(String)),
29 [null, 'github.md:5:37-5:51: Link to unknown heading: `world`'],
30 'should report messages'
31 )
32 })
33 })
35 t.test('should throw on unparsable git repositories', function(st) {
36 st.plan(1)
38 execa(bin, [
39 '--no-config',
40 '--no-ignore',
41 '--use',
42 '../..=repository:"invalid:shortcode"',
43 'definitions.md'
44 ]).then(
45 function() {
46 st.fail('should not be successful')
47 },
48 function(err) {
49 st.equal(
50 strip(err.stderr)
51 .split('\n')
52 .slice(0, 2)
53 .join('\n'),
54 [
55 'definitions.md',
56 ' 1:1 error Error: remark-validate-links cannot parse `repository` (`invalid:shortcode`)'
57 ].join('\n'),
58 'should report an error'
59 )
60 }
61 )
62 })
64 t.test('should throw on gist repositories', function(st) {
65 st.plan(1)
67 execa(bin, [
68 '--no-config',
69 '--no-ignore',
70 '--use',
71 '../..=repository:"gist:wooorm/8504606"',
72 'definitions.md'
73 ]).then(
74 function() {
75 st.fail('should not be successful')
76 },
77 function(err) {
78 st.equal(
79 strip(err.stderr)
80 .split('\n')
81 .slice(0, 2)
82 .join('\n'),
83 [
84 'definitions.md',
85 ' 1:1 error Error: remark-validate-links does not support gist repositories'
86 ].join('\n'),
87 'should report an error'
88 )
89 }
90 )
91 })
93 t.test('should ignore unfound files', function(st) {
94 st.plan(1)
96 execa(bin, [
97 '--no-config',
98 '--no-ignore',
99 '--use',
100 '../..',
101 'definitions.md',
102 'FOOOO'
103 ]).then(
104 function() {
105 st.fail('should not be successful')
106 },
107 function(err) {
108 st.equal(
109 strip(err.stderr),
110 [
111 'FOOOO',
112 ' 1:1 error No such file or directory',
113 '',
114 'definitions.md',
115 ' 5:12-5:21 warning Link to unknown heading: `world` missing-heading remark-validate-links',
116 '',
117 '2 messages (✖ 1 error, ⚠ 1 warning)',
118 ''
119 ].join('\n'),
120 'should report an error'
121 )
122 }
123 )
124 })
126 t.test('should work when not all files are given', function(st) {
127 st.plan(1)
129 execa(bin, [
130 '--no-config',
131 '--no-ignore',
132 '--use',
133 '../..',
134 'github.md'
135 ]).then(function(result) {
136 st.equal(
137 strip(result.stderr),
138 [
139 'github.md',
140 ' 5:37-5:51 warning Link to unknown heading: `world` missing-heading remark-validate-links',
141 ' 23:10-23:37 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
142 ' 25:10-25:35 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
143 ' 37:10-37:41 warning Link to unknown heading in `examples/github.md`: `world` missing-heading-in-file remark-validate-links',
144 ' 39:10-39:39 warning Link to unknown heading in `examples/github.md`: `world` missing-heading-in-file remark-validate-links',
145 ' 45:10-45:40 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
146 ' 45:10-45:40 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
147 ' 47:10-47:38 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
148 ' 47:10-47:38 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
149 '',
150 '⚠ 9 warnings'
151 ].join('\n'),
152 'should report'
153 )
154 }, st.error)
155 })
157 t.test('should work when all files are given', function(st) {
158 st.plan(1)
160 execa(bin, [
161 '--no-config',
162 '--no-ignore',
163 '--use',
164 '../..',
165 'github.md',
166 'examples/github.md'
167 ]).then(function(result) {
168 st.equal(
169 strip(result.stderr),
170 [
171 'examples/github.md',
172 ' 5:37-5:51 warning Link to unknown heading: `world` missing-heading remark-validate-links',
173 ' 19:10-19:29 warning Link to unknown file: `world.md` missing-file remark-validate-links',
174 ' 29:10-29:33 warning Link to unknown heading in `github.md`: `world` missing-heading-in-file remark-validate-links',
175 ' 35:10-35:32 warning Link to unknown file: `world.md` missing-file remark-validate-links',
176 ' 35:10-35:32 warning Link to unknown heading in `world.md`: `hello` missing-heading-in-file remark-validate-links',
177 '',
178 'github.md',
179 ' 5:37-5:51 warning Link to unknown heading: `world` missing-heading remark-validate-links',
180 ' 23:10-23:37 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
181 ' 25:10-25:35 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
182 ' 37:10-37:41 warning Link to unknown heading in `examples/github.md`: `world` missing-heading-in-file remark-validate-links',
183 ' 39:10-39:39 warning Link to unknown heading in `examples/github.md`: `world` missing-heading-in-file remark-validate-links',
184 ' 45:10-45:40 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
185 ' 45:10-45:40 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
186 ' 47:10-47:38 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
187 ' 47:10-47:38 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
188 '',
189 '⚠ 14 warnings'
190 ].join('\n'),
191 'should report'
192 )
193 }, st.error)
194 })
196 t.test('should work with definitions', function(st) {
197 st.plan(1)
199 execa(bin, [
200 '--no-config',
201 '--no-ignore',
202 '--use',
203 '../..',
204 'definitions.md'
205 ]).then(function(result) {
206 st.equal(
207 strip(result.stderr),
208 [
209 'definitions.md',
210 ' 5:12-5:21 warning Link to unknown heading: `world` missing-heading remark-validate-links',
211 '',
212 '⚠ 1 warning'
213 ].join('\n'),
214 'should report'
215 )
216 }, st.error)
217 })
219 t.test('should work on GitHub URLs when given a repo', function(st) {
220 st.plan(1)
222 execa(bin, [
223 '--no-config',
224 '--no-ignore',
225 '--use',
226 '../..=repository:"wooorm/test"',
227 'github.md',
228 'examples/github.md'
229 ]).then(function(result) {
230 st.equal(
231 strip(result.stderr),
232 [
233 'examples/github.md',
234 ' 5:37-5:51 warning Link to unknown heading: `world` missing-heading remark-validate-links',
235 ' 15:34-15:93 warning Link to unknown file: `world.md` missing-file remark-validate-links',
236 ' 17:12-17:72 warning Link to unknown file: `world.md` missing-file remark-validate-links',
237 ' 19:10-19:29 warning Link to unknown file: `world.md` missing-file remark-validate-links',
238 ' 29:10-29:33 warning Link to unknown heading in `github.md`: `world` missing-heading-in-file remark-validate-links',
239 ' 31:10-31:73 warning Link to unknown heading in `github.md`: `world` missing-heading-in-file remark-validate-links',
240 ' 33:10-33:74 warning Link to unknown heading in `github.md`: `world` missing-heading-in-file remark-validate-links',
241 ' 35:10-35:32 warning Link to unknown file: `world.md` missing-file remark-validate-links',
242 ' 35:10-35:32 warning Link to unknown heading in `world.md`: `hello` missing-heading-in-file remark-validate-links',
243 ' 37:10-37:72 warning Link to unknown file: `world.md` missing-file remark-validate-links',
244 ' 37:10-37:72 warning Link to unknown heading in `world.md`: `hello` missing-heading-in-file remark-validate-links',
245 ' 39:10-39:73 warning Link to unknown file: `world.md` missing-file remark-validate-links',
246 ' 39:10-39:73 warning Link to unknown heading in `world.md`: `hello` missing-heading-in-file remark-validate-links',
247 '',
248 'github.md',
249 ' 5:37-5:51 warning Link to unknown heading: `world` missing-heading remark-validate-links',
250 ' 19:34-19:102 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
251 ' 21:12-21:81 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
252 ' 23:10-23:37 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
253 ' 25:10-25:35 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
254 ' 37:10-37:41 warning Link to unknown heading in `examples/github.md`: `world` missing-heading-in-file remark-validate-links',
255 ' 39:10-39:39 warning Link to unknown heading in `examples/github.md`: `world` missing-heading-in-file remark-validate-links',
256 ' 41:10-41:82 warning Link to unknown heading in `examples/github.md`: `world` missing-heading-in-file remark-validate-links',
257 ' 43:10-43:83 warning Link to unknown heading in `examples/github.md`: `world` missing-heading-in-file remark-validate-links',
258 ' 45:10-45:40 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
259 ' 45:10-45:40 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
260 ' 47:10-47:38 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
261 ' 47:10-47:38 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
262 ' 49:10-49:81 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
263 ' 49:10-49:81 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
264 ' 51:10-51:82 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
265 ' 51:10-51:82 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
266 '',
267 '⚠ 30 warnings'
268 ].join('\n'),
269 'should report'
270 )
271 }, st.error)
272 })
274 t.test('should work on GitHub URLs when with package.json', function(st) {
275 st.plan(1)
277 /* `cwd` is moved to `test/fixtures`. */
278 fs.writeFileSync(
279 './package.json',
280 JSON.stringify({repository: 'wooorm/test'}, 0, 2)
281 )
283 function clean() {
284 fs.unlinkSync('./package.json')
285 }
287 execa(bin, [
288 '--no-config',
289 '--no-ignore',
290 '--use',
291 '../..',
292 'github.md',
293 'examples/github.md'
294 ]).then(
295 function(result) {
296 clean()
297 st.equal(
298 strip(result.stderr),
299 [
300 'examples/github.md',
301 ' 5:37-5:51 warning Link to unknown heading: `world` missing-heading remark-validate-links',
302 ' 15:34-15:93 warning Link to unknown file: `world.md` missing-file remark-validate-links',
303 ' 17:12-17:72 warning Link to unknown file: `world.md` missing-file remark-validate-links',
304 ' 19:10-19:29 warning Link to unknown file: `world.md` missing-file remark-validate-links',
305 ' 29:10-29:33 warning Link to unknown heading in `github.md`: `world` missing-heading-in-file remark-validate-links',
306 ' 31:10-31:73 warning Link to unknown heading in `github.md`: `world` missing-heading-in-file remark-validate-links',
307 ' 33:10-33:74 warning Link to unknown heading in `github.md`: `world` missing-heading-in-file remark-validate-links',
308 ' 35:10-35:32 warning Link to unknown file: `world.md` missing-file remark-validate-links',
309 ' 35:10-35:32 warning Link to unknown heading in `world.md`: `hello` missing-heading-in-file remark-validate-links',
310 ' 37:10-37:72 warning Link to unknown file: `world.md` missing-file remark-validate-links',
311 ' 37:10-37:72 warning Link to unknown heading in `world.md`: `hello` missing-heading-in-file remark-validate-links',
312 ' 39:10-39:73 warning Link to unknown file: `world.md` missing-file remark-validate-links',
313 ' 39:10-39:73 warning Link to unknown heading in `world.md`: `hello` missing-heading-in-file remark-validate-links',
314 '',
315 'github.md',
316 ' 5:37-5:51 warning Link to unknown heading: `world` missing-heading remark-validate-links',
317 ' 19:34-19:102 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
318 ' 21:12-21:81 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
319 ' 23:10-23:37 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
320 ' 25:10-25:35 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
321 ' 37:10-37:41 warning Link to unknown heading in `examples/github.md`: `world` missing-heading-in-file remark-validate-links',
322 ' 39:10-39:39 warning Link to unknown heading in `examples/github.md`: `world` missing-heading-in-file remark-validate-links',
323 ' 41:10-41:82 warning Link to unknown heading in `examples/github.md`: `world` missing-heading-in-file remark-validate-links',
324 ' 43:10-43:83 warning Link to unknown heading in `examples/github.md`: `world` missing-heading-in-file remark-validate-links',
325 ' 45:10-45:40 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
326 ' 45:10-45:40 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
327 ' 47:10-47:38 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
328 ' 47:10-47:38 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
329 ' 49:10-49:81 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
330 ' 49:10-49:81 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
331 ' 51:10-51:82 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
332 ' 51:10-51:82 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
333 '',
334 '⚠ 30 warnings'
335 ].join('\n'),
336 'should report'
337 )
338 },
339 function(err) {
340 clean()
341 st.error(err)
342 }
343 )
344 })
346 t.test('should support a GitLab shortcode', function(st) {
347 st.plan(1)
349 execa(bin, [
350 '--no-config',
351 '--no-ignore',
352 '--use',
353 '../..=repository:"gitlab:wooorm/test"',
354 'gitlab.md'
355 ]).then(function(result) {
356 st.equal(
357 strip(result.stderr),
358 [
359 'gitlab.md',
360 ' 5:37-5:51 warning Link to unknown heading: `world` missing-heading remark-validate-links',
361 ' 19:34-19:102 warning Link to unknown file: `examples/world.md`. Did you mean `examples/gitlab.md` missing-file remark-validate-links',
362 ' 21:12-21:81 warning Link to unknown file: `examples/world.md`. Did you mean `examples/gitlab.md` missing-file remark-validate-links',
363 ' 23:10-23:37 warning Link to unknown file: `examples/world.md`. Did you mean `examples/gitlab.md` missing-file remark-validate-links',
364 ' 25:10-25:35 warning Link to unknown file: `examples/world.md`. Did you mean `examples/gitlab.md` missing-file remark-validate-links',
365 ' 37:10-37:41 warning Link to unknown heading in `examples/gitlab.md`: `world` missing-heading-in-file remark-validate-links',
366 ' 39:10-39:39 warning Link to unknown heading in `examples/gitlab.md`: `world` missing-heading-in-file remark-validate-links',
367 ' 41:10-41:82 warning Link to unknown heading in `examples/gitlab.md`: `world` missing-heading-in-file remark-validate-links',
368 ' 43:10-43:83 warning Link to unknown heading in `examples/gitlab.md`: `world` missing-heading-in-file remark-validate-links',
369 ' 45:10-45:40 warning Link to unknown file: `examples/world.md`. Did you mean `examples/gitlab.md` missing-file remark-validate-links',
370 ' 45:10-45:40 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
371 ' 47:10-47:38 warning Link to unknown file: `examples/world.md`. Did you mean `examples/gitlab.md` missing-file remark-validate-links',
372 ' 47:10-47:38 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
373 ' 49:10-49:81 warning Link to unknown file: `examples/world.md`. Did you mean `examples/gitlab.md` missing-file remark-validate-links',
374 ' 49:10-49:81 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
375 ' 51:10-51:82 warning Link to unknown file: `examples/world.md`. Did you mean `examples/gitlab.md` missing-file remark-validate-links',
376 ' 51:10-51:82 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
377 '',
378 '⚠ 17 warnings'
379 ].join('\n'),
380 'should report'
381 )
382 }, st.error)
383 })
385 t.test('should support a Bitbucket shortcode', function(st) {
386 st.plan(1)
388 execa(bin, [
389 '--no-config',
390 '--no-ignore',
391 '--use',
392 '../..=repository:"bitbucket:wooorm/test"',
393 'bitbucket.md'
394 ]).then(function(result) {
395 st.equal(
396 strip(result.stderr),
397 [
398 'bitbucket.md',
399 ' 5:37-5:67 warning Link to unknown heading: `world` missing-heading remark-validate-links',
400 ' 19:34-19:104 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
401 ' 21:12-21:83 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
402 ' 23:10-23:37 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
403 ' 25:10-25:35 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
404 ' 37:10-37:60 warning Link to unknown heading in `examples/bitbucket.md`: `world` missing-heading-in-file remark-validate-links',
405 ' 39:10-39:58 warning Link to unknown heading in `examples/bitbucket.md`: `world` missing-heading-in-file remark-validate-links',
406 ' 41:10-41:103 warning Link to unknown heading in `examples/bitbucket.md`: `world` missing-heading-in-file remark-validate-links',
407 ' 43:10-43:104 warning Link to unknown heading in `examples/bitbucket.md`: `world` missing-heading-in-file remark-validate-links',
408 ' 45:10-45:56 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
409 ' 45:10-45:56 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
410 ' 47:10-47:54 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
411 ' 47:10-47:54 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
412 ' 49:10-49:99 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
413 ' 49:10-49:99 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
414 ' 51:10-51:100 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
415 ' 51:10-51:100 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
416 '',
417 '⚠ 17 warnings'
418 ].join('\n'),
419 'should report'
420 )
421 }, st.error)
422 })
424 t.test('should suggest similar links', function(st) {
425 st.plan(1)
427 execa(bin, [
428 '--no-config',
429 '--no-ignore',
430 '--use',
431 '../..',
432 'suggestions.md'
433 ]).then(function(result) {
434 st.equal(
435 strip(result.stderr),
436 [
437 'suggestions.md',
438 ' 3:22-3:37 warning Link to unknown heading: `helloo`. Did you mean `hello` missing-heading remark-validate-links',
439 ' 7:17-7:39 warning Link to unknown heading in `github.md`: `fiiiles`. Did you mean `files` missing-heading-in-file remark-validate-links',
440 '',
441 '⚠ 2 warnings'
442 ].join('\n'),
443 'should report'
444 )
445 }, st.error)
446 })
448 t.test('should recognize github links to particular lines', function(st) {
449 st.plan(1)
451 execa(bin, [
452 '--no-config',
453 '--no-ignore',
454 '--use',
455 '../..=repository:"wooorm/test"',
456 'line-links.md'
457 ]).then(function(result) {
458 st.equal(
459 strip(result.stderr),
460 [
461 'line-links.md',
462 ' 5:9-5:61 warning Link to unknown file: `examples/missing.js` missing-file remark-validate-links',
463 ' 9:1-9:71 warning Link to unknown file: `examples/missing.js` missing-file remark-validate-links',
464 '',
465 '⚠ 2 warnings'
466 ].join('\n'),
467 'should report'
468 )
469 }, st.error)
470 })
472 t.end()
473})