Skip to content

Commit 9a041d7

Browse files
author
Marcin Rudolf
committedSep 29, 2017
reads trace file line by line
readFileSync does not read large files nodejs/node#9489
1 parent dfd6742 commit 9a041d7

File tree

1 file changed

+32
-27
lines changed

1 file changed

+32
-27
lines changed
 

‎lib/app.js

+32-27
Original file line numberDiff line numberDiff line change
@@ -185,15 +185,6 @@ class App {
185185
this.testsErrored = shell.error();
186186
shell.cd('./..');
187187
} catch (err) {
188-
this.cleanUp(err);
189-
}
190-
191-
// Get events fired during instrumented contracts execution.
192-
try {
193-
this.events = fs.readFileSync('./allFiredEvents').toString().split('\n');
194-
this.events.pop();
195-
} catch (err) {
196-
const msg =
197188
`
198189
There was an error generating coverage. Possible reasons include:
199190
1. Another application is using port ${this.port}
@@ -212,25 +203,39 @@ class App {
212203
const reporter = new istanbul.Reporter();
213204

214205
return new Promise((resolve, reject) => {
215-
try {
216-
this.coverage.generate(this.events, `${this.workingDir}/contracts`);
217-
218-
const json = JSON.stringify(this.coverage.coverage);
219-
fs.writeFileSync('./coverage.json', json);
220-
221-
collector.add(this.coverage.coverage);
222-
reporter.add('html');
223-
reporter.add('lcov');
224-
reporter.add('text');
225-
reporter.write(collector, true, () => {
226-
this.log('Istanbul coverage reports generated');
227-
this.cleanUp();
228-
resolve();
206+
// Get events fired during instrumented contracts execution.
207+
const stream = fs.createReadStream(`${this.workingDir}/allFiredEvents`);
208+
stream.on('error', (err) => this.cleanUp('Event trace file not found.\n' + err));
209+
const reader = require('readline').createInterface({
210+
input: stream
211+
});
212+
this.events = [];
213+
reader
214+
.on('line', (line) => this.events.push(line))
215+
.on('close', () => {
216+
// Generate Istanbul report
217+
try {
218+
// console.log(`got ${this.events.length} events`);
219+
this.coverage.generate(this.events, `${this.workingDir}/contracts`);
220+
221+
const json = JSON.stringify(this.coverage.coverage);
222+
fs.writeFileSync('./coverage.json', json);
223+
224+
collector.add(this.coverage.coverage);
225+
reporter.add('html');
226+
reporter.add('lcov');
227+
reporter.add('text');
228+
reporter.write(collector, true, () => {
229+
this.log('Istanbul coverage reports generated');
230+
this.cleanUp();
231+
resolve();
232+
});
233+
} catch (err) {
234+
const msg = 'There was a problem generating the coverage map / running Istanbul.\n';
235+
console.log(err.stack);
236+
this.cleanUp(msg + err);
237+
}
229238
});
230-
} catch (err) {
231-
const msg = 'There was a problem generating the coverage map / running Istanbul.\n';
232-
this.cleanUp(msg + err);
233-
}
234239
});
235240
}
236241

0 commit comments

Comments
 (0)
Please sign in to comment.