diff options
author | Ruben Bridgewater <ruben@bridgewater.de> | 2019-07-09 13:36:57 +0200 |
---|---|---|
committer | Rich Trott <rtrott@gmail.com> | 2019-07-17 20:57:51 -0700 |
commit | 6874aa1fb15e815bacf0b0f7e18a434d72de0b4d (patch) | |
tree | 7bc996693f1e391919eebfb3da18d244c864dde7 /test | |
parent | f9388580bd4169a7e3e3d049ca86a7b1e614ee55 (diff) | |
download | android-node-v8-6874aa1fb15e815bacf0b0f7e18a434d72de0b4d.tar.gz android-node-v8-6874aa1fb15e815bacf0b0f7e18a434d72de0b4d.tar.bz2 android-node-v8-6874aa1fb15e815bacf0b0f7e18a434d72de0b4d.zip |
repl: fix autocomplete while using .load
This makes sure that complete functions work as expected after using
the REPL's `.load` command.
It also fixes the corresponding test. So far the assertion where
swallowed and the test passed even though it should not have.
Fixes: https://github.com/nodejs/node/issues/28546
PR-URL: https://github.com/nodejs/node/pull/28608
Reviewed-By: Jiawen Geng <technicalcute@gmail.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Lance Ball <lball@redhat.com>
Reviewed-By: Anto Aravinth <anto.aravinth.cse@gmail.com>
Diffstat (limited to 'test')
-rw-r--r-- | test/parallel/test-repl-load-multiline.js | 1 | ||||
-rw-r--r-- | test/parallel/test-repl-save-load.js | 115 |
2 files changed, 62 insertions, 54 deletions
diff --git a/test/parallel/test-repl-load-multiline.js b/test/parallel/test-repl-load-multiline.js index 87b866c01b..b2bee8d6e4 100644 --- a/test/parallel/test-repl-load-multiline.js +++ b/test/parallel/test-repl-load-multiline.js @@ -13,6 +13,7 @@ const expected = `${command} const getLunch = () => placeOrder('tacos') .then(eat); + const placeOrder = (order) => Promise.resolve(order); const eat = (food) => '<nom nom nom>'; diff --git a/test/parallel/test-repl-save-load.js b/test/parallel/test-repl-save-load.js index d36a2b74d4..66b0f400a9 100644 --- a/test/parallel/test-repl-save-load.js +++ b/test/parallel/test-repl-save-load.js @@ -20,7 +20,7 @@ // USE OR OTHER DEALINGS IN THE SOFTWARE. 'use strict'; -require('../common'); +const common = require('../common'); const ArrayStream = require('../common/arraystream'); const assert = require('assert'); const join = require('path').join; @@ -36,6 +36,12 @@ const works = [['inner.one'], 'inner.o']; const putIn = new ArrayStream(); const testMe = repl.start('', putIn); +// Some errors might be passed to the domain. +testMe._domain.on('error', function(reason) { + const err = new Error('Test failed'); + err.reason = reason; + throw err; +}); const testFile = [ 'var top = function() {', @@ -43,89 +49,90 @@ const testFile = [ ]; const saveFileName = join(tmpdir.path, 'test.save.js'); -// input some data +// Add some data. putIn.run(testFile); -// save it to a file +// Save it to a file. putIn.run([`.save ${saveFileName}`]); -// The file should have what I wrote +// The file should have what I wrote. assert.strictEqual(fs.readFileSync(saveFileName, 'utf8'), - `${testFile.join('\n')}\n`); + testFile.join('\n')); -{ - // save .editor mode code - const cmds = [ - 'function testSave() {', - 'return "saved";', - '}' - ]; - const putIn = new ArrayStream(); - const replServer = repl.start({ terminal: true, stream: putIn }); - - putIn.run(['.editor']); - putIn.run(cmds); - replServer.write('', { ctrl: true, name: 'd' }); - - putIn.run([`.save ${saveFileName}`]); - replServer.close(); - assert.strictEqual(fs.readFileSync(saveFileName, 'utf8'), - `${cmds.join('\n')}\n\n`); -} - -// Make sure that the REPL data is "correct" -// so when I load it back I know I'm good -testMe.complete('inner.o', function(error, data) { +// Make sure that the REPL data is "correct". +testMe.complete('inner.o', common.mustCall(function(error, data) { + assert.ifError(error); assert.deepStrictEqual(data, works); -}); +})); -// clear the REPL +// Clear the REPL. putIn.run(['.clear']); -// Load the file back in +// Load the file back in. putIn.run([`.load ${saveFileName}`]); -// Make sure that the REPL data is "correct" -testMe.complete('inner.o', function(error, data) { +// Make sure that the REPL data is "correct". +testMe.complete('inner.o', common.mustCall(function(error, data) { + assert.ifError(error); assert.deepStrictEqual(data, works); -}); +})); -// clear the REPL +// Clear the REPL. putIn.run(['.clear']); let loadFile = join(tmpdir.path, 'file.does.not.exist'); -// should not break -putIn.write = function(data) { - // Make sure I get a failed to load message and not some crazy error - assert.strictEqual(data, `Failed to load:${loadFile}\n`); - // Eat me to avoid work +// Should not break. +putIn.write = common.mustCall(function(data) { + // Make sure I get a failed to load message and not some crazy error. + assert.strictEqual(data, `Failed to load: ${loadFile}\n`); + // Eat me to avoid work. putIn.write = () => {}; -}; +}); putIn.run([`.load ${loadFile}`]); -// Throw error on loading directory +// Throw error on loading directory. loadFile = tmpdir.path; -putIn.write = function(data) { - assert.strictEqual(data, `Failed to load:${loadFile} is not a valid file\n`); +putIn.write = common.mustCall(function(data) { + assert.strictEqual(data, `Failed to load: ${loadFile} is not a valid file\n`); putIn.write = () => {}; -}; +}); putIn.run([`.load ${loadFile}`]); -// clear the REPL +// Clear the REPL. putIn.run(['.clear']); // NUL (\0) is disallowed in filenames in UNIX-like operating systems and -// Windows so we can use that to test failed saves +// Windows so we can use that to test failed saves. const invalidFileName = join(tmpdir.path, '\0\0\0\0\0'); -// should not break -putIn.write = function(data) { - // Make sure I get a failed to save message and not some other error - assert.strictEqual(data, `Failed to save:${invalidFileName}\n`); - // reset to no-op +// Should not break. +putIn.write = common.mustCall(function(data) { + // Make sure I get a failed to save message and not some other error. + assert.strictEqual(data, `Failed to save: ${invalidFileName}\n`); + // Reset to no-op. putIn.write = () => {}; -}; +}); -// save it to a file +// Save it to a file. putIn.run([`.save ${invalidFileName}`]); + +{ + // Save .editor mode code. + const cmds = [ + 'function testSave() {', + 'return "saved";', + '}' + ]; + const putIn = new ArrayStream(); + const replServer = repl.start({ terminal: true, stream: putIn }); + + putIn.run(['.editor']); + putIn.run(cmds); + replServer.write('', { ctrl: true, name: 'd' }); + + putIn.run([`.save ${saveFileName}`]); + replServer.close(); + assert.strictEqual(fs.readFileSync(saveFileName, 'utf8'), + `${cmds.join('\n')}\n`); +} |