Skip to content

Commit 3481500

Browse files
committed
fix(runner): Remove null characters from terminal output
Remove the null characters from the output printed by not replacing the "tail" with `\x00`. An buffer slice is returned when necessary. Closes #1343
1 parent 3f1d934 commit 3481500

2 files changed

Lines changed: 33 additions & 23 deletions

File tree

lib/runner.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,24 +10,23 @@ var parseExitCode = function (buffer, defaultCode, failOnEmptyTestSuite) {
1010
var tailPos = buffer.length - Buffer.byteLength(constant.EXIT_CODE) - 2
1111

1212
if (tailPos < 0) {
13-
return defaultCode
13+
return {exitCode: defaultCode, buffer: buffer}
1414
}
1515

1616
// tail buffer which might contain the message
1717
var tail = buffer.slice(tailPos)
1818
var tailStr = tail.toString()
1919
if (tailStr.substr(0, tailStr.length - 2) === constant.EXIT_CODE) {
20-
tail.fill('\x00')
2120
var emptyInt = parseInt(tailStr.substr(-2, 1), 10)
2221
var exitCode = parseInt(tailStr.substr(-1), 10)
2322
if (failOnEmptyTestSuite === false && emptyInt === 0) {
2423
log.warn('Test suite was empty.')
25-
return 0
24+
exitCode = 0
2625
}
27-
return exitCode
26+
return {exitCode: exitCode, buffer: buffer.slice(0, tailPos)}
2827
}
2928

30-
return defaultCode
29+
return {exitCode: defaultCode, buffer: buffer}
3130
}
3231

3332
// TODO(vojta): read config file (port, host, urlRoot)
@@ -50,8 +49,9 @@ exports.run = function (config, done) {
5049

5150
var request = http.request(options, function (response) {
5251
response.on('data', function (buffer) {
53-
exitCode = parseExitCode(buffer, exitCode, config.failOnEmptyTestSuite)
54-
process.stdout.write(buffer)
52+
var parsedResult = parseExitCode(buffer, exitCode, config.failOnEmptyTestSuite)
53+
exitCode = parsedResult.exitCode
54+
process.stdout.write(parsedResult.buffer)
5555
})
5656

5757
response.on('end', function () {

test/unit/runner.spec.js

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -12,23 +12,26 @@ describe('runner', () => {
1212
var EXIT = constant.EXIT_CODE
1313

1414
it('should return 0 exit code if present in the buffer', () => {
15-
expect(m.parseExitCode(new Buffer(`something\nfake${EXIT}10`))).to.equal(0)
15+
var result = m.parseExitCode(new Buffer(`something\nfake${EXIT}10`))
16+
expect(result.exitCode).to.equal(0)
1617
})
1718

18-
it('should null the exit code part of the buffer', () => {
19+
it('should remove the exit code part of the returned buffer', () => {
1920
var buffer = new Buffer(`some${EXIT}01`)
20-
m.parseExitCode(buffer)
21+
var result = m.parseExitCode(buffer)
2122

22-
expect(buffer.toString()).to.equal('some\0\0\0\0\0\0\0')
23+
expect(buffer.toString()).to.equal(`some${EXIT}01`)
24+
expect(result.buffer.toString()).to.equal('some')
2325
})
2426

2527
it('should not touch buffer without exit code and return default', () => {
2628
var msg = 'some nice \n messgae {}'
2729
var buffer = new Buffer(msg)
28-
var code = m.parseExitCode(buffer, 10)
30+
var result = m.parseExitCode(buffer, 10)
2931

30-
expect(buffer.toString()).to.equal(msg)
31-
expect(code).to.equal(10)
32+
expect(result.buffer.toString()).to.equal(msg)
33+
expect(result.buffer).to.equal(buffer)
34+
expect(result.exitCode).to.equal(10)
3235
})
3336

3437
it('should not slice buffer if smaller than exit code msg', () => {
@@ -40,22 +43,29 @@ describe('runner', () => {
4043
expect(fakeBuffer.slice).not.to.have.been.called
4144
})
4245

46+
it('should return same buffer if smaller than exit code msg', () => {
47+
// regression
48+
var fakeBuffer = {length: 1, slice: () => null}
49+
var result = m.parseExitCode(fakeBuffer, 10)
50+
expect(fakeBuffer).to.equal(result.buffer)
51+
})
52+
4353
it('should parse any single digit exit code', () => {
44-
expect(m.parseExitCode(new Buffer(`something\nfake${EXIT}01`))).to.equal(1)
45-
expect(m.parseExitCode(new Buffer(`something\nfake${EXIT}17`))).to.equal(7)
54+
expect(m.parseExitCode(new Buffer(`something\nfake${EXIT}01`)).exitCode).to.equal(1)
55+
expect(m.parseExitCode(new Buffer(`something\nfake${EXIT}17`)).exitCode).to.equal(7)
4656
})
4757

4858
it('should return exit code 0 if failOnEmptyTestSuite is false and and non-empty int is 0', () => {
49-
expect(m.parseExitCode(new Buffer(`something\nfake${EXIT}01`), undefined, false)).to.equal(0)
59+
expect(m.parseExitCode(new Buffer(`something\nfake${EXIT}01`), undefined, false).exitCode).to.equal(0)
5060
})
5161

5262
it('should return exit code if failOnEmptyTestSuite is true', () => {
53-
expect(m.parseExitCode(new Buffer(`something\nfake${EXIT}00`), undefined, true)).to.equal(0)
54-
expect(m.parseExitCode(new Buffer(`something\nfake${EXIT}01`), undefined, true)).to.equal(1)
55-
expect(m.parseExitCode(new Buffer(`something\nfake${EXIT}07`), undefined, true)).to.equal(7)
56-
expect(m.parseExitCode(new Buffer(`something\nfake${EXIT}10`), undefined, true)).to.equal(0)
57-
expect(m.parseExitCode(new Buffer(`something\nfake${EXIT}11`), undefined, true)).to.equal(1)
58-
expect(m.parseExitCode(new Buffer(`something\nfake${EXIT}17`), undefined, true)).to.equal(7)
63+
expect(m.parseExitCode(new Buffer(`something\nfake${EXIT}00`), undefined, true).exitCode).to.equal(0)
64+
expect(m.parseExitCode(new Buffer(`something\nfake${EXIT}01`), undefined, true).exitCode).to.equal(1)
65+
expect(m.parseExitCode(new Buffer(`something\nfake${EXIT}07`), undefined, true).exitCode).to.equal(7)
66+
expect(m.parseExitCode(new Buffer(`something\nfake${EXIT}10`), undefined, true).exitCode).to.equal(0)
67+
expect(m.parseExitCode(new Buffer(`something\nfake${EXIT}11`), undefined, true).exitCode).to.equal(1)
68+
expect(m.parseExitCode(new Buffer(`something\nfake${EXIT}17`), undefined, true).exitCode).to.equal(7)
5969
})
6070
})
6171
})

0 commit comments

Comments
 (0)