@@ -1,308 +1,1302 @@
2− * @author Titus Wormer
3− * @copyright 2015 Titus Wormer
5− * @module remark:validate-links:test
6− * @fileoverview Test suite for `remark-validate-links`.
9−'use strict';
1+'use strict'
12−var fs = require('fs');
13−var path = require('path');
14−var test = require('tape');
15−var execa = require('execa');
16−var remark = require('remark');
17−var strip = require('strip-ansi');
18−var links = require('..');
21−process.chdir(path.resolve(process.cwd(), 'test', 'fixtures'));
23−test.onFinish(function () {
3+var fs = require('fs')
4+var path = require('path')
5+var childProcess = require('child_process')
6+var test = require('tape')
7+var vfile = require('to-vfile')
8+var remark = require('remark')
9+var strip = require('strip-ansi')
10+var rimraf = require('rimraf')
11+var sort = require('./sort')
12+var links = require('..')
24− process.chdir(path.resolve(process.cwd(), '..', '..'));
14+process.chdir(path.resolve(process.cwd(), 'test', 'fixtures'))
27−var bin = path.join('..', '..', 'node_modules', '.bin', 'remark');
16+test.onFinish(function () {
17+ process.chdir(path.resolve(process.cwd(), '..', '..'))
29−var source = ' remark-validate-links remark-validate-links';
20+var bin = path.join('..', '..', 'node_modules', '.bin', 'remark')
32test('remark-validate-links', function (t) {
22test('remark-validate-links', function (t) {
23+ t.test('should work on the API', function (st) {
33− t.plan(8);
24+ st.plan(1)
35− t.throws(
26+ remark()
36− function () {
27+ .use(links)
37− remark().use(links);
28+ .use(sort)
38− },
29+ .process(vfile.readSync('github.md'), function (err, file) {
39− /Error: remark-validate-links only works on the CLI/,
30+ st.deepEqual(
40− 'should throw an error when not on the CLI'
31+ [err].concat(file.messages.map(String)),
34+ 'github.md:5:37-5:51: Link to unknown heading: `world`',
35+ 'github.md:27:10-27:37: Link to unknown file: `examples/world.md`',
36+ 'github.md:29:10-29:35: Link to unknown file: `examples/world.md`',
37+ 'github.md:49:10-49:40: Link to unknown file: `examples/world.md`',
38+ 'github.md:51:10-51:38: Link to unknown file: `examples/world.md`'
40+ 'should report messages'
43− t.test('should ignore unfound files', function (st) {
45+ t.test('should ignore invalid repositories', function (st) {
44− st.plan(2);
46+ st.plan(1)
46− execa.stderr(bin, [
48+ childProcess.exec(
47− '--no-config',
51+ '--no-config',
48− '--no-ignore',
52+ '--no-ignore',
50− '../../index',
54+ '"../..=repository:\\"invalid:shortcode\\""',
51− 'definitions.md',
55+ '--use',
52− 'FOOOO'
56+ '../sort',
53− ]).catch(function (err) {
57+ 'small.md'
54− st.equal(err.code, 1, 'should exit with `1`');
58+ ].join(' '),
62+ function onexec(err, stdout, stderr) {
56− strip(err.stderr),
64+ [err, strip(stderr)],
69+ ' 5:13-5:27 warning Link to unknown heading: `world` missing-heading remark-validate-links',
80+ t.test('should throw on Gist repositories', function (st) {
89+ '"../..=repository:\\"gist:wooorm/8504606\\""',
97+ function onexec(err, stdout, stderr) {
99+ [err, strip(stderr)],
104+ ' 5:13-5:27 warning Link to unknown heading: `world` missing-heading remark-validate-links',
115+ t.test('should ignore unfound files (#1)', function (st) {
132+ function onexec(err, stdout, stderr) {
134+ [/command failed/i.test(err), strip(stderr)],
139+ ' 1:1 error No such file or directory',
150+ t.test('should ignore unfound files (#2)', function (st) {
168+ function onexec(err, stdout, stderr) {
170+ [/command failed/i.test(err), strip(stderr)],
59− ' 1:1 error No such file or directory',
175+ ' 1:1 error No such file or directory',
61− 'definitions.md',
177+ 'definitions.md',
62− ' 5:12-5:21 warning Link to unknown heading: `world`' + source,
178+ ' 10:1-10:18 warning Link to unknown heading: `world` missing-heading remark-validate-links',
64− '2 messages (✖ 1 error, ⚠ 1 warning)',
180+ '2 messages (✖ 1 error, ⚠ 1 warning)',
189+ t.test('should work if there are no links', function (st) {
66− ].join('\n'),
202+ ].join(' '),
206+ function onexec(err, stdout, stderr) {
208+ [err, strip(stderr)],
209+ [null, 'empty.md: no issues found\n'],
67− 'should report'
210+ 'should work'
215+ t.test('should work with stdin', function (st) {
218+ var subprocess = childProcess.exec(
231+ fs.createReadStream('github.md').pipe(subprocess.stdin)
233+ function onexec(err, stdout, stderr) {
235+ [err, strip(stderr)],
240+ ' 5:37-5:51 warning Link to unknown heading: `world` missing-heading remark-validate-links',
72 t.test('should work when not all files are given', function (st) {
251 t.test('should work when not all files are given', function (st) {
73− st.plan(1);
252+ st.plan(1)
75− execa.stderr(bin, [
254+ childProcess.exec(
76− '--no-config',
257+ '--no-config',
77− '--no-ignore',
258+ '--no-ignore',
78− '--use',
259+ '--use',
79− '../../index',
260+ '../..',
80− 'example.md'
261+ '--use',
81− ]).then(function (stderr) {
268+ function onexec(err, stdout, stderr) {
82− st.equal(
269+ st.deepEqual(
83− strip(stderr),
270+ [err, strip(stderr)],
85− 'example.md',
272+ null,
86− ' 5:37-5:51 warning Link to unknown heading: `world` ' + source,
275+ ' 5:37-5:51 warning Link to unknown heading: `world` missing-heading remark-validate-links',
87− ' 23:10-23:37 warning Link to unknown file: `examples/world.md` ' + source,
276+ ' 27:10-27:37 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
88− ' 25:10-25:35 warning Link to unknown file: `examples/world.md` ' + source,
277+ ' 29:10-29:35 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
89− ' 37:10-37:42 warning Link to unknown heading in `examples/example.md`: `world`' + source,
278+ ' 41:10-41:41 warning Link to unknown heading in `examples/github.md`: `world` missing-heading-in-file remark-validate-links',
90− ' 39:10-39:40 warning Link to unknown heading in `examples/example.md`: `world`' + source,
279+ ' 43:10-43:39 warning Link to unknown heading in `examples/github.md`: `world` missing-heading-in-file remark-validate-links',
91− ' 45:10-45:40 warning Link to unknown file: `examples/world.md` ' + source,
280+ ' 49:10-49:40 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
92− ' 45:10-45:40 warning Link to unknown heading in `examples/world.md`: `hello` ' + source,
281+ ' 49:10-49:40 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
93− ' 47:10-47:38 warning Link to unknown file: `examples/world.md` ' + source,
282+ ' 51:10-51:38 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
94− ' 47:10-47:38 warning Link to unknown heading in `examples/world.md`: `hello` ' + source,
283+ ' 51:10-51:38 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
96− '⚠ 9 warnings'
285+ '⚠ 9 warnings',
97− ].join('\n'),
287+ ].join('\n')
98− 'should report'
289+ 'should work'
103 t.test('should work when all files are given', function (st) {
294 t.test('should work when all files are given', function (st) {
104− st.plan(1);
295+ st.plan(1)
106− execa.stderr(bin, [
297+ childProcess.exec(
107− '--no-config',
300+ '--no-config',
108− '--no-ignore',
301+ '--no-ignore',
109− '--use',
302+ '--use',
110− '../../index',
303+ '../..',
111− 'example.md',
304+ '--use',
112− 'examples/example.md'
307+ 'examples/github.md'
113− ]).then(function (stderr) {
312+ function onexec(err, stdout, stderr) {
114− st.equal(
313+ st.deepEqual(
115− strip(stderr),
314+ [err, strip(stderr)],
117− 'example.md',
316+ null,
318+ 'examples/github.md',
118− ' 5:37-5:51 warning Link to unknown heading: `world` ' + source,
319+ ' 5:37-5:51 warning Link to unknown heading: `world` missing-heading remark-validate-links',
119− ' 23:10-23:37 warning Link to unknown file: `examples/world.md` ' + source,
120− ' 25:10-25:35 warning Link to unknown file: `examples/world.md` ' + source,
320+ ' 19:10-19:29 warning Link to unknown file: `../world.md` missing-file remark-validate-links',
121− ' 37:10-37:42 warning Link to unknown heading in `examples/example.md`: `world`' + source,
321+ ' 29:10-29:33 warning Link to unknown heading in `../github.md`: `world` missing-heading-in-file remark-validate-links',
122− ' 39:10-39:40 warning Link to unknown heading in `examples/example.md`: `world`' + source,
123− ' 45:10-45:40 warning Link to unknown file: `examples/world.md` ' + source,
124− ' 45:10-45:40 warning Link to unknown heading in `examples/world.md`: `hello` ' + source,
125− ' 47:10-47:38 warning Link to unknown file: `examples/world.md` ' + source,
322+ ' 35:10-35:32 warning Link to unknown file: `../world.md` missing-file remark-validate-links',
126− ' 47:10-47:38 warning Link to unknown heading in `examples/world.md`: `hello` ' + source,
128− 'examples/example.md',
129− ' 5:37-5:51 warning Link to unknown heading: `world` ' + source,
130− ' 19:10-19:29 warning Link to unknown file: `world.md` ' + source,
131− ' 29:10-29:34 warning Link to unknown heading in `example.md`: `world` ' + source,
323+ ' 35:10-35:32 warning Link to unknown heading in `../world.md`: `hello` missing-heading-in-file remark-validate-links',
132− ' 35:10-35:32 warning Link to unknown file: `world.md` ' + source,
324+ '',
326+ ' 5:37-5:51 warning Link to unknown heading: `world` missing-heading remark-validate-links',
327+ ' 27:10-27:37 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
328+ ' 29:10-29:35 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
329+ ' 41:10-41:41 warning Link to unknown heading in `examples/github.md`: `world` missing-heading-in-file remark-validate-links',
330+ ' 43:10-43:39 warning Link to unknown heading in `examples/github.md`: `world` missing-heading-in-file remark-validate-links',
331+ ' 49:10-49:40 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
133− ' 35:10-35:32 warning Link to unknown heading in `world.md`: `hello` ' + source,
332+ ' 49:10-49:40 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
333+ ' 51:10-51:38 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
334+ ' 51:10-51:38 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
135− '⚠ 14 warnings'
336+ '⚠ 14 warnings',
136− ].join('\n'),
338+ ].join('\n')
137− 'should report'
340+ 'should work'
142 t.test('should work with definitions', function (st) {
345 t.test('should work with definitions', function (st) {
143− st.plan(1);
346+ st.plan(1)
145− execa.stderr(bin, [
348+ childProcess.exec(
146− '--no-config',
351+ '--no-config',
147− '--no-ignore',
352+ '--no-ignore',
148− '--use',
353+ '--use',
149− '../../index',
354+ '../..',
150− 'definitions.md'
357+ 'definitions.md'
151− ]).then(function (stderr) {
362+ function onexec(err, stdout, stderr) {
152− st.equal(
363+ st.deepEqual(
153− strip(stderr),
364+ [err, strip(stderr)],
155− 'definitions.md',
368+ 'definitions.md',
156− ' 5:12-5:21 warning Link to unknown heading: `world`' + source,
369+ ' 10:1-10:18 warning Link to unknown heading: `world` missing-heading remark-validate-links',
158− '⚠ 1 warning'
371+ '⚠ 1 warning',
159− ].join('\n'),
373+ ].join('\n')
160− 'should report'
375+ 'should work'
165 t.test('should work on GitHub URLs when given a repo', function (st) {
380 t.test('should work on GitHub URLs when given a repo', function (st) {
166− st.plan(1);
381+ st.plan(1)
168− execa.stderr(bin, [
383+ childProcess.exec(
169− '--no-config',
386+ '--no-config',
170− '--no-ignore',
387+ '--no-ignore',
171− '--use',
388+ '--use',
172− '../../index=repository:"wooorm/test"',
389+ '"../..=repository:\\"wooorm/test\\""',
173− 'example.md',
390+ '--use',
174− 'examples/example.md'
393+ 'examples/github.md'
175− ]).then(function (stderr) {
398+ function onexec(err, stdout, stderr) {
176− st.equal(
399+ st.deepEqual(
177− strip(stderr),
400+ [err, strip(stderr)],
179− 'example.md',
402+ null,
404+ 'examples/github.md',
180− ' 5:37-5:51 warning Link to unknown heading: `world` ' + source,
405+ ' 5:37-5:51 warning Link to unknown heading: `world` missing-heading remark-validate-links',
181− ' 19:34-19:102 warning Link to unknown file: `examples/world.md` ' + source,
406+ ' 15:34-15:91 warning Link to unknown file: `../world.md` missing-file remark-validate-links',
182− ' 21:12-21:81 warning Link to unknown file: `examples/world.md` ' + source,
407+ ' 17:12-17:72 warning Link to unknown file: `../world.md` missing-file remark-validate-links',
183− ' 23:10-23:37 warning Link to unknown file: `examples/world.md` ' + source,
408+ ' 19:10-19:29 warning Link to unknown file: `../world.md` missing-file remark-validate-links',
184− ' 25:10-25:35 warning Link to unknown file: `examples/world.md` ' + source,
185− ' 37:10-37:42 warning Link to unknown heading in `examples/example.md`: `world`' + source,
409+ ' 29:10-29:33 warning Link to unknown heading in `../github.md`: `world` missing-heading-in-file remark-validate-links',
186− ' 39:10-39:40 warning Link to unknown heading in `examples/example.md`: `world`' + source,
410+ ' 31:10-31:71 warning Link to unknown heading in `../github.md`: `world` missing-heading-in-file remark-validate-links',
187− ' 41:10-41:83 warning Link to unknown heading in `examples/example.md`: `world`' + source,
411+ ' 33:10-33:74 warning Link to unknown heading in `../github.md`: `world` missing-heading-in-file remark-validate-links',
188− ' 43:10-43:84 warning Link to unknown heading in `examples/example.md`: `world`' + source,
412+ ' 35:10-35:32 warning Link to unknown file: `../world.md` missing-file remark-validate-links',
189− ' 45:10-45:40 warning Link to unknown file: `examples/world.md` ' + source,
190− ' 45:10-45:40 warning Link to unknown heading in `examples/world.md`: `hello` ' + source,
413+ ' 35:10-35:32 warning Link to unknown heading in `../world.md`: `hello` missing-heading-in-file remark-validate-links',
191− ' 47:10-47:38 warning Link to unknown file: `examples/world.md` ' + source,
414+ ' 37:10-37:70 warning Link to unknown file: `../world.md` missing-file remark-validate-links',
192− ' 47:10-47:38 warning Link to unknown heading in `examples/world.md`: `hello` ' + source,
415+ ' 37:10-37:70 warning Link to unknown heading in `../world.md`: `hello` missing-heading-in-file remark-validate-links',
193− ' 49:10-49:81 warning Link to unknown file: `examples/world.md` ' + source,
416+ ' 39:10-39:73 warning Link to unknown file: `../world.md` missing-file remark-validate-links',
194− ' 49:10-49:81 warning Link to unknown heading in `examples/world.md`: `hello` ' + source,
417+ ' 39:10-39:73 warning Link to unknown heading in `../world.md`: `hello` missing-heading-in-file remark-validate-links',
195− ' 51:10-51:82 warning Link to unknown heading in `examples/world.md`: `hello` ' + source,
420+ ' 5:37-5:51 warning Link to unknown heading: `world` missing-heading remark-validate-links',
196− ' 51:10-51:82 warning Link to unknown file: `examples/world.md` ' + source,
421+ ' 21:34-21:100 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
197− '',
422+ ' 23:34-23:82 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
198− 'examples/example.md',
199− ' 5:37-5:51 warning Link to unknown heading: `world` ' + source,
423+ ' 25:12-25:81 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
200− ' 15:34-15:93 warning Link to unknown file: `world.md` ' + source,
424+ ' 27:10-27:37 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
201− ' 17:12-17:72 warning Link to unknown file: `world.md` ' + source,
425+ ' 29:10-29:35 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
202− ' 19:10-19:29 warning Link to unknown file: `world.md` ' + source,
426+ ' 41:10-41:41 warning Link to unknown heading in `examples/github.md`: `world` missing-heading-in-file remark-validate-links',
203− ' 29:10-29:34 warning Link to unknown heading in `example.md`: `world` ' + source,
427+ ' 43:10-43:39 warning Link to unknown heading in `examples/github.md`: `world` missing-heading-in-file remark-validate-links',
428+ ' 45:10-45:80 warning Link to unknown heading in `examples/github.md`: `world` missing-heading-in-file remark-validate-links',
204− ' 31:10-31:74 warning Link to unknown heading in `example.md`: `world` ' + source,
429+ ' 47:10-47:83 warning Link to unknown heading in `examples/github.md`: `world` missing-heading-in-file remark-validate-links',
430+ ' 49:10-49:40 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
205− ' 33:10-33:75 warning Link to unknown heading in `example.md`: `world` ' + source,
431+ ' 49:10-49:40 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
206− ' 35:10-35:32 warning Link to unknown file: `world.md` ' + source,
432+ ' 51:10-51:38 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
207− ' 35:10-35:32 warning Link to unknown heading in `world.md`: `hello` ' + source,
433+ ' 51:10-51:38 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
208− ' 37:10-37:72 warning Link to unknown file: `world.md` ' + source,
434+ ' 53:10-53:79 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
209− ' 37:10-37:72 warning Link to unknown heading in `world.md`: `hello` ' + source,
435+ ' 53:10-53:79 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
210− ' 39:10-39:73 warning Link to unknown heading in `world.md`: `hello` ' + source,
436+ ' 55:10-55:82 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
211− ' 39:10-39:73 warning Link to unknown file: `world.md` ' + source,
437+ ' 55:10-55:82 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
213− '⚠ 30 warnings'
439+ '⚠ 31 warnings',
214− ].join('\n'),
441+ ].join('\n')
215− 'should report'
443+ 'should work'
220− t.test('should work on GitHub URLs when with package.json', function (st) {
448+ t.test('should work when with Git directory', function (st) {
221− st.plan(1);
449+ st.plan(1)
223− /* cwd is moved to `test/fixtures`. */
451+ childProcess.exec('git init', oninit)
224− fs.writeFileSync('./package.json', JSON.stringify({
452+
225− repository: 'wooorm/test'
453+ function oninit(err) {
226− }, 0, 2));
454+ if (err) {
458+ 'git remote add origin git@github.com:wooorm/test.git',
464+ function onremote(err) {
479+ 'examples/github.md'
486+ function onexec(err, stdout, stderr) {
489+ [err, strip(stderr)],
493+ 'examples/github.md',
494+ ' 5:37-5:51 warning Link to unknown heading: `world` missing-heading remark-validate-links',
495+ ' 15:34-15:91 warning Link to unknown file: `../world.md` missing-file remark-validate-links',
496+ ' 17:12-17:72 warning Link to unknown file: `../world.md` missing-file remark-validate-links',
497+ ' 19:10-19:29 warning Link to unknown file: `../world.md` missing-file remark-validate-links',
498+ ' 29:10-29:33 warning Link to unknown heading in `../github.md`: `world` missing-heading-in-file remark-validate-links',
499+ ' 31:10-31:71 warning Link to unknown heading in `../github.md`: `world` missing-heading-in-file remark-validate-links',
500+ ' 33:10-33:74 warning Link to unknown heading in `../github.md`: `world` missing-heading-in-file remark-validate-links',
501+ ' 35:10-35:32 warning Link to unknown file: `../world.md` missing-file remark-validate-links',
502+ ' 35:10-35:32 warning Link to unknown heading in `../world.md`: `hello` missing-heading-in-file remark-validate-links',
503+ ' 37:10-37:70 warning Link to unknown file: `../world.md` missing-file remark-validate-links',
504+ ' 37:10-37:70 warning Link to unknown heading in `../world.md`: `hello` missing-heading-in-file remark-validate-links',
505+ ' 39:10-39:73 warning Link to unknown file: `../world.md` missing-file remark-validate-links',
506+ ' 39:10-39:73 warning Link to unknown heading in `../world.md`: `hello` missing-heading-in-file remark-validate-links',
509+ ' 5:37-5:51 warning Link to unknown heading: `world` missing-heading remark-validate-links',
510+ ' 21:34-21:100 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
511+ ' 23:34-23:82 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
512+ ' 25:12-25:81 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
513+ ' 27:10-27:37 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
514+ ' 29:10-29:35 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
515+ ' 41:10-41:41 warning Link to unknown heading in `examples/github.md`: `world` missing-heading-in-file remark-validate-links',
516+ ' 43:10-43:39 warning Link to unknown heading in `examples/github.md`: `world` missing-heading-in-file remark-validate-links',
517+ ' 45:10-45:80 warning Link to unknown heading in `examples/github.md`: `world` missing-heading-in-file remark-validate-links',
518+ ' 47:10-47:83 warning Link to unknown heading in `examples/github.md`: `world` missing-heading-in-file remark-validate-links',
519+ ' 49:10-49:40 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
520+ ' 49:10-49:40 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
521+ ' 51:10-51:38 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
522+ ' 51:10-51:38 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
523+ ' 53:10-53:79 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
524+ ' 53:10-53:79 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
525+ ' 55:10-55:82 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
526+ ' 55:10-55:82 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
228 function clean() {
536 function clean() {
229− fs.unlinkSync('./package.json');
537+ rimraf.sync('./.git')
232− execa.stderr(bin, [
540+
541+ t.test('should fail w/o Git repository', function (st) {
544+ fs.renameSync('../../.git', '../../.git.bak')
560+ function onexec(err) {
561+ fs.renameSync('../../.git.bak', '../../.git')
562+ st.ok(/not a git repository/i.test(err), 'should fail')
566+ t.test('should fail w/o Git repository w/o remote', function (st) {
569+ childProcess.exec('git init', oninit)
571+ function oninit(err) {
589+ function onexec(err) {
590+ rimraf.sync('./.git')
591+ st.ok(/Could not find remote origin/.test(err), 'should fail')
595+ t.test('should work w/o Git repository w/ repo', function (st) {
598+ fs.renameSync('../../.git', '../../.git.bak')
606+ '"../..=repository:\\"wooorm/test\\""',
614+ function onexec(err, stdout, stderr) {
615+ fs.renameSync('../../.git.bak', '../../.git')
617+ [err, strip(stderr)],
622+ ' 5:13-5:27 warning Link to unknown heading: `world` missing-heading remark-validate-links',
633+ t.test('should work w/o Git repository w/ remote', function (st) {
636+ fs.renameSync('../../.git', '../../.git.bak')
233− '--no-config',
641+ '--no-config',
234− '--no-ignore',
642+ '--no-ignore',
235− '--use',
643+ '--use',
236− '../..',
644+ '"../..=repository:{remote:\\"wooorm/test\\"}"',
237− 'example.md',
645+ 'small.md'
238− 'examples/example.md'
646+ ].join(' '),
239− ]).then(function (stderr) {
650+ function onexec(err, stdout, stderr) {
240− clean();
651+ fs.renameSync('../../.git.bak', '../../.git')
241− st.equal(
652+ st.deepEqual(
242− strip(stderr),
653+ [err, strip(stderr)],
244− 'example.md',
655+ null,
658+ ' 5:13-5:27 warning Link to unknown heading: `world` missing-heading remark-validate-links',
669+ t.test('should work w/o Git repository w/ remote and root', function (st) {
672+ fs.renameSync('../../.git', '../../.git.bak')
680+ '"../..=repository:\\"wooorm/test\\",root:\\"../\\""',
686+ function onexec(err, stdout, stderr) {
687+ fs.renameSync('../../.git.bak', '../../.git')
689+ [err, strip(stderr)],
694+ ' 5:13-5:27 warning Link to unknown heading: `world` missing-heading remark-validate-links',
705+ t.test('should work with `repository:false`', function (st) {
708+ fs.renameSync('../../.git', '../../.git.bak')
716+ '"../..=repository:false"',
720+ 'examples/github.md'
725+ function onexec(err, stdout, stderr) {
726+ fs.renameSync('../../.git.bak', '../../.git')
728+ [err, strip(stderr)],
732+ 'examples/github.md',
245− ' 5:37-5:51 warning Link to unknown heading: `world` ' + source,
733+ ' 5:37-5:51 warning Link to unknown heading: `world` missing-heading remark-validate-links',
734+ ' 19:10-19:29 warning Link to unknown file: `../world.md` missing-file remark-validate-links',
735+ ' 29:10-29:33 warning Link to unknown heading in `../github.md`: `world` missing-heading-in-file remark-validate-links',
736+ ' 35:10-35:32 warning Link to unknown file: `../world.md` missing-file remark-validate-links',
737+ ' 35:10-35:32 warning Link to unknown heading in `../world.md`: `hello` missing-heading-in-file remark-validate-links',
740+ ' 5:37-5:51 warning Link to unknown heading: `world` missing-heading remark-validate-links',
741+ ' 27:10-27:37 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
742+ ' 29:10-29:35 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
743+ ' 41:10-41:41 warning Link to unknown heading in `examples/github.md`: `world` missing-heading-in-file remark-validate-links',
744+ ' 43:10-43:39 warning Link to unknown heading in `examples/github.md`: `world` missing-heading-in-file remark-validate-links',
745+ ' 49:10-49:40 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
746+ ' 49:10-49:40 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
747+ ' 51:10-51:38 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
748+ ' 51:10-51:38 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
749+ ' 71:41-71:56 warning Link to unknown heading: `readme` missing-heading remark-validate-links',
760+ t.test('should work when finding non-hosted Git remotes', function (st) {
769+ '"../..=repository:\\"ssh://git@domain.com/user/project.git\\""',
777+ function onexec(err, stdout, stderr) {
779+ [err, strip(stderr)],
784+ ' 5:13-5:27 warning Link to unknown heading: `world` missing-heading remark-validate-links',
795+ t.test('should support a GitLab shortcode', function (st) {
804+ '"../..=repository:\\"gitlab:wooorm/test\\""',
812+ function onexec(err, stdout, stderr) {
814+ [err, strip(stderr)],
819+ ' 5:37-5:51 warning Link to unknown heading: `world` missing-heading remark-validate-links',
820+ ' 19:34-19:100 warning Link to unknown file: `examples/world.md`. Did you mean `examples/gitlab.md` missing-file remark-validate-links',
821+ ' 21:12-21:81 warning Link to unknown file: `examples/world.md`. Did you mean `examples/gitlab.md` missing-file remark-validate-links',
822+ ' 23:10-23:37 warning Link to unknown file: `examples/world.md`. Did you mean `examples/gitlab.md` missing-file remark-validate-links',
823+ ' 25:10-25:35 warning Link to unknown file: `examples/world.md`. Did you mean `examples/gitlab.md` missing-file remark-validate-links',
824+ ' 37:10-37:41 warning Link to unknown heading in `examples/gitlab.md`: `world` missing-heading-in-file remark-validate-links',
825+ ' 39:10-39:39 warning Link to unknown heading in `examples/gitlab.md`: `world` missing-heading-in-file remark-validate-links',
826+ ' 41:10-41:80 warning Link to unknown heading in `examples/gitlab.md`: `world` missing-heading-in-file remark-validate-links',
827+ ' 43:10-43:83 warning Link to unknown heading in `examples/gitlab.md`: `world` missing-heading-in-file remark-validate-links',
828+ ' 45:10-45:40 warning Link to unknown file: `examples/world.md`. Did you mean `examples/gitlab.md` missing-file remark-validate-links',
829+ ' 45:10-45:40 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
830+ ' 47:10-47:38 warning Link to unknown file: `examples/world.md`. Did you mean `examples/gitlab.md` missing-file remark-validate-links',
831+ ' 47:10-47:38 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
832+ ' 49:10-49:79 warning Link to unknown file: `examples/world.md`. Did you mean `examples/gitlab.md` missing-file remark-validate-links',
833+ ' 49:10-49:79 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
834+ ' 51:10-51:82 warning Link to unknown file: `examples/world.md`. Did you mean `examples/gitlab.md` missing-file remark-validate-links',
835+ ' 51:10-51:82 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
846+ t.test('should support a Bitbucket shortcode', function (st) {
855+ '"../..=repository:\\"bitbucket:wooorm/test\\""',
863+ function onexec(err, stdout, stderr) {
865+ [err, strip(stderr)],
870+ ' 5:37-5:67 warning Link to unknown heading: `world` missing-heading remark-validate-links',
246− ' 19:34-19:102 warning Link to unknown file: `examples/world.md` ' + source,
871+ ' 21:34-21:102 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
247− ' 21:12-21:81 warning Link to unknown file: `examples/world.md` ' + source,
872+ ' 23:12-23:83 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
248− ' 23:10-23:37 warning Link to unknown file: `examples/world.md` ' + source,
873+ ' 25:10-25:37 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
249− ' 25:10-25:35 warning Link to unknown file: `examples/world.md` ' + source,
874+ ' 27:10-27:35 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
250− ' 37:10-37:42 warning Link to unknown heading in `examples/example.md`: `world`' + source,
875+ ' 39:10-39:60 warning Link to unknown heading in `examples/bitbucket.md`: `world` missing-heading-in-file remark-validate-links',
251− ' 39:10-39:40 warning Link to unknown heading in `examples/example.md`: `world`' + source,
876+ ' 41:10-41:58 warning Link to unknown heading in `examples/bitbucket.md`: `world` missing-heading-in-file remark-validate-links',
252− ' 41:10-41:83 warning Link to unknown heading in `examples/example.md`: `world`' + source,
877+ ' 43:10-43:101 warning Link to unknown heading in `examples/bitbucket.md`: `world` missing-heading-in-file remark-validate-links',
253− ' 43:10-43:84 warning Link to unknown heading in `examples/example.md`: `world`' + source,
878+ ' 45:10-45:104 warning Link to unknown heading in `examples/bitbucket.md`: `world` missing-heading-in-file remark-validate-links',
254− ' 45:10-45:40 warning Link to unknown file: `examples/world.md` ' + source,
879+ ' 47:10-47:56 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
255− ' 45:10-45:40 warning Link to unknown heading in `examples/world.md`: `hello` ' + source,
880+ ' 47:10-47:56 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
256− ' 47:10-47:38 warning Link to unknown file: `examples/world.md` ' + source,
881+ ' 49:10-49:54 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
257− ' 47:10-47:38 warning Link to unknown heading in `examples/world.md`: `hello` ' + source,
258− ' 49:10-49:81 warning Link to unknown file: `examples/world.md` ' + source,
259− ' 49:10-49:81 warning Link to unknown heading in `examples/world.md`: `hello` ' + source,
260− ' 51:10-51:82 warning Link to unknown heading in `examples/world.md`: `hello` ' + source,
261− ' 51:10-51:82 warning Link to unknown file: `examples/world.md` ' + source,
263− 'examples/example.md',
264− ' 5:37-5:51 warning Link to unknown heading: `world` ' + source,
265− ' 15:34-15:93 warning Link to unknown file: `world.md` ' + source,
266− ' 17:12-17:72 warning Link to unknown file: `world.md` ' + source,
267− ' 19:10-19:29 warning Link to unknown file: `world.md` ' + source,
268− ' 29:10-29:34 warning Link to unknown heading in `example.md`: `world` ' + source,
269− ' 31:10-31:74 warning Link to unknown heading in `example.md`: `world` ' + source,
270− ' 33:10-33:75 warning Link to unknown heading in `example.md`: `world` ' + source,
882+ ' 49:10-49:54 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
271− ' 35:10-35:32 warning Link to unknown file: `world.md` ' + source,
883+ ' 51:10-51:97 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
272− ' 35:10-35:32 warning Link to unknown heading in `world.md`: `hello` ' + source,
884+ ' 51:10-51:97 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
273− ' 37:10-37:72 warning Link to unknown file: `world.md` ' + source,
885+ ' 53:10-53:100 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
274− ' 37:10-37:72 warning Link to unknown heading in `world.md`: `hello` ' + source,
886+ ' 53:10-53:100 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
275− ' 39:10-39:73 warning Link to unknown heading in `world.md`: `hello` ' + source,
276− ' 39:10-39:73 warning Link to unknown file: `world.md` ' + source,
278− '⚠ 30 warnings'
888+ '⚠ 17 warnings',
279− ].join('\n'),
890+ ].join('\n')
280− 'should report'
892+ 'should work'
285 t.test('should suggest similar links', function (st) {
897 t.test('should suggest similar links', function (st) {
286− st.plan(1);
898+ st.plan(1)
288− execa.stderr(bin, [
900+ childProcess.exec(
914+ function onexec(err, stdout, stderr) {
916+ [err, strip(stderr)],
921+ ' 3:22-3:37 warning Link to unknown heading: `helloo`. Did you mean `hello` missing-heading remark-validate-links',
922+ ' 7:17-7:39 warning Link to unknown heading in `github.md`: `fiiiles`. Did you mean `files` missing-heading-in-file remark-validate-links',
933+ t.test('should recognise links to particular lines', function (st) {
942+ '"../..=repository:\\"wooorm/test\\""',
950+ function onexec(err, stdout, stderr) {
952+ [err, strip(stderr)],
957+ ' 5:9-5:61 warning Link to unknown file: `examples/missing.js` missing-file remark-validate-links',
958+ ' 9:1-9:69 warning Link to unknown file: `examples/missing.js` missing-file remark-validate-links',
969+ t.test('should recognise links with encoded URLs', function (st) {
978+ '"../..=repository:\\"wooorm/test\\""',
981+ 'weird-characters.md'
986+ function onexec(err, stdout, stderr) {
988+ [err, strip(stderr)],
992+ 'weird-characters.md',
993+ ' 11:17-11:87 warning Link to unknown file: `examples/missing#characters.md`. Did you mean `examples/weird#characters.md` missing-file remark-validate-links',
994+ ' 13:17-13:93 warning Link to unknown file: `examples/missing#character/readme.md`. Did you mean `examples/weird#character/readme.md` missing-file remark-validate-links',
995+ ' 15:17-15:114 warning Link to unknown heading in `examples/weird#characters.md`: `world` missing-heading-in-file remark-validate-links',
996+ ' 17:17-17:120 warning Link to unknown heading in `examples/weird#character/readme.md`: `world` missing-heading-in-file remark-validate-links',
1007+ t.test('should support folders', function (st) {
289− '--no-config',
1013+ '--no-config',
290− '--no-ignore',
1014+ '--no-ignore',
291− '--use',
1015+ '--use',
292− '../../index',
1016+ '"../..=repository:\\"wooorm/test\\""',
293− 'suggestions.md'
1017+ '--use',
294− ]).then(function (stderr) {
1024+ function onexec(err, stdout, stderr) {
295− st.equal(
1025+ st.deepEqual(
296− strip(stderr),
1026+ [err, strip(stderr)],
298− 'suggestions.md',
1028+ null,
299− ' 3:22-3:37 warning Link to unknown heading: `helloo`. Did you mean `hello` ' + source,
1029+ [
300− ' 7:17-7:40 warning Link to unknown heading in `example.md`: `fiiiles`. Did you mean `files`' + source,
1030+ 'folder.md',
1031+ ' 9:1-9:40 warning Link to unknown heading in `folder/readme.markdown`: `missing` missing-heading-in-file remark-validate-links',
1032+ ' 17:1-17:24 warning Link to unknown heading in `folder`: `missing` missing-heading-in-file remark-validate-links',
1033+ ' 21:1-21:25 warning Link to unknown file: `missing` missing-file remark-validate-links',
1034+ ' 21:1-21:25 warning Link to unknown heading in `missing`: `missing` missing-heading-in-file remark-validate-links',
1035+ ' 23:1-23:39 warning Link to unknown heading in `folder-without-readme`: `missing` missing-heading-in-file remark-validate-links',
1046+ t.test('should warn on files as folders', function (st) {
1058+ 'file-as-folder.md'
1063+ function onexec(err, stdout, stderr) {
1065+ [err, strip(stderr)],
1069+ 'file-as-folder.md',
1070+ ' 1:1-1:28 warning Link to unknown file: `file-as-folder.md/other`. Did you mean `file-as-folder.md` missing-file remark-validate-links',
1081+ t.test('should check images', function (st) {
1090+ '"../..=repository:\\"wooorm/test\\""',
1098+ function onexec(err, stdout, stderr) {
1100+ [err, strip(stderr)],
1105+ ' 19:10-19:50 warning Link to unknown file: `examples/missing.jpg`. Did you mean `examples/image.jpg` missing-file remark-validate-links',
1106+ ' 21:12-21:42 warning Link to unknown file: `examples/missing.jpg`. Did you mean `examples/image.jpg` missing-file remark-validate-links',
1107+ ' 23:10-23:89 warning Link to unknown file: `examples/missing.jpg`. Did you mean `examples/image.jpg` missing-file remark-validate-links',
1108+ ' 35:1-35:38 warning Link to unknown file: `examples/missing.jpg`. Did you mean `examples/image.jpg` missing-file remark-validate-links',
1109+ ' 37:1-37:77 warning Link to unknown file: `examples/missing.jpg`. Did you mean `examples/image.jpg` missing-file remark-validate-links',
1120+ t.test('should support query parameters', function (st) {
1129+ '"../..=repository:\\"wooorm/test\\""',
1137+ function onexec(err, stdout, stderr) {
1139+ [err, strip(stderr)],
1144+ ' 9:33-9:55 warning Link to unknown heading: `query-params?`. Did you mean `query-params` missing-heading remark-validate-links',
1155+ t.test('should support case insensitive headings', function (st) {
1167+ 'case-insensitive-headings.md'
1172+ function onexec(err, stdout, stderr) {
1174+ [err, strip(stderr)],
1178+ 'case-insensitive-headings.md',
1179+ ' 5:13-5:27 warning Link to unknown heading: `world` missing-heading remark-validate-links',
1180+ ' 9:16-9:48 warning Link to unknown heading in `examples/github.md`: `world` missing-heading-in-file remark-validate-links',
302− '⚠ 2 warnings'
1182+ '⚠ 2 warnings',
1191+ t.test('should ignore external links', function (st) {
1200+ '"../..=repository:\\"wooorm/test\\""',
303− ].join('\n'),
1204+ ].join(' '),
1208+ function onexec(err, stdout, stderr) {
1210+ [err, strip(stderr)],
1211+ [null, 'external.md: no issues found\n'],
1217+ t.test('should ignore external links (without repo)', function (st) {
1226+ '../..=repository:false',
1234+ function onexec(err, stdout, stderr) {
1236+ [err, strip(stderr)],
1237+ [null, 'external.md: no issues found\n'],
304− 'should report'
1238+ 'should work'
1243+ t.test('should support self-hosted Git solutions', function (st) {
1246+ childProcess.exec('git init', oninit)
1248+ function oninit(err) {
1253+ 'git remote add origin git@gitlab.acme.company:acme/project.git',
1259+ function onremote(err) {
1270+ '"../..=urlConfig:{hostname:\\"gitlab.acme.com\\",prefix:\\"/acme/project/blob/\\",headingPrefix:\\"#\\",lines:true}"',
1278+ function onexec(err, stdout, stderr) {
1281+ [err, strip(stderr)],
1286+ ' 5:1-5:80 warning Link to unknown heading: `world` missing-heading remark-validate-links',
1297+ rimraf.sync('./.git')