From f476ecec07ad8a6483fbe7c57c908acdfb8832ff Mon Sep 17 00:00:00 2001 From: Kanchalai Tanglertsampan Date: Mon, 5 Jun 2017 20:23:23 -0700 Subject: [PATCH] Wip-report error when sof happen while running in parallel --- scripts/mocha-parallel.js | 40 +++++++++++++++++++++++++++++++++++---- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/scripts/mocha-parallel.js b/scripts/mocha-parallel.js index ce40c832b21..95072ece27c 100644 --- a/scripts/mocha-parallel.js +++ b/scripts/mocha-parallel.js @@ -72,6 +72,7 @@ function runTests(taskConfigsFolder, run, options, cb) { current: undefined, start: undefined, end: undefined, + catastrophicError: "", failures: [] }; partitions[index] = partition; @@ -86,9 +87,20 @@ function runTests(taskConfigsFolder, run, options, cb) { input: p.stdout, terminal: false }); + + var rlError = readline.createInterface({ + input: p.stderr, + terminal: false + }) + rl.on("line", onmessage); + rlError.on("line", onErrorMessage); p.on("exit", onexit) + function onErrorMessage(line) { + partition.catastrophicError += line + os.EOL; + } + function onmessage(line) { if (partition.start === undefined) { partition.start = Date.now(); @@ -153,15 +165,19 @@ function runTests(taskConfigsFolder, run, options, cb) { } } - function onexit() { + function onexit(code) { if (partition.end === undefined) { partition.end = Date.now(); } partition.duration = partition.end - partition.start; - var summaryColor = partition.failed ? "fail" : "green"; - var summarySymbol = partition.failed ? Base.symbols.err : Base.symbols.ok; - var summaryTests = (partition.passed === partition.tests ? partition.passed : partition.passed + "/" + partition.tests) + " passing"; + var isPartitionFail = partition.failed || code !== 0; + var summaryColor = isPartitionFail ? "fail" : "green"; + var summarySymbol = isPartitionFail ? Base.symbols.err : Base.symbols.ok; + if (partition.passed === 54107) { + console.log(partition); + } + var summaryTests = (isPartitionFail ? partition.passed + "/" + partition.tests : partition.passed) + " passssssing"; var summaryDuration = "(" + ms(partition.duration) + ")"; var savedUseColors = Base.useColors; Base.useColors = !options.noColors; @@ -198,12 +214,25 @@ function runTests(taskConfigsFolder, run, options, cb) { failures = reporter.failures; var duration = 0; + var catastrophicError = ""; for (var i = 0; i < numPartitions; i++) { var partition = partitions[i]; stats.passes += partition.passed; stats.failures += partition.failed; stats.tests += partition.tests; duration += partition.duration; + if (partition.catastrophicError !== "") { + //{"light":false, + // "tasks":[{"runner":"compiler","files":["tests/cases/compiler/es6ImportNamedImportParsingError.ts"]}], + // "runUnitTests":false} + var jsonText = fs.readFileSync(partition.file); + var configObj = JSON.parse(jsonText); + if (configObj.tasks && configObj.tasks[0]) { + catastrophicError += "Error from one or more of these files: " + configObj.tasks[0].files + os.EOL; + catastrophicError += partition.catastrophicError; + catastrophicError += os.EOL; + } + } for (var j = 0; j < partition.failures.length; j++) { var failure = partition.failures[j]; failures.push(makeMochaTest(failure)); @@ -223,6 +252,9 @@ function runTests(taskConfigsFolder, run, options, cb) { reporter.epilogue(); } + if (catastrophicError !== "") { + return cb(new Error(catastrophicError)); + } if (stats.failures) { return cb(new Error("Test failures reported: " + stats.failures)); }