diff --git a/lib/repl.js b/lib/repl.js index 4e2356135708ea..38f66f0b2b10aa 100644 --- a/lib/repl.js +++ b/lib/repl.js @@ -994,7 +994,7 @@ function isRecoverableError(e, self) { self._inTemplateLiteral = true; return true; } - return /^(Unexpected end of input|Unexpected token :)/.test(message); + return /^(Unexpected end of input|Unexpected token)/.test(message); } return false; } diff --git a/test/parallel/test-repl-unexpected-token-recoverable.js b/test/parallel/test-repl-unexpected-token-recoverable.js new file mode 100644 index 00000000000000..4cfaa5136b6a55 --- /dev/null +++ b/test/parallel/test-repl-unexpected-token-recoverable.js @@ -0,0 +1,33 @@ +'use strict'; +/* + * This is a regression test for https://github.com/joyent/node/issues/8874. + */ +var common = require('../common'); +var assert = require('assert'); + +var spawn = require('child_process').spawn; +// use -i to force node into interactive mode, despite stdout not being a TTY +var args = [ '-i' ]; +var child = spawn(process.execPath, args); + +var input = 'var foo = "bar\\\nbaz"'; +// Match '...' as well since it marks a multi-line statement +var expectOut = /^> ... undefined\n/; + +child.stderr.setEncoding('utf8'); +child.stderr.on('data', function(c) { + throw new Error('child.stderr be silent'); +}); + +child.stdout.setEncoding('utf8'); +var out = ''; +child.stdout.on('data', function(c) { + out += c; +}); + +child.stdout.on('end', function() { + assert(expectOut.test(out)); + console.log('ok'); +}); + +child.stdin.end(input);