@@ -2,8 +2,8 @@
22
33var fs = require('fs')
44var path = require('path')
5+var childProcess = require('child_process')
56var test = require('tape')
6−var execa = require('execa')
77var vfile = require('to-vfile')
88var remark = require('remark')
99var strip = require('strip-ansi')
@@ -45,112 +45,131 @@ test('remark-validate-links', function(t) {
4545 t.test('should ignore invalid repositories', function(st) {
4646 st.plan(1)
4747
48− execa(bin, [
49− '--no-config',
50− '--no-ignore',
51− '--use',
52− '../..=repository:"invalid:shortcode"',
53− '--use',
54− '../sort',
55− 'small.md'
56− ]).then(
57− function(result) {
58− st.equal(
59− strip(result.stderr),
48+ childProcess.exec(
49+ [
50+ bin,
51+ '--no-config',
52+ '--no-ignore',
53+ '--use',
54+ '"../..=repository:\\"invalid:shortcode\\""',
55+ '--use',
56+ '../sort',
57+ 'small.md'
58+ ].join(' '),
59+ onexec
60+ )
61+
62+ function onexec(err, stdout, stderr) {
63+ st.deepEqual(
64+ [err, strip(stderr)],
65+ [
66+ null,
6067 [
6168 'small.md',
6269 ' 5:13-5:27 warning Link to unknown heading: `world` missing-heading remark-validate-links',
6370 '',
64− '⚠ 1 warning'
65− ].join('\n'),
66− 'should work'
67− )
68− },
69− function(err) {
70− st.error(err)
71− }
72− )
71+ '⚠ 1 warning',
72+ ''
73+ ].join('\n')
74+ ],
75+ 'should work'
76+ )
77+ }
7378 })
7479
7580 t.test('should throw on Gist repositories', function(st) {
7681 st.plan(1)
7782
78− execa(bin, [
79− '--no-config',
80− '--no-ignore',
81− '--use',
82− '../..=repository:"gist:wooorm/8504606"',
83− '--use',
84− '../sort',
85− 'small.md'
86− ]).then(
87− function(result) {
88− st.equal(
89− strip(result.stderr),
83+ childProcess.exec(
84+ [
85+ bin,
86+ '--no-config',
87+ '--no-ignore',
88+ '--use',
89+ '"../..=repository:\\"gist:wooorm/8504606\\""',
90+ '--use',
91+ '../sort',
92+ 'small.md'
93+ ].join(' '),
94+ onexec
95+ )
96+
97+ function onexec(err, stdout, stderr) {
98+ st.deepEqual(
99+ [err, strip(stderr)],
100+ [
101+ null,
90102 [
91103 'small.md',
92104 ' 5:13-5:27 warning Link to unknown heading: `world` missing-heading remark-validate-links',
93105 '',
94− '⚠ 1 warning'
95− ].join('\n'),
96− 'should work'
97− )
98− },
99− function(err) {
100− st.error(err, 'should not fail')
101− }
102− )
106+ '⚠ 1 warning',
107+ ''
108+ ].join('\n')
109+ ],
110+ 'should work'
111+ )
112+ }
103113 })
104114
105115 t.test('should ignore unfound files (#1)', function(st) {
106116 st.plan(1)
107117
108− execa(bin, [
109− '--no-config',
110− '--no-ignore',
111− '--use',
112− '../..',
113− '--use',
114− '../sort',
115− 'FOOOO'
116− ]).then(
117− function() {
118− st.fail('should not be successful')
119− },
120− function(err) {
121− st.equal(
122− strip(err.stderr),
118+ childProcess.exec(
119+ [
120+ bin,
121+ '--no-config',
122+ '--no-ignore',
123+ '--use',
124+ '../..',
125+ '--use',
126+ '../sort',
127+ 'FOOOO'
128+ ].join(' '),
129+ onexec
130+ )
131+
132+ function onexec(err, stdout, stderr) {
133+ st.deepEqual(
134+ [/command failed/i.test(err), strip(stderr)],
135+ [
136+ true,
123137 [
124138 'FOOOO',
125139 ' 1:1 error No such file or directory',
126140 '',
127− '✖ 1 error'
128− ].join('\n'),
129− 'should report an error'
130− )
131− }
132− )
141+ '✖ 1 error',
142+ ''
143+ ].join('\n')
144+ ],
145+ 'should work'
146+ )
147+ }
133148 })
134149
135150 t.test('should ignore unfound files (#2)', function(st) {
136151 st.plan(1)
137152
138− execa(bin, [
139− '--no-config',
140− '--no-ignore',
141− '--use',
142− '../..',
143− '--use',
144− '../sort',
145− 'definitions.md',
146− 'FOOOO'
147− ]).then(
148− function() {
149− st.fail('should not be successful')
150− },
151− function(err) {
152− st.equal(
153− strip(err.stderr),
153+ childProcess.exec(
154+ [
155+ bin,
156+ '--no-config',
157+ '--no-ignore',
158+ '--use',
159+ '../..',
160+ '--use',
161+ '../sort',
162+ 'definitions.md',
163+ 'FOOOO'
164+ ].join(' '),
165+ onexec
166+ )
167+
168+ function onexec(err, stdout, stderr) {
169+ st.deepEqual(
170+ [/command failed/i.test(err), strip(stderr)],
171+ [
172+ true,
154173 [
155174 'FOOOO',
156175 ' 1:1 error No such file or directory',
@@ -158,297 +177,361 @@ test('remark-validate-links', function(t) {
158177 'definitions.md',
159178 ' 10:1-10:18 warning Link to unknown heading: `world` missing-heading remark-validate-links',
160179 '',
161− '2 messages (✖ 1 error, ⚠ 1 warning)'
162− ].join('\n'),
163− 'should report an error'
164− )
165− }
166− )
180+ '2 messages (✖ 1 error, ⚠ 1 warning)',
181+ ''
182+ ].join('\n')
183+ ],
184+ 'should work'
185+ )
186+ }
167187 })
168188
169189 t.test('should work if there are no links', function(st) {
170190 st.plan(1)
171191
172− execa(bin, [
173− '--no-config',
174− '--no-ignore',
175− '--use',
176− '../..',
177− '--use',
178− '../sort',
179− 'empty.md'
180− ]).then(function(result) {
181− st.equal(
182− strip(result.stderr),
183− 'empty.md: no issues found',
184− 'should report'
192+ childProcess.exec(
193+ [
194+ bin,
195+ '--no-config',
196+ '--no-ignore',
197+ '--use',
198+ '../..',
199+ '--use',
200+ '../sort',
201+ 'empty.md'
202+ ].join(' '),
203+ onexec
204+ )
205+
206+ function onexec(err, stdout, stderr) {
207+ st.deepEqual(
208+ [err, strip(stderr)],
209+ [null, 'empty.md: no issues found\n'],
210+ 'should work'
185211 )
186− }, st.error)
212+ }
187213 })
188214
189215 t.test('should work with stdin', function(st) {
190216 st.plan(1)
191217
192− var subprocess = execa(bin, [
193− '--no-config',
194− '--no-ignore',
195− '--use',
196− '../..',
197− '--use',
198− '../sort'
199− ])
218+ var subprocess = childProcess.exec(
219+ [
220+ bin,
221+ '--no-config',
222+ '--no-ignore',
223+ '--use',
224+ '../..',
225+ '--use',
226+ '../sort'
227+ ].join(' '),
228+ onexec
229+ )
200230
201231 fs.createReadStream('github.md').pipe(subprocess.stdin)
202232
203− subprocess.then(function(result) {
204− st.equal(
205− strip(result.stderr),
233+ function onexec(err, stdout, stderr) {
234+ st.deepEqual(
235+ [err, strip(stderr)],
206236 [
207− '<stdin>',
208− ' 5:37-5:51 warning Link to unknown heading: `world` missing-heading remark-validate-links',
209− '',
210− '⚠ 1 warning'
211− ].join('\n'),
212− 'should report an error'
237+ null,
238+ [
239+ '<stdin>',
240+ ' 5:37-5:51 warning Link to unknown heading: `world` missing-heading remark-validate-links',
241+ '',
242+ '⚠ 1 warning',
243+ ''
244+ ].join('\n')
245+ ],
246+ 'should work'
213247 )
214− }, st.error)
248+ }
215249 })
216250
217251 t.test('should work when not all files are given', function(st) {
218252 st.plan(1)
219253
220− execa(bin, [
221− '--no-config',
222− '--no-ignore',
223− '--use',
224− '../..',
225− '--use',
226− '../sort',
227− 'github.md'
228− ]).then(function(result) {
229− st.equal(
230− strip(result.stderr),
254+ childProcess.exec(
255+ [
256+ bin,
257+ '--no-config',
258+ '--no-ignore',
259+ '--use',
260+ '../..',
261+ '--use',
262+ '../sort',
263+ 'github.md'
264+ ].join(' '),
265+ onexec
266+ )
267+
268+ function onexec(err, stdout, stderr) {
269+ st.deepEqual(
270+ [err, strip(stderr)],
231271 [
232− 'github.md',
233− ' 5:37-5:51 warning Link to unknown heading: `world` missing-heading remark-validate-links',
234− ' 27:10-27:37 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
235− ' 29:10-29:35 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
236− ' 41:10-41:41 warning Link to unknown heading in `examples/github.md`: `world` missing-heading-in-file remark-validate-links',
237− ' 43:10-43:39 warning Link to unknown heading in `examples/github.md`: `world` missing-heading-in-file remark-validate-links',
238− ' 49:10-49:40 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
239− ' 49:10-49:40 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
240− ' 51:10-51:38 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
241− ' 51:10-51:38 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
242− '',
243− '⚠ 9 warnings'
244− ].join('\n'),
245− 'should report'
272+ null,
273+ [
274+ 'github.md',
275+ ' 5:37-5:51 warning Link to unknown heading: `world` missing-heading remark-validate-links',
276+ ' 27:10-27:37 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
277+ ' 29:10-29:35 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
278+ ' 41:10-41:41 warning Link to unknown heading in `examples/github.md`: `world` missing-heading-in-file remark-validate-links',
279+ ' 43:10-43:39 warning Link to unknown heading in `examples/github.md`: `world` missing-heading-in-file remark-validate-links',
280+ ' 49:10-49:40 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
281+ ' 49:10-49:40 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
282+ ' 51:10-51:38 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
283+ ' 51:10-51:38 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
284+ '',
285+ '⚠ 9 warnings',
286+ ''
287+ ].join('\n')
288+ ],
289+ 'should work'
246290 )
247− }, st.error)
291+ }
248292 })
249293
250294 t.test('should work when all files are given', function(st) {
251295 st.plan(1)
252296
253− execa(bin, [
254− '--no-config',
255− '--no-ignore',
256− '--use',
257− '../..',
258− '--use',
259− '../sort',
260− 'github.md',
261− 'examples/github.md'
262− ]).then(function(result) {
263− st.equal(
264− strip(result.stderr),
297+ childProcess.exec(
298+ [
299+ bin,
300+ '--no-config',
301+ '--no-ignore',
302+ '--use',
303+ '../..',
304+ '--use',
305+ '../sort',
306+ 'github.md',
307+ 'examples/github.md'
308+ ].join(' '),
309+ onexec
310+ )
311+
312+ function onexec(err, stdout, stderr) {
313+ st.deepEqual(
314+ [err, strip(stderr)],
265315 [
266− 'examples/github.md',
267− ' 5:37-5:51 warning Link to unknown heading: `world` missing-heading remark-validate-links',
268− ' 19:10-19:29 warning Link to unknown file: `../world.md` missing-file remark-validate-links',
269− ' 29:10-29:33 warning Link to unknown heading in `../github.md`: `world` missing-heading-in-file remark-validate-links',
270− ' 35:10-35:32 warning Link to unknown file: `../world.md` missing-file remark-validate-links',
271− ' 35:10-35:32 warning Link to unknown heading in `../world.md`: `hello` missing-heading-in-file remark-validate-links',
272− '',
273− 'github.md',
274− ' 5:37-5:51 warning Link to unknown heading: `world` missing-heading remark-validate-links',
275− ' 27:10-27:37 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
276− ' 29:10-29:35 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
277− ' 41:10-41:41 warning Link to unknown heading in `examples/github.md`: `world` missing-heading-in-file remark-validate-links',
278− ' 43:10-43:39 warning Link to unknown heading in `examples/github.md`: `world` missing-heading-in-file remark-validate-links',
279− ' 49:10-49:40 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
280− ' 49:10-49:40 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
281− ' 51:10-51:38 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
282− ' 51:10-51:38 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
283− '',
284− '⚠ 14 warnings'
285− ].join('\n'),
286− 'should report'
316+ null,
317+ [
318+ 'examples/github.md',
319+ ' 5:37-5:51 warning Link to unknown heading: `world` missing-heading remark-validate-links',
320+ ' 19:10-19:29 warning Link to unknown file: `../world.md` missing-file remark-validate-links',
321+ ' 29:10-29:33 warning Link to unknown heading in `../github.md`: `world` missing-heading-in-file remark-validate-links',
322+ ' 35:10-35:32 warning Link to unknown file: `../world.md` missing-file remark-validate-links',
323+ ' 35:10-35:32 warning Link to unknown heading in `../world.md`: `hello` missing-heading-in-file remark-validate-links',
324+ '',
325+ 'github.md',
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',
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',
335+ '',
336+ '⚠ 14 warnings',
337+ ''
338+ ].join('\n')
339+ ],
340+ 'should work'
287341 )
288− }, st.error)
342+ }
289343 })
290344
291345 t.test('should work with definitions', function(st) {
292346 st.plan(1)
293347
294− execa(bin, [
295− '--no-config',
296− '--no-ignore',
297− '--use',
298− '../..',
299− '--use',
300− '../sort',
301− 'definitions.md'
302− ]).then(function(result) {
303− st.equal(
304− strip(result.stderr),
348+ childProcess.exec(
349+ [
350+ bin,
351+ '--no-config',
352+ '--no-ignore',
353+ '--use',
354+ '../..',
355+ '--use',
356+ '../sort',
357+ 'definitions.md'
358+ ].join(' '),
359+ onexec
360+ )
361+
362+ function onexec(err, stdout, stderr) {
363+ st.deepEqual(
364+ [err, strip(stderr)],
305365 [
306− 'definitions.md',
307− ' 10:1-10:18 warning Link to unknown heading: `world` missing-heading remark-validate-links',
308− '',
309− '⚠ 1 warning'
310− ].join('\n'),
311− 'should report'
366+ null,
367+ [
368+ 'definitions.md',
369+ ' 10:1-10:18 warning Link to unknown heading: `world` missing-heading remark-validate-links',
370+ '',
371+ '⚠ 1 warning',
372+ ''
373+ ].join('\n')
374+ ],
375+ 'should work'
312376 )
313− }, st.error)
377+ }
314378 })
315379
316380 t.test('should work on GitHub URLs when given a repo', function(st) {
317381 st.plan(1)
318382
319− execa(bin, [
320− '--no-config',
321− '--no-ignore',
322− '--use',
323− '../..=repository:"wooorm/test"',
324− '--use',
325− '../sort',
326− 'github.md',
327− 'examples/github.md'
328− ]).then(function(result) {
329− st.equal(
330− strip(result.stderr),
383+ childProcess.exec(
384+ [
385+ bin,
386+ '--no-config',
387+ '--no-ignore',
388+ '--use',
389+ '"../..=repository:\\"wooorm/test\\""',
390+ '--use',
391+ '../sort',
392+ 'github.md',
393+ 'examples/github.md'
394+ ].join(' '),
395+ onexec
396+ )
397+
398+ function onexec(err, stdout, stderr) {
399+ st.deepEqual(
400+ [err, strip(stderr)],
331401 [
332− 'examples/github.md',
333− ' 5:37-5:51 warning Link to unknown heading: `world` missing-heading remark-validate-links',
334− ' 15:34-15:93 warning Link to unknown file: `../world.md` missing-file remark-validate-links',
335− ' 17:12-17:72 warning Link to unknown file: `../world.md` missing-file remark-validate-links',
336− ' 19:10-19:29 warning Link to unknown file: `../world.md` missing-file remark-validate-links',
337− ' 29:10-29:33 warning Link to unknown heading in `../github.md`: `world` missing-heading-in-file remark-validate-links',
338− ' 31:10-31:73 warning Link to unknown heading in `../github.md`: `world` missing-heading-in-file remark-validate-links',
339− ' 33:10-33:74 warning Link to unknown heading in `../github.md`: `world` missing-heading-in-file remark-validate-links',
340− ' 35:10-35:32 warning Link to unknown file: `../world.md` missing-file remark-validate-links',
341− ' 35:10-35:32 warning Link to unknown heading in `../world.md`: `hello` missing-heading-in-file remark-validate-links',
342− ' 37:10-37:72 warning Link to unknown file: `../world.md` missing-file remark-validate-links',
343− ' 37:10-37:72 warning Link to unknown heading in `../world.md`: `hello` missing-heading-in-file remark-validate-links',
344− ' 39:10-39:73 warning Link to unknown file: `../world.md` missing-file remark-validate-links',
345− ' 39:10-39:73 warning Link to unknown heading in `../world.md`: `hello` missing-heading-in-file remark-validate-links',
346− '',
347− 'github.md',
348− ' 5:37-5:51 warning Link to unknown heading: `world` missing-heading remark-validate-links',
349− ' 21:34-21:102 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
350− ' 23:34-23:84 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
351− ' 25:12-25:81 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
352− ' 27:10-27:37 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
353− ' 29:10-29:35 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
354− ' 41:10-41:41 warning Link to unknown heading in `examples/github.md`: `world` missing-heading-in-file remark-validate-links',
355− ' 43:10-43:39 warning Link to unknown heading in `examples/github.md`: `world` missing-heading-in-file remark-validate-links',
356− ' 45:10-45:82 warning Link to unknown heading in `examples/github.md`: `world` missing-heading-in-file remark-validate-links',
357− ' 47:10-47:83 warning Link to unknown heading in `examples/github.md`: `world` missing-heading-in-file remark-validate-links',
358− ' 49:10-49:40 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
359− ' 49:10-49:40 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
360− ' 51:10-51:38 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
361− ' 51:10-51:38 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
362− ' 53:10-53:81 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
363− ' 53:10-53:81 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
364− ' 55:10-55:82 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
365− ' 55:10-55:82 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
366− '',
367− '⚠ 31 warnings'
368− ].join('\n'),
369− 'should report'
402+ null,
403+ [
404+ 'examples/github.md',
405+ ' 5:37-5:51 warning Link to unknown heading: `world` missing-heading remark-validate-links',
406+ ' 15:34-15:93 warning Link to unknown file: `../world.md` missing-file remark-validate-links',
407+ ' 17:12-17:72 warning Link to unknown file: `../world.md` missing-file remark-validate-links',
408+ ' 19:10-19:29 warning Link to unknown file: `../world.md` missing-file remark-validate-links',
409+ ' 29:10-29:33 warning Link to unknown heading in `../github.md`: `world` missing-heading-in-file remark-validate-links',
410+ ' 31:10-31:73 warning Link to unknown heading in `../github.md`: `world` missing-heading-in-file remark-validate-links',
411+ ' 33:10-33:74 warning Link to unknown heading in `../github.md`: `world` missing-heading-in-file remark-validate-links',
412+ ' 35:10-35:32 warning Link to unknown file: `../world.md` missing-file remark-validate-links',
413+ ' 35:10-35:32 warning Link to unknown heading in `../world.md`: `hello` missing-heading-in-file remark-validate-links',
414+ ' 37:10-37:72 warning Link to unknown file: `../world.md` missing-file remark-validate-links',
415+ ' 37:10-37:72 warning Link to unknown heading in `../world.md`: `hello` missing-heading-in-file remark-validate-links',
416+ ' 39:10-39:73 warning Link to unknown file: `../world.md` missing-file remark-validate-links',
417+ ' 39:10-39:73 warning Link to unknown heading in `../world.md`: `hello` missing-heading-in-file remark-validate-links',
418+ '',
419+ 'github.md',
420+ ' 5:37-5:51 warning Link to unknown heading: `world` missing-heading remark-validate-links',
421+ ' 21:34-21:102 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
422+ ' 23:34-23:84 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
423+ ' 25:12-25:81 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
424+ ' 27:10-27:37 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
425+ ' 29:10-29:35 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
426+ ' 41:10-41:41 warning Link to unknown heading in `examples/github.md`: `world` missing-heading-in-file remark-validate-links',
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:82 warning Link to unknown heading in `examples/github.md`: `world` missing-heading-in-file remark-validate-links',
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',
431+ ' 49:10-49:40 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
432+ ' 51:10-51:38 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
433+ ' 51:10-51:38 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
434+ ' 53:10-53:81 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
435+ ' 53:10-53:81 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
436+ ' 55:10-55:82 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
437+ ' 55:10-55:82 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
438+ '',
439+ '⚠ 31 warnings',
440+ ''
441+ ].join('\n')
442+ ],
443+ 'should work'
370444 )
371− }, st.error)
445+ }
372446 })
373447
374448 t.test('should work when with Git directory', function(st) {
375449 st.plan(1)
376450
377− Promise.resolve()
378− .then(function() {
379− return execa('git', ['init'])
380− })
381− .then(function() {
382− return execa('git', [
383− 'remote',
384− 'add',
385− 'origin',
386− 'git@github.com:wooorm/test.git'
387− ])
388− })
389− .then(function() {
390− return execa(bin, [
391− '--no-config',
392− '--no-ignore',
393− '--use',
394− '../..',
395− '--use',
396− '../sort',
397− 'github.md',
398− 'examples/github.md'
399− ])
400− })
401− .then(
402− function(result) {
403− clean()
404− st.equal(
405− strip(result.stderr),
406− [
407− 'examples/github.md',
408− ' 5:37-5:51 warning Link to unknown heading: `world` missing-heading remark-validate-links',
409− ' 15:34-15:93 warning Link to unknown file: `../world.md` missing-file remark-validate-links',
410− ' 17:12-17:72 warning Link to unknown file: `../world.md` missing-file remark-validate-links',
411− ' 19:10-19:29 warning Link to unknown file: `../world.md` missing-file remark-validate-links',
412− ' 29:10-29:33 warning Link to unknown heading in `../github.md`: `world` missing-heading-in-file remark-validate-links',
413− ' 31:10-31:73 warning Link to unknown heading in `../github.md`: `world` missing-heading-in-file remark-validate-links',
414− ' 33:10-33:74 warning Link to unknown heading in `../github.md`: `world` missing-heading-in-file remark-validate-links',
415− ' 35:10-35:32 warning Link to unknown file: `../world.md` missing-file remark-validate-links',
416− ' 35:10-35:32 warning Link to unknown heading in `../world.md`: `hello` missing-heading-in-file remark-validate-links',
417− ' 37:10-37:72 warning Link to unknown file: `../world.md` missing-file remark-validate-links',
418− ' 37:10-37:72 warning Link to unknown heading in `../world.md`: `hello` missing-heading-in-file remark-validate-links',
419− ' 39:10-39:73 warning Link to unknown file: `../world.md` missing-file remark-validate-links',
420− ' 39:10-39:73 warning Link to unknown heading in `../world.md`: `hello` missing-heading-in-file remark-validate-links',
421− '',
422− 'github.md',
423− ' 5:37-5:51 warning Link to unknown heading: `world` missing-heading remark-validate-links',
424− ' 21:34-21:102 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
425− ' 23:34-23:84 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
426− ' 25:12-25:81 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
427− ' 27:10-27:37 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
428− ' 29:10-29:35 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
429− ' 41:10-41:41 warning Link to unknown heading in `examples/github.md`: `world` missing-heading-in-file remark-validate-links',
430− ' 43:10-43:39 warning Link to unknown heading in `examples/github.md`: `world` missing-heading-in-file remark-validate-links',
431− ' 45:10-45:82 warning Link to unknown heading in `examples/github.md`: `world` missing-heading-in-file remark-validate-links',
432− ' 47:10-47:83 warning Link to unknown heading in `examples/github.md`: `world` missing-heading-in-file remark-validate-links',
433− ' 49:10-49:40 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
434− ' 49:10-49:40 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
435− ' 51:10-51:38 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
436− ' 51:10-51:38 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
437− ' 53:10-53:81 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
438− ' 53:10-53:81 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
439− ' 55:10-55:82 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
440− ' 55:10-55:82 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
441− '',
442− '⚠ 31 warnings'
443− ].join('\n'),
444− 'should report'
445− )
446− },
447− function(err) {
448− clean()
449− st.error(err)
450− }
451+ childProcess.exec('git init', oninit)
452+
453+ function oninit(err) {
454+ if (err) {
455+ t.ifErr(err)
456+ } else {
457+ childProcess.exec(
458+ 'git remote add origin git@github.com:wooorm/test.git',
459+ onremote
460+ )
461+ }
462+ }
463+
464+ function onremote(err) {
465+ if (err) {
466+ clean()
467+ t.ifErr(err)
468+ } else {
469+ childProcess.exec(
470+ [
471+ bin,
472+ '--no-config',
473+ '--no-ignore',
474+ '--use',
475+ '../..',
476+ '--use',
477+ '../sort',
478+ 'github.md',
479+ 'examples/github.md'
480+ ].join(' '),
481+ onexec
482+ )
483+ }
484+ }
485+
486+ function onexec(err, stdout, stderr) {
487+ clean()
488+ st.deepEqual(
489+ [err, strip(stderr)],
490+ [
491+ null,
492+ [
493+ 'examples/github.md',
494+ ' 5:37-5:51 warning Link to unknown heading: `world` missing-heading remark-validate-links',
495+ ' 15:34-15:93 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:73 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:72 warning Link to unknown file: `../world.md` missing-file remark-validate-links',
504+ ' 37:10-37:72 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',
507+ '',
508+ 'github.md',
509+ ' 5:37-5:51 warning Link to unknown heading: `world` missing-heading remark-validate-links',
510+ ' 21:34-21:102 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
511+ ' 23:34-23:84 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:82 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:81 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
524+ ' 53:10-53:81 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',
527+ '',
528+ '⚠ 31 warnings',
529+ ''
530+ ].join('\n')
531+ ],
532+ 'should work'
451533 )
534+ }
452535
453536 function clean() {
454537 rimraf.sync('./.git')
@@ -460,59 +543,52 @@ test('remark-validate-links', function(t) {
460543
461544 fs.renameSync('../../.git', '../../.git.bak')
462545
463− execa(bin, [
464− '--no-config',
465− '--no-ignore',
466− '--use',
467− '../..',
468− '--use',
469− '../sort',
470− 'github.md'
471− ]).then(
472− function() {
473− clean()
474− st.fail('should not work')
475− },
476− function(err) {
477− clean()
478− st.ok(/not a git repository/i.test(err.stderr), 'should fail')
479− }
546+ childProcess.exec(
547+ [
548+ bin,
549+ '--no-config',
550+ '--no-ignore',
551+ '--use',
552+ '../..',
553+ '--use',
554+ '../sort',
555+ 'github.md'
556+ ].join(' '),
557+ onexec
480558 )
481559
482− function clean() {
560+ function onexec(err) {
483561 fs.renameSync('../../.git.bak', '../../.git')
562+ st.ok(/not a git repository/i.test(err), 'should fail')
484563 }
485564 })
486565
487566 t.test('should fail w/o Git repository w/o remote', function(st) {
488567 st.plan(1)
489568
490− Promise.resolve()
491− .then(function() {
492− return execa('git', ['init'])
493− })
494− .then(function() {
495− return execa(bin, [
496− '--no-config',
497− '--no-ignore',
498− '--use',
499− '../..',
500− 'github.md'
501− ])
502− })
503− .then(
504− function() {
505− clean()
506− st.fail('should not work')
507− },
508− function(err) {
509− clean()
510− st.ok(/Could not find remote origin/.test(err.stderr), 'should fail')
511− }
512− )
569+ childProcess.exec('git init', oninit)
513570
514− function clean() {
571+ function oninit(err) {
572+ if (err) {
573+ t.ifErr(err)
574+ } else {
575+ childProcess.exec(
576+ [
577+ bin,
578+ '--no-config',
579+ '--no-ignore',
580+ '--use',
581+ '../..',
582+ 'github.md'
583+ ].join(' '),
584+ onexec
585+ )
586+ }
587+ }
588+
589+ function onexec(err) {
515590 rimraf.sync('./.git')
591+ st.ok(/Could not find remote origin/.test(err), 'should fail')
516592 }
517593 })
518594
@@ -521,36 +597,36 @@ test('remark-validate-links', function(t) {
521597
522598 fs.renameSync('../../.git', '../../.git.bak')
523599
524− execa(bin, [
525− '--no-config',
526− '--no-ignore',
527− '--use',
528− '../..=repository:"wooorm/test"',
529− '--use',
530− '../sort',
531− 'small.md'
532− ]).then(
533− function(result) {
534− clean()
535− st.equal(
536− strip(result.stderr),
600+ childProcess.exec(
601+ [
602+ bin,
603+ '--no-config',
604+ '--no-ignore',
605+ '--use',
606+ '"../..=repository:\\"wooorm/test\\""',
607+ '--use',
608+ '../sort',
609+ 'small.md'
610+ ].join(' '),
611+ onexec
612+ )
613+
614+ function onexec(err, stdout, stderr) {
615+ fs.renameSync('../../.git.bak', '../../.git')
616+ st.deepEqual(
617+ [err, strip(stderr)],
618+ [
619+ null,
537620 [
538621 'small.md',
539622 ' 5:13-5:27 warning Link to unknown heading: `world` missing-heading remark-validate-links',
540623 '',
541− '⚠ 1 warning'
542− ].join('\n'),
543− 'should work'
544− )
545− },
546− function(err) {
547− clean()
548− st.error(err, 'shoult not fail')
549− }
550− )
551−
552− function clean() {
553− fs.renameSync('../../.git.bak', '../../.git')
624+ '⚠ 1 warning',
625+ ''
626+ ].join('\n')
627+ ],
628+ 'should work'
629+ )
554630 }
555631 })
556632
@@ -559,34 +635,34 @@ test('remark-validate-links', function(t) {
559635
560636 fs.renameSync('../../.git', '../../.git.bak')
561637
562− execa(bin, [
563− '--no-config',
564− '--no-ignore',
565− '--use',
566− '../..=repository:{remote:"wooorm/test"}',
567− 'small.md'
568− ]).then(
569− function(result) {
570− clean()
571− st.equal(
572− strip(result.stderr),
638+ childProcess.exec(
639+ [
640+ bin,
641+ '--no-config',
642+ '--no-ignore',
643+ '--use',
644+ '"../..=repository:{remote:\\"wooorm/test\\"}"',
645+ 'small.md'
646+ ].join(' '),
647+ onexec
648+ )
649+
650+ function onexec(err, stdout, stderr) {
651+ fs.renameSync('../../.git.bak', '../../.git')
652+ st.deepEqual(
653+ [err, strip(stderr)],
654+ [
655+ null,
573656 [
574657 'small.md',
575658 ' 5:13-5:27 warning Link to unknown heading: `world` missing-heading remark-validate-links',
576659 '',
577− '⚠ 1 warning'
578− ].join('\n'),
579− 'should work'
580− )
581− },
582− function(err) {
583− clean()
584− st.error(err, 'shoult not fail')
585− }
586− )
587−
588− function clean() {
589− fs.renameSync('../../.git.bak', '../../.git')
660+ '⚠ 1 warning',
661+ ''
662+ ].join('\n')
663+ ],
664+ 'should work'
665+ )
590666 }
591667 })
592668
@@ -595,34 +671,34 @@ test('remark-validate-links', function(t) {
595671
596672 fs.renameSync('../../.git', '../../.git.bak')
597673
598− execa(bin, [
599− '--no-config',
600− '--no-ignore',
601− '--use',
602− '../..=repository:"wooorm/test",root:"../"',
603− 'small.md'
604− ]).then(
605− function(result) {
606− clean()
607− st.equal(
608− strip(result.stderr),
674+ childProcess.exec(
675+ [
676+ bin,
677+ '--no-config',
678+ '--no-ignore',
679+ '--use',
680+ '"../..=repository:\\"wooorm/test\\",root:\\"../\\""',
681+ 'small.md'
682+ ].join(' '),
683+ onexec
684+ )
685+
686+ function onexec(err, stdout, stderr) {
687+ fs.renameSync('../../.git.bak', '../../.git')
688+ st.deepEqual(
689+ [err, strip(stderr)],
690+ [
691+ null,
609692 [
610693 'small.md',
611694 ' 5:13-5:27 warning Link to unknown heading: `world` missing-heading remark-validate-links',
612695 '',
613− '⚠ 1 warning'
614− ].join('\n'),
615− 'should work'
616− )
617− },
618− function(err) {
619− clean()
620− st.error(err, 'shoult not fail')
621− }
622− )
623−
624− function clean() {
625− fs.renameSync('../../.git.bak', '../../.git')
696+ '⚠ 1 warning',
697+ ''
698+ ].join('\n')
699+ ],
700+ 'should work'
701+ )
626702 }
627703 })
628704
@@ -631,20 +707,27 @@ test('remark-validate-links', function(t) {
631707
632708 fs.renameSync('../../.git', '../../.git.bak')
633709
634− execa(bin, [
635− '--no-config',
636− '--no-ignore',
637− '--use',
638− '../..=repository:false',
639− '--use',
640− '../sort',
641− 'github.md',
642− 'examples/github.md'
643− ]).then(
644− function(result) {
645− clean()
646− st.equal(
647− strip(result.stderr),
710+ childProcess.exec(
711+ [
712+ bin,
713+ '--no-config',
714+ '--no-ignore',
715+ '--use',
716+ '"../..=repository:false"',
717+ '--use',
718+ '../sort',
719+ 'github.md',
720+ 'examples/github.md'
721+ ].join(' '),
722+ onexec
723+ )
724+
725+ function onexec(err, stdout, stderr) {
726+ fs.renameSync('../../.git.bak', '../../.git')
727+ st.deepEqual(
728+ [err, strip(stderr)],
729+ [
730+ null,
648731 [
649732 'examples/github.md',
650733 ' 5:37-5:51 warning Link to unknown heading: `world` missing-heading remark-validate-links',
@@ -665,382 +748,476 @@ test('remark-validate-links', function(t) {
665748 ' 51:10-51:38 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
666749 ' 71:41-71:56 warning Link to unknown heading: `readme` missing-heading remark-validate-links',
667750 '',
668− '⚠ 15 warnings'
669− ].join('\n'),
670− 'should report'
671− )
672− },
673− function(err) {
674− clean()
675− st.error(err)
676− }
677− )
678−
679− function clean() {
680− fs.renameSync('../../.git.bak', '../../.git')
751+ '⚠ 15 warnings',
752+ ''
753+ ].join('\n')
754+ ],
755+ 'should work'
756+ )
681757 }
682758 })
683759
684760 t.test('should work when finding non-hosted Git remotes', function(st) {
685761 st.plan(1)
686762
687− execa(bin, [
688− '--no-config',
689− '--no-ignore',
690− '--use',
691− '../..=repository:"ssh://git@domain.com/user/project.git"',
692− '--use',
693− '../sort',
694− 'small.md'
695− ]).then(function(result) {
696− st.equal(
697− strip(result.stderr),
763+ childProcess.exec(
764+ [
765+ bin,
766+ '--no-config',
767+ '--no-ignore',
768+ '--use',
769+ '"../..=repository:\\"ssh://git@domain.com/user/project.git\\""',
770+ '--use',
771+ '../sort',
772+ 'small.md'
773+ ].join(' '),
774+ onexec
775+ )
776+
777+ function onexec(err, stdout, stderr) {
778+ st.deepEqual(
779+ [err, strip(stderr)],
698780 [
699− 'small.md',
700− ' 5:13-5:27 warning Link to unknown heading: `world` missing-heading remark-validate-links',
701− '',
702− '⚠ 1 warning'
703− ].join('\n'),
704− 'should report'
781+ null,
782+ [
783+ 'small.md',
784+ ' 5:13-5:27 warning Link to unknown heading: `world` missing-heading remark-validate-links',
785+ '',
786+ '⚠ 1 warning',
787+ ''
788+ ].join('\n')
789+ ],
790+ 'should work'
705791 )
706− }, st.error)
792+ }
707793 })
708794
709795 t.test('should support a GitLab shortcode', function(st) {
710796 st.plan(1)
711797
712− execa(bin, [
713− '--no-config',
714− '--no-ignore',
715− '--use',
716− '../..=repository:"gitlab:wooorm/test"',
717− '--use',
718− '../sort',
719− 'gitlab.md'
720− ]).then(function(result) {
721− st.equal(
722− strip(result.stderr),
798+ childProcess.exec(
799+ [
800+ bin,
801+ '--no-config',
802+ '--no-ignore',
803+ '--use',
804+ '"../..=repository:\\"gitlab:wooorm/test\\""',
805+ '--use',
806+ '../sort',
807+ 'gitlab.md'
808+ ].join(' '),
809+ onexec
810+ )
811+
812+ function onexec(err, stdout, stderr) {
813+ st.deepEqual(
814+ [err, strip(stderr)],
723815 [
724− 'gitlab.md',
725− ' 5:37-5:51 warning Link to unknown heading: `world` missing-heading remark-validate-links',
726− ' 19:34-19:102 warning Link to unknown file: `examples/world.md`. Did you mean `examples/gitlab.md` missing-file remark-validate-links',
727− ' 21:12-21:81 warning Link to unknown file: `examples/world.md`. Did you mean `examples/gitlab.md` missing-file remark-validate-links',
728− ' 23:10-23:37 warning Link to unknown file: `examples/world.md`. Did you mean `examples/gitlab.md` missing-file remark-validate-links',
729− ' 25:10-25:35 warning Link to unknown file: `examples/world.md`. Did you mean `examples/gitlab.md` missing-file remark-validate-links',
730− ' 37:10-37:41 warning Link to unknown heading in `examples/gitlab.md`: `world` missing-heading-in-file remark-validate-links',
731− ' 39:10-39:39 warning Link to unknown heading in `examples/gitlab.md`: `world` missing-heading-in-file remark-validate-links',
732− ' 41:10-41:82 warning Link to unknown heading in `examples/gitlab.md`: `world` missing-heading-in-file remark-validate-links',
733− ' 43:10-43:83 warning Link to unknown heading in `examples/gitlab.md`: `world` missing-heading-in-file remark-validate-links',
734− ' 45:10-45:40 warning Link to unknown file: `examples/world.md`. Did you mean `examples/gitlab.md` missing-file remark-validate-links',
735− ' 45:10-45:40 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
736− ' 47:10-47:38 warning Link to unknown file: `examples/world.md`. Did you mean `examples/gitlab.md` missing-file remark-validate-links',
737− ' 47:10-47:38 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
738− ' 49:10-49:81 warning Link to unknown file: `examples/world.md`. Did you mean `examples/gitlab.md` missing-file remark-validate-links',
739− ' 49:10-49:81 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
740− ' 51:10-51:82 warning Link to unknown file: `examples/world.md`. Did you mean `examples/gitlab.md` missing-file remark-validate-links',
741− ' 51:10-51:82 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
742− '',
743− '⚠ 17 warnings'
744− ].join('\n'),
745− 'should report'
816+ null,
817+ [
818+ 'gitlab.md',
819+ ' 5:37-5:51 warning Link to unknown heading: `world` missing-heading remark-validate-links',
820+ ' 19:34-19:102 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:82 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:81 warning Link to unknown file: `examples/world.md`. Did you mean `examples/gitlab.md` missing-file remark-validate-links',
833+ ' 49:10-49:81 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',
836+ '',
837+ '⚠ 17 warnings',
838+ ''
839+ ].join('\n')
840+ ],
841+ 'should work'
746842 )
747− }, st.error)
843+ }
748844 })
749845
750846 t.test('should support a Bitbucket shortcode', function(st) {
751847 st.plan(1)
752848
753− execa(bin, [
754− '--no-config',
755− '--no-ignore',
756− '--use',
757− '../..=repository:"bitbucket:wooorm/test"',
758− '--use',
759− '../sort',
760− 'bitbucket.md'
761− ]).then(function(result) {
762− st.equal(
763− strip(result.stderr),
849+ childProcess.exec(
850+ [
851+ bin,
852+ '--no-config',
853+ '--no-ignore',
854+ '--use',
855+ '"../..=repository:\\"bitbucket:wooorm/test\\""',
856+ '--use',
857+ '../sort',
858+ 'bitbucket.md'
859+ ].join(' '),
860+ onexec
861+ )
862+
863+ function onexec(err, stdout, stderr) {
864+ st.deepEqual(
865+ [err, strip(stderr)],
764866 [
765− 'bitbucket.md',
766− ' 5:37-5:67 warning Link to unknown heading: `world` missing-heading remark-validate-links',
767− ' 21:34-21:104 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
768− ' 23:12-23:83 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
769− ' 25:10-25:37 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
770− ' 27:10-27:35 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
771− ' 39:10-39:60 warning Link to unknown heading in `examples/bitbucket.md`: `world` missing-heading-in-file remark-validate-links',
772− ' 41:10-41:58 warning Link to unknown heading in `examples/bitbucket.md`: `world` missing-heading-in-file remark-validate-links',
773− ' 43:10-43:103 warning Link to unknown heading in `examples/bitbucket.md`: `world` missing-heading-in-file remark-validate-links',
774− ' 45:10-45:104 warning Link to unknown heading in `examples/bitbucket.md`: `world` missing-heading-in-file remark-validate-links',
775− ' 47:10-47:56 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
776− ' 47:10-47:56 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
777− ' 49:10-49:54 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
778− ' 49:10-49:54 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
779− ' 51:10-51:99 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
780− ' 51:10-51:99 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
781− ' 53:10-53:100 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
782− ' 53:10-53:100 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
783− '',
784− '⚠ 17 warnings'
785− ].join('\n'),
786− 'should report'
867+ null,
868+ [
869+ 'bitbucket.md',
870+ ' 5:37-5:67 warning Link to unknown heading: `world` missing-heading remark-validate-links',
871+ ' 21:34-21:104 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
872+ ' 23:12-23:83 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
873+ ' 25:10-25:37 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
874+ ' 27:10-27:35 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
875+ ' 39:10-39:60 warning Link to unknown heading in `examples/bitbucket.md`: `world` missing-heading-in-file remark-validate-links',
876+ ' 41:10-41:58 warning Link to unknown heading in `examples/bitbucket.md`: `world` missing-heading-in-file remark-validate-links',
877+ ' 43:10-43:103 warning Link to unknown heading in `examples/bitbucket.md`: `world` missing-heading-in-file remark-validate-links',
878+ ' 45:10-45:104 warning Link to unknown heading in `examples/bitbucket.md`: `world` missing-heading-in-file remark-validate-links',
879+ ' 47:10-47:56 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
880+ ' 47:10-47:56 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
881+ ' 49:10-49:54 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
882+ ' 49:10-49:54 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
883+ ' 51:10-51:99 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
884+ ' 51:10-51:99 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
885+ ' 53:10-53:100 warning Link to unknown file: `examples/world.md` missing-file remark-validate-links',
886+ ' 53:10-53:100 warning Link to unknown heading in `examples/world.md`: `hello` missing-heading-in-file remark-validate-links',
887+ '',
888+ '⚠ 17 warnings',
889+ ''
890+ ].join('\n')
891+ ],
892+ 'should work'
787893 )
788− }, st.error)
894+ }
789895 })
790896
791897 t.test('should suggest similar links', function(st) {
792898 st.plan(1)
793899
794− execa(bin, [
795− '--no-config',
796− '--no-ignore',
797− '--use',
798− '../..',
799− '--use',
800− '../sort',
801− 'suggestions.md'
802− ]).then(function(result) {
803− st.equal(
804− strip(result.stderr),
900+ childProcess.exec(
901+ [
902+ bin,
903+ '--no-config',
904+ '--no-ignore',
905+ '--use',
906+ '../..',
907+ '--use',
908+ '../sort',
909+ 'suggestions.md'
910+ ].join(' '),
911+ onexec
912+ )
913+
914+ function onexec(err, stdout, stderr) {
915+ st.deepEqual(
916+ [err, strip(stderr)],
805917 [
806− 'suggestions.md',
807− ' 3:22-3:37 warning Link to unknown heading: `helloo`. Did you mean `hello` missing-heading remark-validate-links',
808− ' 7:17-7:39 warning Link to unknown heading in `github.md`: `fiiiles`. Did you mean `files` missing-heading-in-file remark-validate-links',
809− '',
810− '⚠ 2 warnings'
811− ].join('\n'),
812− 'should report'
918+ null,
919+ [
920+ 'suggestions.md',
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',
923+ '',
924+ '⚠ 2 warnings',
925+ ''
926+ ].join('\n')
927+ ],
928+ 'should work'
813929 )
814− }, st.error)
930+ }
815931 })
816932
817933 t.test('should recognise links to particular lines', function(st) {
818934 st.plan(1)
819935
820− execa(bin, [
821− '--no-config',
822− '--no-ignore',
823− '--use',
824− '../..=repository:"wooorm/test"',
825− '--use',
826− '../sort',
827− 'line-links.md'
828− ]).then(function(result) {
829− st.equal(
830− strip(result.stderr),
936+ childProcess.exec(
937+ [
938+ bin,
939+ '--no-config',
940+ '--no-ignore',
941+ '--use',
942+ '"../..=repository:\\"wooorm/test\\""',
943+ '--use',
944+ '../sort',
945+ 'line-links.md'
946+ ].join(' '),
947+ onexec
948+ )
949+
950+ function onexec(err, stdout, stderr) {
951+ st.deepEqual(
952+ [err, strip(stderr)],
831953 [
832− 'line-links.md',
833− ' 5:9-5:61 warning Link to unknown file: `examples/missing.js` missing-file remark-validate-links',
834− ' 9:1-9:71 warning Link to unknown file: `examples/missing.js` missing-file remark-validate-links',
835− '',
836− '⚠ 2 warnings'
837− ].join('\n'),
838− 'should report'
954+ null,
955+ [
956+ 'line-links.md',
957+ ' 5:9-5:61 warning Link to unknown file: `examples/missing.js` missing-file remark-validate-links',
958+ ' 9:1-9:71 warning Link to unknown file: `examples/missing.js` missing-file remark-validate-links',
959+ '',
960+ '⚠ 2 warnings',
961+ ''
962+ ].join('\n')
963+ ],
964+ 'should work'
839965 )
840− }, st.error)
966+ }
841967 })
842968
843969 t.test('should recognise links with encoded URLs', function(st) {
844970 st.plan(1)
845971
846− execa(bin, [
847− '--no-config',
848− '--no-ignore',
849− '--use',
850− '../..=repository:"wooorm/test"',
851− '--use',
852− '../sort',
853− 'weird-characters.md'
854− ]).then(function(result) {
855− st.equal(
856− strip(result.stderr),
972+ childProcess.exec(
973+ [
974+ bin,
975+ '--no-config',
976+ '--no-ignore',
977+ '--use',
978+ '"../..=repository:\\"wooorm/test\\""',
979+ '--use',
980+ '../sort',
981+ 'weird-characters.md'
982+ ].join(' '),
983+ onexec
984+ )
985+
986+ function onexec(err, stdout, stderr) {
987+ st.deepEqual(
988+ [err, strip(stderr)],
857989 [
858− 'weird-characters.md',
859− ' 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',
860− ' 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',
861− ' 15:17-15:114 warning Link to unknown heading in `examples/weird#characters.md`: `world` missing-heading-in-file remark-validate-links',
862− ' 17:17-17:120 warning Link to unknown heading in `examples/weird#character/readme.md`: `world` missing-heading-in-file remark-validate-links',
863− '',
864− '⚠ 4 warnings'
865− ].join('\n'),
866− 'should report'
990+ null,
991+ [
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',
997+ '',
998+ '⚠ 4 warnings',
999+ ''
1000+ ].join('\n')
1001+ ],
1002+ 'should work'
8671003 )
868− }, st.error)
1004+ }
8691005 })
8701006
8711007 t.test('should check images', function(st) {
8721008 st.plan(1)
8731009
874− execa(bin, [
875− '--no-config',
876− '--no-ignore',
877− '--use',
878− '../..=repository:"wooorm/test"',
879− '--use',
880− '../sort',
881− 'images.md'
882− ]).then(function(result) {
883− st.equal(
884− strip(result.stderr),
1010+ childProcess.exec(
1011+ [
1012+ bin,
1013+ '--no-config',
1014+ '--no-ignore',
1015+ '--use',
1016+ '"../..=repository:\\"wooorm/test\\""',
1017+ '--use',
1018+ '../sort',
1019+ 'images.md'
1020+ ].join(' '),
1021+ onexec
1022+ )
1023+
1024+ function onexec(err, stdout, stderr) {
1025+ st.deepEqual(
1026+ [err, strip(stderr)],
8851027 [
886− 'images.md',
887− ' 19:10-19:50 warning Link to unknown file: `examples/missing.jpg`. Did you mean `examples/image.jpg` missing-file remark-validate-links',
888− ' 21:12-21:42 warning Link to unknown file: `examples/missing.jpg`. Did you mean `examples/image.jpg` missing-file remark-validate-links',
889− ' 23:10-23:91 warning Link to unknown file: `examples/missing.jpg`. Did you mean `examples/image.jpg` missing-file remark-validate-links',
890− ' 35:1-35:38 warning Link to unknown file: `examples/missing.jpg`. Did you mean `examples/image.jpg` missing-file remark-validate-links',
891− ' 37:1-37:79 warning Link to unknown file: `examples/missing.jpg`. Did you mean `examples/image.jpg` missing-file remark-validate-links',
892− '',
893− '⚠ 5 warnings'
894− ].join('\n'),
895− 'should report'
1028+ null,
1029+ [
1030+ 'images.md',
1031+ ' 19:10-19:50 warning Link to unknown file: `examples/missing.jpg`. Did you mean `examples/image.jpg` missing-file remark-validate-links',
1032+ ' 21:12-21:42 warning Link to unknown file: `examples/missing.jpg`. Did you mean `examples/image.jpg` missing-file remark-validate-links',
1033+ ' 23:10-23:91 warning Link to unknown file: `examples/missing.jpg`. Did you mean `examples/image.jpg` missing-file remark-validate-links',
1034+ ' 35:1-35:38 warning Link to unknown file: `examples/missing.jpg`. Did you mean `examples/image.jpg` missing-file remark-validate-links',
1035+ ' 37:1-37:79 warning Link to unknown file: `examples/missing.jpg`. Did you mean `examples/image.jpg` missing-file remark-validate-links',
1036+ '',
1037+ '⚠ 5 warnings',
1038+ ''
1039+ ].join('\n')
1040+ ],
1041+ 'should work'
8961042 )
897− }, st.error)
1043+ }
8981044 })
8991045
9001046 t.test('should support query parameters', function(st) {
9011047 st.plan(1)
9021048
903− execa(bin, [
904− '--no-config',
905− '--no-ignore',
906− '--use',
907− '../..=repository:"wooorm/test"',
908− '--use',
909− '../sort',
910− 'query-params.md'
911− ]).then(
912− function(result) {
913− st.equal(
914− strip(result.stderr),
1049+ childProcess.exec(
1050+ [
1051+ bin,
1052+ '--no-config',
1053+ '--no-ignore',
1054+ '--use',
1055+ '"../..=repository:\\"wooorm/test\\""',
1056+ '--use',
1057+ '../sort',
1058+ 'query-params.md'
1059+ ].join(' '),
1060+ onexec
1061+ )
1062+
1063+ function onexec(err, stdout, stderr) {
1064+ st.deepEqual(
1065+ [err, strip(stderr)],
1066+ [
1067+ null,
9151068 [
9161069 'query-params.md',
9171070 ' 9:33-9:55 warning Link to unknown heading: `query-params?`. Did you mean `query-params` missing-heading remark-validate-links',
9181071 '',
919− '⚠ 1 warning'
920− ].join('\n'),
921− 'should report'
922− )
923− },
924− function(err) {
925− st.error(err, 'should not fail')
926− }
927− )
1072+ '⚠ 1 warning',
1073+ ''
1074+ ].join('\n')
1075+ ],
1076+ 'should work'
1077+ )
1078+ }
9281079 })
9291080
9301081 t.test('should support case insensitive headings', function(st) {
9311082 st.plan(1)
9321083
933− execa(bin, [
934− '--no-config',
935− '--no-ignore',
936− '--use',
937− '../..',
938− '--use',
939− '../sort',
940− 'case-insensitive-headings.md'
941− ]).then(
942− function(result) {
943− st.equal(
944− strip(result.stderr),
1084+ childProcess.exec(
1085+ [
1086+ bin,
1087+ '--no-config',
1088+ '--no-ignore',
1089+ '--use',
1090+ '../..',
1091+ '--use',
1092+ '../sort',
1093+ 'case-insensitive-headings.md'
1094+ ].join(' '),
1095+ onexec
1096+ )
1097+
1098+ function onexec(err, stdout, stderr) {
1099+ st.deepEqual(
1100+ [err, strip(stderr)],
1101+ [
1102+ null,
9451103 [
9461104 'case-insensitive-headings.md',
9471105 ' 5:13-5:27 warning Link to unknown heading: `world` missing-heading remark-validate-links',
9481106 ' 9:16-9:48 warning Link to unknown heading in `examples/github.md`: `world` missing-heading-in-file remark-validate-links',
9491107 '',
950− '⚠ 2 warnings'
951− ].join('\n'),
952− 'should report'
953− )
954− },
955− function(err) {
956− st.error(err, 'should not fail')
957− }
958− )
1108+ '⚠ 2 warnings',
1109+ ''
1110+ ].join('\n')
1111+ ],
1112+ 'should work'
1113+ )
1114+ }
9591115 })
9601116
9611117 t.test('should ignore external links', function(st) {
9621118 st.plan(1)
9631119
964− execa(bin, [
965− '--no-config',
966− '--no-ignore',
967− '--use',
968− '../..=repository:"wooorm/test"',
969− '--use',
970− '../sort',
971− 'external.md'
972− ]).then(function(result) {
973− st.equal(
974− strip(result.stderr),
975− 'external.md: no issues found',
976− 'should report'
1120+ childProcess.exec(
1121+ [
1122+ bin,
1123+ '--no-config',
1124+ '--no-ignore',
1125+ '--use',
1126+ '"../..=repository:\\"wooorm/test\\""',
1127+ '--use',
1128+ '../sort',
1129+ 'external.md'
1130+ ].join(' '),
1131+ onexec
1132+ )
1133+
1134+ function onexec(err, stdout, stderr) {
1135+ st.deepEqual(
1136+ [err, strip(stderr)],
1137+ [null, 'external.md: no issues found\n'],
1138+ 'should work'
9771139 )
978− }, st.error)
1140+ }
9791141 })
9801142
9811143 t.test('should ignore external links (without repo)', function(st) {
9821144 st.plan(1)
9831145
984− execa(bin, [
985− '--no-config',
986− '--no-ignore',
987− '--use',
988− '../..=repository:false',
989− '--use',
990− '../sort',
991− 'external.md'
992− ]).then(function(result) {
993− st.equal(
994− strip(result.stderr),
995− 'external.md: no issues found',
996− 'should report'
1146+ childProcess.exec(
1147+ [
1148+ bin,
1149+ '--no-config',
1150+ '--no-ignore',
1151+ '--use',
1152+ '../..=repository:false',
1153+ '--use',
1154+ '../sort',
1155+ 'external.md'
1156+ ].join(' '),
1157+ onexec
1158+ )
1159+
1160+ function onexec(err, stdout, stderr) {
1161+ st.deepEqual(
1162+ [err, strip(stderr)],
1163+ [null, 'external.md: no issues found\n'],
1164+ 'should work'
9971165 )
998− }, st.error)
1166+ }
9991167 })
10001168
10011169 t.test('should support self-hosted Git solutions', function(st) {
10021170 st.plan(1)
10031171
1004− Promise.resolve()
1005− .then(function() {
1006− return execa('git', ['init'])
1007− })
1008− .then(function() {
1009− return execa('git', [
1010− 'remote',
1011− 'add',
1012− 'origin',
1013− 'git@gitlab.acme.company:acme/project.git'
1014− ])
1015− })
1016− .then(function() {
1017− return execa(bin, [
1018− '--no-config',
1019− '--no-ignore',
1020− '--use',
1021− '../..=urlConfig:{hostname:"gitlab.acme.com",prefix:"/acme/project/blob/",headingPrefix:"#",lines:true}',
1022− 'self-hosted.md'
1023− ])
1024− })
1025− .then(
1026− function(result) {
1027− clean()
1028− st.equal(
1029− strip(result.stderr),
1030− [
1031− 'self-hosted.md',
1032− ' 5:1-5:82 warning Link to unknown heading: `world` missing-heading remark-validate-links',
1033− '',
1034− '⚠ 1 warning'
1035− ].join('\n'),
1036− 'should report'
1037− )
1038− },
1039− function(err) {
1040− clean()
1041− st.error(err)
1042− }
1172+ childProcess.exec('git init', oninit)
1173+
1174+ function oninit(err) {
1175+ if (err) {
1176+ t.ifErr(err)
1177+ } else {
1178+ childProcess.exec(
1179+ 'git remote add origin git@gitlab.acme.company:acme/project.git',
1180+ onremote
1181+ )
1182+ }
1183+ }
1184+
1185+ function onremote(err) {
1186+ if (err) {
1187+ clean()
1188+ t.ifErr(err)
1189+ } else {
1190+ childProcess.exec(
1191+ [
1192+ bin,
1193+ '--no-config',
1194+ '--no-ignore',
1195+ '--use',
1196+ '"../..=urlConfig:{hostname:\\"gitlab.acme.com\\",prefix:\\"/acme/project/blob/\\",headingPrefix:\\"#\\",lines:true}"',
1197+ 'self-hosted.md'
1198+ ].join(' '),
1199+ onexec
1200+ )
1201+ }
1202+ }
1203+
1204+ function onexec(err, stdout, stderr) {
1205+ clean()
1206+ st.deepEqual(
1207+ [err, strip(stderr)],
1208+ [
1209+ null,
1210+ [
1211+ 'self-hosted.md',
1212+ ' 5:1-5:82 warning Link to unknown heading: `world` missing-heading remark-validate-links',
1213+ '',
1214+ '⚠ 1 warning',
1215+ ''
1216+ ].join('\n')
1217+ ],
1218+ 'should work'
10431219 )
1220+ }
10441221
10451222 function clean() {
10461223 rimraf.sync('./.git')