Skip to content

Commit 97f5e21

Browse files
committed
fix node invalid errors
1 parent bf7348e commit 97f5e21

File tree

2 files changed

+61
-21
lines changed

2 files changed

+61
-21
lines changed

scripts/DocTests.mjs

Lines changed: 40 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -329,18 +329,45 @@ async function runtimeTests(code) {
329329
cwd: compilerDir,
330330
timeout: 2000
331331
});
332+
var exitCode = match.code;
332333
var stderr = match.stderr;
333-
if (stderr.length > 0) {
334+
var stdout = match.stdout;
335+
var std;
336+
var exit = 0;
337+
if (exitCode !== null) {
338+
if (exitCode === 0.0 && stderr.length > 0) {
339+
std = {
340+
TAG: "Ok",
341+
_0: stderr
342+
};
343+
} else if (exitCode === 0.0) {
344+
std = {
345+
TAG: "Ok",
346+
_0: stdout
347+
};
348+
} else {
349+
exit = 1;
350+
}
351+
} else {
352+
exit = 1;
353+
}
354+
if (exit === 1) {
355+
std = {
356+
TAG: "Error",
357+
_0: stderr.length > 0 ? stderr : stdout
358+
};
359+
}
360+
if (std.TAG === "Ok") {
334361
return {
335-
TAG: "Error",
336-
_0: stderr.map(function (e) {
362+
TAG: "Ok",
363+
_0: std._0.map(function (e) {
337364
return e.toString();
338365
}).join("")
339366
};
340367
} else {
341368
return {
342-
TAG: "Ok",
343-
_0: match.stdout.map(function (e) {
369+
TAG: "Error",
370+
_0: std._0.map(function (e) {
344371
return e.toString();
345372
}).join("")
346373
};
@@ -410,7 +437,7 @@ async function compilerResults() {
410437
]
411438
];
412439
});
413-
var errors = await Promise.all(examples.map(async function (param) {
440+
var exampleErrors = await Promise.all(examples.map(async function (param) {
414441
var match = param[1];
415442
var nodeTests = await Promise.all(match[0].map(async function (param) {
416443
var js = param[1];
@@ -438,7 +465,7 @@ async function compilerResults() {
438465
runtimeErrors.concat(match[1])
439466
];
440467
}));
441-
errors.forEach(function (param) {
468+
exampleErrors.forEach(function (param) {
442469
var example = param[0];
443470
var cyan = function (s) {
444471
return "\x1b[36m" + s + "\x1b[0m";
@@ -459,10 +486,13 @@ async function compilerResults() {
459486
process.stderr.write(e);
460487
});
461488
});
462-
if (errors.length === 0) {
463-
return 0;
464-
} else {
489+
var someError = exampleErrors.some(function (param) {
490+
return param[1].length > 0;
491+
});
492+
if (someError) {
465493
return 1;
494+
} else {
495+
return 0;
466496
}
467497
}
468498

scripts/DocTests.res

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,7 @@ let getCodeBlocks = example => {
297297
}
298298

299299
let runtimeTests = async code => {
300-
let {stdout, stderr} = await SpawnAsync.run(
300+
let {stdout, stderr, code: exitCode} = await SpawnAsync.run(
301301
~command="node",
302302
~args=["-e", code],
303303
~options={
@@ -306,17 +306,25 @@ let runtimeTests = async code => {
306306
},
307307
)
308308

309-
switch Array.length(stderr) > 0 {
310-
| true =>
311-
stderr
309+
// Some expressions, like, `console.error("error")` is printed to stderr but
310+
// exit code is 0
311+
let std = switch exitCode->Null.toOption {
312+
| Some(exitCode) if exitCode == 0.0 && Array.length(stderr) > 0 => stderr->Ok
313+
| Some(exitCode) if exitCode == 0.0 => stdout->Ok
314+
| None | Some(_) => Error(Array.length(stderr) > 0 ? stderr : stdout)
315+
}
316+
317+
switch std {
318+
| Ok(buf) =>
319+
buf
312320
->Array.map(e => e->Buffer.toString)
313321
->Array.join("")
314-
->Error
315-
| false =>
316-
stdout
322+
->Ok
323+
| Error(buf) =>
324+
buf
317325
->Array.map(e => e->Buffer.toString)
318326
->Array.join("")
319-
->Ok
327+
->Error
320328
}
321329
}
322330

@@ -363,7 +371,7 @@ let compilerResults = async () => {
363371
(example, (compiled, errors))
364372
})
365373

366-
let errors =
374+
let exampleErrors =
367375
await examples
368376
->Array.map(async ((example, (compiled, errors))) => {
369377
let nodeTests =
@@ -383,7 +391,7 @@ let compilerResults = async () => {
383391
->Promise.all
384392

385393
// Print Errors
386-
let () = errors->Array.forEach(((example, errors)) => {
394+
let () = exampleErrors->Array.forEach(((example, errors)) => {
387395
let red = s => `\x1B[1;31m${s}\x1B[0m`
388396
let cyan = s => `\x1b[36m${s}\x1b[0m`
389397
let kind = switch example.kind {
@@ -425,7 +433,9 @@ ${error->indentOutputCode}
425433
errorMessage->Array.forEach(e => Process.stderrWrite(e))
426434
})
427435

428-
errors->Array.length == 0 ? 0 : 1
436+
let someError = exampleErrors->Array.some(((_, err)) => Array.length(err) > 0)
437+
438+
someError ? 1 : 0
429439
}
430440

431441
let exitCode = await compilerResults()

0 commit comments

Comments
 (0)