@@ -9,64 +9,29 @@
99'use strict';
1010
1111/* eslint-env node */
12+/* jscs:disable jsDoc */
13+/* jscs:disable maximumLineLength */
1214
13−/*
14− * Dependencies.
15− */
16−
15+/* Dependencies. */
1716var fs = require('fs');
1817var path = require('path');
1918var test = require('tape');
20−var hook = require('hook-std');
19+var execa = require('execa');
2120var remark = require('remark');
22−var cli = require('remark/lib/cli');
2321var links = require('..');
2422
25−/**
26− * Test the cli.
27− *
28− * @param {Object} config - Configuration.
29− * @param {Function} callback - Completion handler.
30− */
31−function assertion(config, callback) {
32− var stdout = [];
33− var stderr = [];
34− var opts = {};
35− var unhookStdout;
36− var unhookStderr;
37−
38− opts.silent = true;
39−
40− unhookStdout = hook.stdout(opts, [].push.bind(stdout));
41− unhookStderr = hook.stderr(opts, [].push.bind(stderr));
42−
43− cli(config, function (err) {
44− unhookStdout();
45− unhookStderr();
46−
47− if (err) {
48− return callback(err);
49− }
50−
51− return callback(null, {
52− 'stdout': stdout.join(''),
53− 'stderr': stderr.join('')
54− });
55− });
56−}
57−
58−/*
59− * Tests.
60− */
61−
23+/* Constants. */
6224process.chdir(path.resolve(process.cwd(), 'test', 'fixtures'));
6325
6426test.onFinish(function () {
6527 process.chdir(path.resolve(process.cwd(), '..', '..'));
6628});
6729
30+var bin = path.join('..', '..', 'node_modules', '.bin', 'remark');
31+
32+/* Tests. */
6833test('remark-validate-links', function (t) {
69− // t.plan(1);
34+ t.plan(8);
7035
7136 t.throws(
7237 function () {
@@ -77,21 +42,19 @@ test('remark-validate-links', function (t) {
7742 );
7843
7944 t.test('should ignore unfound files', function (st) {
80− assertion({
81− 'files': ['definitions.md', 'FOOOO'],
82− 'color': false,
83− 'detectRC': false,
84− 'detectIgnore': false,
85− 'plugins': [
86− '../../../index.js'
87− ]
88− }, function (err, res) {
89− st.ifErr(err);
90−
91− st.equal(res.stdout, '');
92−
45+ st.plan(2);
46+
47+ execa.stderr(bin, [
48+ '--no-config',
49+ '--no-ignore',
50+ '--use',
51+ '.',
52+ 'definitions.md',
53+ 'FOOOO'
54+ ]).catch(function (err) {
55+ st.equal(err.code, 1, 'should exit with `1`');
9356 st.equal(
94− res.stderr,
57+ err.stderr,
9558 [
9659 'FOOOO',
9760 ' 1:1 error No such file or directory',
@@ -101,94 +64,67 @@ test('remark-validate-links', function (t) {
10164 '',
10265 '2 messages (✖ 1 error, ⚠ 1 warning)',
10366 ''
104− ].join('\n')
67+ ].join('\n'),
68+ 'should report'
10569 );
106−
107− st.end();
10870 });
10971 });
11072
11173 t.test('should work when not all files are given', function (st) {
112− assertion({
113− 'files': 'example.md',
114− 'color': false,
115− 'detectRC': false,
116− 'detectIgnore': false,
117− 'plugins': [
118− '../../../index.js'
119− ]
120− }, function (err, res) {
121− st.ifErr(err);
122−
74+ st.plan(1);
75+
76+ execa.stderr(bin, [
77+ '--no-config',
78+ '--no-ignore',
79+ '--use',
80+ '.',
81+ 'example.md'
82+ ]).then(function (stderr) {
12383 st.equal(
124− res.stderr,
84+ stderr,
12585 [
12686 'example.md',
12787 ' 5:37-5:51 warning Link to unknown heading: `world`',
128− ' 23:10-23:37 warning Link to unknown file: ' +
129− '`examples/world.md`',
130− ' 25:10-25:35 warning Link to unknown file: ' +
131− '`examples/world.md`',
132− ' 37:10-37:42 warning Link to unknown heading in ' +
133− '`examples/example.md`: `world`',
134− ' 39:10-39:40 warning Link to unknown heading in ' +
135− '`examples/example.md`: `world`',
136− ' 45:10-45:40 warning Link to unknown file: ' +
137− '`examples/world.md`',
138− ' 45:10-45:40 warning Link to unknown heading in ' +
139− '`examples/world.md`: `hello`',
140− ' 47:10-47:38 warning Link to unknown file: ' +
141− '`examples/world.md`',
142− ' 47:10-47:38 warning Link to unknown heading in ' +
143− '`examples/world.md`: `hello`',
88+ ' 23:10-23:37 warning Link to unknown file: `examples/world.md`',
89+ ' 25:10-25:35 warning Link to unknown file: `examples/world.md`',
90+ ' 37:10-37:42 warning Link to unknown heading in `examples/example.md`: `world`',
91+ ' 39:10-39:40 warning Link to unknown heading in `examples/example.md`: `world`',
92+ ' 45:10-45:40 warning Link to unknown file: `examples/world.md`',
93+ ' 45:10-45:40 warning Link to unknown heading in `examples/world.md`: `hello`',
94+ ' 47:10-47:38 warning Link to unknown file: `examples/world.md`',
95+ ' 47:10-47:38 warning Link to unknown heading in `examples/world.md`: `hello`',
14496 '',
145− '⚠ 9 warnings',
146− ''
147− ].join('\n')
97+ '⚠ 9 warnings'
98+ ].join('\n'),
99+ 'should report'
148100 );
149−
150− st.end();
151101 });
152102 });
153103
154104 t.test('should work when all files are given', function (st) {
155− assertion({
156− 'files': [
157− 'example.md',
158− 'examples/example.md'
159− ],
160− 'color': false,
161− 'detectRC': false,
162− 'detectIgnore': false,
163− 'plugins': [
164− '../../../index.js'
165− ]
166− }, function (err, res) {
167− st.ifErr(err);
168−
169− st.equal(res.stdout, '');
170−
105+ st.plan(1);
106+
107+ execa.stderr(bin, [
108+ '--no-config',
109+ '--no-ignore',
110+ '--use',
111+ '.',
112+ 'example.md',
113+ 'examples/example.md'
114+ ]).then(function (stderr) {
171115 st.equal(
172− res.stderr,
116+ stderr,
173117 [
174118 'example.md',
175119 ' 5:37-5:51 warning Link to unknown heading: `world`',
176− ' 23:10-23:37 warning Link to unknown file: ' +
177− '`examples/world.md`',
178− ' 25:10-25:35 warning Link to unknown file: ' +
179− '`examples/world.md`',
180− ' 37:10-37:42 warning Link to unknown heading in ' +
181− '`examples/example.md`: `world`',
182− ' 39:10-39:40 warning Link to unknown heading in ' +
183− '`examples/example.md`: `world`',
184− ' 45:10-45:40 warning Link to unknown file: ' +
185− '`examples/world.md`',
186− ' 45:10-45:40 warning Link to unknown heading in ' +
187− '`examples/world.md`: `hello`',
188− ' 47:10-47:38 warning Link to unknown file: ' +
189− '`examples/world.md`',
190− ' 47:10-47:38 warning Link to unknown heading in ' +
191− '`examples/world.md`: `hello`',
120+ ' 23:10-23:37 warning Link to unknown file: `examples/world.md`',
121+ ' 25:10-25:35 warning Link to unknown file: `examples/world.md`',
122+ ' 37:10-37:42 warning Link to unknown heading in `examples/example.md`: `world`',
123+ ' 39:10-39:40 warning Link to unknown heading in `examples/example.md`: `world`',
124+ ' 45:10-45:40 warning Link to unknown file: `examples/world.md`',
125+ ' 45:10-45:40 warning Link to unknown heading in `examples/world.md`: `hello`',
126+ ' 47:10-47:38 warning Link to unknown file: `examples/world.md`',
127+ ' 47:10-47:38 warning Link to unknown heading in `examples/world.md`: `hello`',
192128 '',
193129 'examples/example.md',
194130 ' 5:37-5:51 warning Link to unknown heading: ' +
@@ -202,63 +138,49 @@ test('remark-validate-links', function (t) {
202138 ' 35:10-35:32 warning Link to unknown heading in ' +
203139 '`world.md`: `hello`',
204140 '',
205− '⚠ 14 warnings',
206− ''
207− ].join('\n')
141+ '⚠ 14 warnings'
142+ ].join('\n'),
143+ 'should report'
208144 );
209−
210− st.end();
211145 });
212146 });
213147
214148 t.test('should work with definitions', function (st) {
215− assertion({
216− 'files': 'definitions.md',
217− 'color': false,
218− 'detectRC': false,
219− 'detectIgnore': false,
220− 'plugins': [
221− '../../../index.js'
222− ]
223− }, function (err, res) {
224− st.ifErr(err);
225−
149+ st.plan(1);
150+
151+ execa.stderr(bin, [
152+ '--no-config',
153+ '--no-ignore',
154+ '--use',
155+ '.',
156+ 'definitions.md'
157+ ]).then(function (stderr) {
226158 st.equal(
227− res.stderr,
159+ stderr,
228160 [
229161 'definitions.md',
230162 ' 5:12-5:21 warning Link to unknown heading: `world`',
231163 '',
232− '⚠ 1 warning',
233− ''
234− ].join('\n')
164+ '⚠ 1 warning'
165+ ].join('\n'),
166+ 'should report'
235167 );
236−
237− st.end();
238168 });
239169 });
240170
241171 t.test('should work on GitHub URLs when given a repo', function (st) {
242− assertion({
243− 'files': [
244− 'example.md',
245− 'examples/example.md'
246− ],
247− 'color': false,
248− 'detectRC': false,
249− 'detectIgnore': false,
250− 'plugins': {
251− '../../../index.js': {
252− 'repository': 'wooorm/test'
253− }
254− }
255− }, function (err, res) {
256− st.ifErr(err);
257−
258− st.equal(res.stdout, '');
259−
172+ st.plan(1);
173+
174+ execa.stderr(bin, [
175+ '--no-config',
176+ '--no-ignore',
177+ '--use',
178+ '.=repository:"wooorm/test"',
179+ 'example.md',
180+ 'examples/example.md'
181+ ]).then(function (stderr) {
260182 st.equal(
261− res.stderr,
183+ stderr,
262184 [
263185 'example.md',
264186 ' 5:37-5:51 warning Link to unknown heading: ' +
@@ -324,38 +246,36 @@ test('remark-validate-links', function (t) {
324246 ' 39:10-39:73 warning Link to unknown file: ' +
325247 '`world.md`',
326248 '',
327− '⚠ 30 warnings',
328− ''
329− ].join('\n')
249+ '⚠ 30 warnings'
250+ ].join('\n'),
251+ 'should report'
330252 );
331−
332− st.end();
333253 });
334254 });
335255
336256 t.test('should work on GitHub URLs when with package.json', function (st) {
257+ st.plan(1);
258+
259+ /* cwd is moved to `test/fixtures`. */
337260 fs.writeFileSync('./package.json', JSON.stringify({
338261 'repository': 'wooorm/test'
339262 }, 0, 2));
340263
341− assertion({
342− 'files': [
343− 'example.md',
344− 'examples/example.md'
345− ],
346− 'color': false,
347− 'detectRC': false,
348− 'detectIgnore': false,
349− 'plugins': [
350− '../../../index.js'
351− ]
352− }, function (err, res) {
264+ function clean() {
353265 fs.unlinkSync('./package.json');
266+ }
354267
355− st.ifErr(err);
356−
268+ execa.stderr(bin, [
269+ '--no-config',
270+ '--no-ignore',
271+ '--use',
272+ '../..',
273+ 'example.md',
274+ 'examples/example.md'
275+ ]).then(function (stderr) {
276+ clean();
357277 st.equal(
358− res.stderr,
278+ stderr,
359279 [
360280 'example.md',
361281 ' 5:37-5:51 warning Link to unknown heading: ' +
@@ -421,29 +341,25 @@ test('remark-validate-links', function (t) {
421341 ' 39:10-39:73 warning Link to unknown file: ' +
422342 '`world.md`',
423343 '',
424− '⚠ 30 warnings',
425− ''
426− ].join('\n')
344+ '⚠ 30 warnings'
345+ ].join('\n'),
346+ 'should report'
427347 );
428−
429− st.end();
430− });
348+ }, clean);
431349 });
432350
433351 t.test('should suggest similar links', function (st) {
434− assertion({
435− 'files': ['suggestions.md'],
436− 'color': false,
437− 'detectRC': false,
438− 'detectIgnore': false,
439− 'plugins': [
440− '../../../index.js'
441− ]
442− }, function (err, res) {
443− st.ifErr(err);
444−
352+ st.plan(1);
353+
354+ execa.stderr(bin, [
355+ '--no-config',
356+ '--no-ignore',
357+ '--use',
358+ '.',
359+ 'suggestions.md'
360+ ]).then(function (stderr) {
445361 st.equal(
446− res.stderr,
362+ stderr,
447363 [
448364 'suggestions.md',
449365 ' 3:22-3:37 warning Link to unknown heading: ' +
@@ -451,12 +367,10 @@ test('remark-validate-links', function (t) {
451367 ' 7:17-7:40 warning Link to unknown heading in ' +
452368 '`example.md`: `fiiiles`. Did you mean `files`',
453369 '',
454− '⚠ 2 warnings',
455− ''
456− ].join('\n')
370+ '⚠ 2 warnings'
371+ ].join('\n'),
372+ 'should report'
457373 );
458−
459− st.end();
460374 });
461375 });
462376});