| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -0,0 +1,31 @@ | |||
| 1 | + 'use strict'; | ||
| 2 | + | ||
| 3 | + const ArrayStream = require('../common/arraystream'); | ||
| 4 | + const repl = require('node:repl'); | ||
| 5 | + const assert = require('node:assert'); | ||
| 6 | + | ||
| 7 | + function startNewREPLServer(replOpts = {}, testingOpts = {}) { | ||
| 8 | + const input = new ArrayStream(); | ||
| 9 | + const output = new ArrayStream(); | ||
| 10 | + | ||
| 11 | + output.accumulator = ''; | ||
| 12 | + output.write = (data) => (output.accumulator += `${data}`.replaceAll('\r', '')); | ||
| 13 | + | ||
| 14 | + const replServer = repl.start({ | ||
| 15 | + prompt: '', | ||
| 16 | + input, | ||
| 17 | + output, | ||
| 18 | + terminal: true, | ||
| 19 | + allowBlockingCompletions: true, | ||
| 20 | + ...replOpts, | ||
| 21 | + }); | ||
| 22 | + | ||
| 23 | + if (!testingOpts.disableDomainErrorAssert) { | ||
| 24 | + // Some errors are passed to the domain, but do not callback | ||
| 25 | + replServer._domain.on('error', assert.ifError); | ||
| 26 | + } | ||
| 27 | + | ||
| 28 | + return { replServer, input, output }; | ||
| 29 | + } | ||
| 30 | + | ||
| 31 | + module.exports = { startNewREPLServer }; | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -22,12 +22,12 @@ | |||
| 22 | 22 | 'use strict'; | |
| 23 | 23 | const common = require('../common'); | |
| 24 | 24 | const ArrayStream = require('../common/arraystream'); | |
| 25 | + const { startNewREPLServer } = require('../common/repl'); | ||
| 25 | 26 | const assert = require('assert'); | |
| 26 | 27 | const util = require('util'); | |
| 27 | - const repl = require('repl'); | ||
| 28 | 28 | ||
| 29 | 29 | const putIn = new ArrayStream(); | |
| 30 | - repl.start('', putIn, null, true); | ||
| 30 | + startNewREPLServer({ input: putIn, output: putIn, useGlobal: true, terminal: false }); | ||
| 31 | 31 | ||
| 32 | 32 | test1(); | |
| 33 | 33 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -4,19 +4,11 @@ const common = require('../common'); | |||
| 4 | 4 | const assert = require('node:assert'); | |
| 5 | 5 | const { describe, test } = require('node:test'); | |
| 6 | 6 | ||
| 7 | - const ArrayStream = require('../common/arraystream'); | ||
| 8 | - | ||
| 9 | - const repl = require('node:repl'); | ||
| 7 | + const { startNewREPLServer } = require('../common/repl'); | ||
| 10 | 8 | ||
| 11 | 9 | function runCompletionTests(replInit, tests) { | |
| 12 | - const stream = new ArrayStream(); | ||
| 13 | - const testRepl = repl.start({ stream }); | ||
| 14 | - | ||
| 15 | - // Some errors are passed to the domain | ||
| 16 | - testRepl._domain.on('error', assert.ifError); | ||
| 17 | - | ||
| 18 | - testRepl.write(replInit); | ||
| 19 | - testRepl.write('\n'); | ||
| 10 | + const { replServer: testRepl, input } = startNewREPLServer(); | ||
| 11 | + input.run([replInit]); | ||
| 20 | 12 | ||
| 21 | 13 | tests.forEach(([query, expectedCompletions]) => { | |
| 22 | 14 | testRepl.complete(query, common.mustCall((error, data) => { | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1,38 +1,28 @@ | |||
| 1 | 1 | 'use strict'; | |
| 2 | 2 | require('../common'); | |
| 3 | - const ArrayStream = require('../common/arraystream'); | ||
| 4 | 3 | const assert = require('assert'); | |
| 5 | - const repl = require('repl'); | ||
| 6 | 4 | const vm = require('vm'); | |
| 7 | - | ||
| 8 | - // Create a dummy stream that does nothing. | ||
| 9 | - const stream = new ArrayStream(); | ||
| 5 | + const { startNewREPLServer } = require('../common/repl'); | ||
| 10 | 6 | ||
| 11 | 7 | // Test context when useGlobal is false. | |
| 12 | 8 | { | |
| 13 | - const r = repl.start({ | ||
| 14 | - input: stream, | ||
| 15 | - output: stream, | ||
| 9 | + const { replServer, output } = startNewREPLServer({ | ||
| 10 | + terminal: false, | ||
| 16 | 11 | useGlobal: false | |
| 17 | 12 | }); | |
| 18 | 13 | ||
| 19 | - let output = ''; | ||
| 20 | - stream.write = function(d) { | ||
| 21 | - output += d; | ||
| 22 | - }; | ||
| 23 | - | ||
| 24 | 14 | // Ensure that the repl context gets its own "console" instance. | |
| 25 | - assert(r.context.console); | ||
| 15 | + assert(replServer.context.console); | ||
| 26 | 16 | ||
| 27 | 17 | // Ensure that the repl console instance is not the global one. | |
| 28 | - assert.notStrictEqual(r.context.console, console); | ||
| 29 | - assert.notStrictEqual(r.context.Object, Object); | ||
| 18 | + assert.notStrictEqual(replServer.context.console, console); | ||
| 19 | + assert.notStrictEqual(replServer.context.Object, Object); | ||
| 30 | 20 | ||
| 31 | - stream.run(['({} instanceof Object)']); | ||
| 21 | + replServer.write('({} instanceof Object)\n'); | ||
| 32 | 22 | ||
| 33 | - assert.strictEqual(output, 'true\n> '); | ||
| 23 | + assert.strictEqual(output.accumulator, 'true\n'); | ||
| 34 | 24 | ||
| 35 | - const context = r.createContext(); | ||
| 25 | + const context = replServer.createContext(); | ||
| 36 | 26 | // Ensure that the repl context gets its own "console" instance. | |
| 37 | 27 | assert(context.console instanceof require('console').Console); | |
| 38 | 28 | ||
@@ -41,44 +31,46 @@ const stream = new ArrayStream(); | |||
| 41 | 31 | ||
| 42 | 32 | // Ensure that the repl console instance is writable. | |
| 43 | 33 | context.console = 'foo'; | |
| 44 | - r.close(); | ||
| 34 | + replServer.close(); | ||
| 45 | 35 | } | |
| 46 | 36 | ||
| 47 | 37 | // Test for context side effects. | |
| 48 | 38 | { | |
| 49 | - const server = repl.start({ input: stream, output: stream }); | ||
| 39 | + const { replServer } = startNewREPLServer({ | ||
| 40 | + useGlobal: false | ||
| 41 | + }); | ||
| 50 | 42 | ||
| 51 | - assert.ok(!server.underscoreAssigned); | ||
| 52 | - assert.strictEqual(server.lines.length, 0); | ||
| 43 | + assert.ok(!replServer.underscoreAssigned); | ||
| 44 | + assert.strictEqual(replServer.lines.length, 0); | ||
| 53 | 45 | ||
| 54 | 46 | // An assignment to '_' in the repl server | |
| 55 | - server.write('_ = 500;\n'); | ||
| 56 | - assert.ok(server.underscoreAssigned); | ||
| 57 | - assert.strictEqual(server.lines.length, 1); | ||
| 58 | - assert.strictEqual(server.lines[0], '_ = 500;'); | ||
| 59 | - assert.strictEqual(server.last, 500); | ||
| 47 | + replServer.write('_ = 500;\n'); | ||
| 48 | + assert.ok(replServer.underscoreAssigned); | ||
| 49 | + assert.strictEqual(replServer.lines.length, 1); | ||
| 50 | + assert.strictEqual(replServer.lines[0], '_ = 500;'); | ||
| 51 | + assert.strictEqual(replServer.last, 500); | ||
| 60 | 52 | ||
| 61 | 53 | // Use the server to create a new context | |
| 62 | - const context = server.createContext(); | ||
| 54 | + const context = replServer.createContext(); | ||
| 63 | 55 | ||
| 64 | 56 | // Ensure that creating a new context does not | |
| 65 | 57 | // have side effects on the server | |
| 66 | - assert.ok(server.underscoreAssigned); | ||
| 67 | - assert.strictEqual(server.lines.length, 1); | ||
| 68 | - assert.strictEqual(server.lines[0], '_ = 500;'); | ||
| 69 | - assert.strictEqual(server.last, 500); | ||
| 58 | + assert.ok(replServer.underscoreAssigned); | ||
| 59 | + assert.strictEqual(replServer.lines.length, 1); | ||
| 60 | + assert.strictEqual(replServer.lines[0], '_ = 500;'); | ||
| 61 | + assert.strictEqual(replServer.last, 500); | ||
| 70 | 62 | ||
| 71 | 63 | // Reset the server context | |
| 72 | - server.resetContext(); | ||
| 73 | - assert.ok(!server.underscoreAssigned); | ||
| 74 | - assert.strictEqual(server.lines.length, 0); | ||
| 64 | + replServer.resetContext(); | ||
| 65 | + assert.ok(!replServer.underscoreAssigned); | ||
| 66 | + assert.strictEqual(replServer.lines.length, 0); | ||
| 75 | 67 | ||
| 76 | 68 | // Ensure that assigning to '_' in the new context | |
| 77 | 69 | // does not change the value in our server. | |
| 78 | - assert.ok(!server.underscoreAssigned); | ||
| 70 | + assert.ok(!replServer.underscoreAssigned); | ||
| 79 | 71 | vm.runInContext('_ = 1000;\n', context); | |
| 80 | 72 | ||
| 81 | - assert.ok(!server.underscoreAssigned); | ||
| 82 | - assert.strictEqual(server.lines.length, 0); | ||
| 83 | - server.close(); | ||
| 73 | + assert.ok(!replServer.underscoreAssigned); | ||
| 74 | + assert.strictEqual(replServer.lines.length, 0); | ||
| 75 | + replServer.close(); | ||
| 84 | 76 | } | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1,44 +1,35 @@ | |||
| 1 | 1 | 'use strict'; | |
| 2 | 2 | ||
| 3 | 3 | const common = require('../common'); | |
| 4 | - const ArrayStream = require('../common/arraystream'); | ||
| 5 | 4 | const assert = require('assert'); | |
| 6 | 5 | const { describe, it } = require('node:test'); | |
| 7 | 6 | ||
| 8 | 7 | common.skipIfInspectorDisabled(); | |
| 9 | 8 | ||
| 10 | - const repl = require('repl'); | ||
| 9 | + const { startNewREPLServer } = require('../common/repl'); | ||
| 11 | 10 | ||
| 12 | 11 | const testingReplPrompt = '_REPL_TESTING_PROMPT_>'; | |
| 13 | 12 | ||
| 14 | 13 | // Processes some input in a REPL instance and returns a promise that | |
| 15 | 14 | // resolves to the produced output (as a string). | |
| 16 | - function getReplRunOutput(input, replOptions) { | ||
| 15 | + function getReplRunOutput(inputStr, replOptions) { | ||
| 17 | 16 | return new Promise((resolve) => { | |
| 18 | - const inputStream = new ArrayStream(); | ||
| 19 | - const outputStream = new ArrayStream(); | ||
| 17 | + const { replServer, input, output } = startNewREPLServer({ prompt: testingReplPrompt, ...replOptions }); | ||
| 20 | 18 | ||
| 21 | - const replServer = repl.start({ | ||
| 22 | - input: inputStream, | ||
| 23 | - output: outputStream, | ||
| 24 | - prompt: testingReplPrompt, | ||
| 25 | - ...replOptions, | ||
| 26 | - }); | ||
| 19 | + output.accumulator = ''; | ||
| 27 | 20 | ||
| 28 | - let output = ''; | ||
| 29 | - | ||
| 30 | - outputStream.write = (chunk) => { | ||
| 31 | - output += chunk; | ||
| 21 | + output.write = (chunk) => { | ||
| 22 | + output.accumulator += chunk; | ||
| 32 | 23 | // The prompt appears after the input has been processed | |
| 33 | - if (output.includes(testingReplPrompt)) { | ||
| 24 | + if (output.accumulator.includes(testingReplPrompt)) { | ||
| 34 | 25 | replServer.close(); | |
| 35 | - resolve(output); | ||
| 26 | + resolve(output.accumulator); | ||
| 36 | 27 | } | |
| 37 | 28 | }; | |
| 38 | 29 | ||
| 39 | - inputStream.emit('data', input); | ||
| 30 | + input.emit('data', inputStr); | ||
| 40 | 31 | ||
| 41 | - inputStream.run(['']); | ||
| 32 | + input.run(['']); | ||
| 42 | 33 | }); | |
| 43 | 34 | } | |
| 44 | 35 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1,42 +1,32 @@ | |||
| 1 | 1 | 'use strict'; | |
| 2 | 2 | ||
| 3 | 3 | require('../common'); | |
| 4 | - const ArrayStream = require('../common/arraystream'); | ||
| 4 | + const { startNewREPLServer } = require('../common/repl'); | ||
| 5 | 5 | const assert = require('assert'); | |
| 6 | 6 | const { describe, it } = require('node:test'); | |
| 7 | 7 | ||
| 8 | - const repl = require('repl'); | ||
| 8 | + const testingReplPrompt = '_REPL_TESTING_PROMPT_>'; | ||
| 9 | 9 | ||
| 10 | 10 | // Processes some input in a REPL instance and returns a promise that | |
| 11 | 11 | // resolves to the produced output (as a string). | |
| 12 | - function getReplRunOutput(input, replOptions) { | ||
| 12 | + function getReplRunOutput(inputStr, replOptions) { | ||
| 13 | 13 | return new Promise((resolve) => { | |
| 14 | - const inputStream = new ArrayStream(); | ||
| 15 | - const outputStream = new ArrayStream(); | ||
| 14 | + const { replServer, input, output } = startNewREPLServer({ prompt: testingReplPrompt, ...replOptions }); | ||
| 16 | 15 | ||
| 17 | - const testingReplPrompt = '_REPL_TESTING_PROMPT_>'; | ||
| 16 | + output.accumulator = ''; | ||
| 18 | 17 | ||
| 19 | - const replServer = repl.start({ | ||
| 20 | - input: inputStream, | ||
| 21 | - output: outputStream, | ||
| 22 | - prompt: testingReplPrompt, | ||
| 23 | - ...replOptions, | ||
| 24 | - }); | ||
| 25 | - | ||
| 26 | - let output = ''; | ||
| 27 | - | ||
| 28 | - outputStream.write = (chunk) => { | ||
| 29 | - output += chunk; | ||
| 18 | + output.write = (chunk) => { | ||
| 19 | + output.accumulator += chunk; | ||
| 30 | 20 | // The prompt appears after the input has been processed | |
| 31 | - if (output.includes(testingReplPrompt)) { | ||
| 21 | + if (output.accumulator.includes(testingReplPrompt)) { | ||
| 32 | 22 | replServer.close(); | |
| 33 | - resolve(output); | ||
| 23 | + resolve(output.accumulator); | ||
| 34 | 24 | } | |
| 35 | 25 | }; | |
| 36 | 26 | ||
| 37 | - inputStream.emit('data', input); | ||
| 27 | + input.emit('data', inputStr); | ||
| 38 | 28 | ||
| 39 | - inputStream.run(['']); | ||
| 29 | + input.run(['']); | ||
| 40 | 30 | }); | |
| 41 | 31 | } | |
| 42 | 32 | ||
@@ -62,23 +52,23 @@ describe('repl with custom eval', { concurrency: true }, () => { | |||
| 62 | 52 | ||
| 63 | 53 | it('provides a repl context to the eval callback', async () => { | |
| 64 | 54 | const context = await new Promise((resolve) => { | |
| 65 | - const r = repl.start({ | ||
| 55 | + const { replServer } = startNewREPLServer({ | ||
| 66 | 56 | eval: (_cmd, context) => resolve(context), | |
| 67 | 57 | }); | |
| 68 | - r.context = { foo: 'bar' }; | ||
| 69 | - r.write('\n.exit\n'); | ||
| 58 | + replServer.context = { foo: 'bar' }; | ||
| 59 | + replServer.write('\n.exit\n'); | ||
| 70 | 60 | }); | |
| 71 | 61 | assert.strictEqual(context.foo, 'bar'); | |
| 72 | 62 | }); | |
| 73 | 63 | ||
| 74 | 64 | it('provides the global context to the eval callback', async () => { | |
| 75 | 65 | const context = await new Promise((resolve) => { | |
| 76 | - const r = repl.start({ | ||
| 77 | - useGlobal: true, | ||
| 66 | + const { replServer } = startNewREPLServer({ | ||
| 78 | 67 | eval: (_cmd, context) => resolve(context), | |
| 68 | + useGlobal: true | ||
| 79 | 69 | }); | |
| 80 | 70 | global.foo = 'global_foo'; | |
| 81 | - r.write('\n.exit\n'); | ||
| 71 | + replServer.write('\n.exit\n'); | ||
| 82 | 72 | }); | |
| 83 | 73 | ||
| 84 | 74 | assert.strictEqual(context.foo, 'global_foo'); | |
@@ -88,12 +78,12 @@ describe('repl with custom eval', { concurrency: true }, () => { | |||
| 88 | 78 | it('inherits variables from the global context but does not use it afterwords if `useGlobal` is false', async () => { | |
| 89 | 79 | global.bar = 'global_bar'; | |
| 90 | 80 | const context = await new Promise((resolve) => { | |
| 91 | - const r = repl.start({ | ||
| 81 | + const { replServer } = startNewREPLServer({ | ||
| 92 | 82 | useGlobal: false, | |
| 93 | 83 | eval: (_cmd, context) => resolve(context), | |
| 94 | 84 | }); | |
| 95 | 85 | global.baz = 'global_baz'; | |
| 96 | - r.write('\n.exit\n'); | ||
| 86 | + replServer.write('\n.exit\n'); | ||
| 97 | 87 | }); | |
| 98 | 88 | ||
| 99 | 89 | assert.strictEqual(context.bar, 'global_bar'); | |
@@ -111,10 +101,10 @@ describe('repl with custom eval', { concurrency: true }, () => { | |||
| 111 | 101 | */ | |
| 112 | 102 | it('preserves the original input', async () => { | |
| 113 | 103 | const cmd = await new Promise((resolve) => { | |
| 114 | - const r = repl.start({ | ||
| 104 | + const { replServer } = startNewREPLServer({ | ||
| 115 | 105 | eval: (cmd) => resolve(cmd), | |
| 116 | 106 | }); | |
| 117 | - r.write('function f() {}\n.exit\n'); | ||
| 107 | + replServer.write('function f() {}\n.exit\n'); | ||
| 118 | 108 | }); | |
| 119 | 109 | assert.strictEqual(cmd, 'function f() {}\n'); | |
| 120 | 110 | }); | |
| Back | FazBrowse Home | New Git URL |
0 commit comments