Skip to content

Commit 7328306

Browse files
TrottMylesBorins
authored andcommitted
test,repl: add coverage for repl .clear+useGlobal
Add a test to cover situation where REPL is initialized with `useGlobal` set to `true` and `.clear` is called. This adds coverage for code in repl.js that is not currently covered. Includes minor refactor of rocket functions in repl.js for concision. PR-URL: #10777 Reviewed-By: James M Snell <[email protected]>
1 parent 5321300 commit 7328306

File tree

2 files changed

+30
-8
lines changed

2 files changed

+30
-8
lines changed

lib/repl.js

+5-6
Original file line numberDiff line numberDiff line change
@@ -722,9 +722,7 @@ REPLServer.prototype.createContext = function() {
722722

723723
Object.defineProperty(context, '_', {
724724
configurable: true,
725-
get: () => {
726-
return this.last;
727-
},
725+
get: () => this.last,
728726
set: (value) => {
729727
this.last = value;
730728
if (!this.underscoreAssigned) {
@@ -1266,9 +1264,10 @@ function defineDefaultCommands(repl) {
12661264
help: 'Print this help message',
12671265
action: function() {
12681266
const names = Object.keys(this.commands).sort();
1269-
const longestNameLength = names.reduce((max, name) => {
1270-
return Math.max(max, name.length);
1271-
}, 0);
1267+
const longestNameLength = names.reduce(
1268+
(max, name) => Math.max(max, name.length),
1269+
0
1270+
);
12721271
names.forEach((name) => {
12731272
const cmd = this.commands[name];
12741273
const spaces = ' '.repeat(longestNameLength - name.length + 3);

test/parallel/test-repl-underscore.js

+25-2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ const stream = require('stream');
88
testSloppyMode();
99
testStrictMode();
1010
testResetContext();
11+
testResetContextGlobal();
1112
testMagicMode();
1213

1314
function testSloppyMode() {
@@ -131,7 +132,28 @@ function testResetContext() {
131132
]);
132133
}
133134

134-
function initRepl(mode) {
135+
function testResetContextGlobal() {
136+
const r = initRepl(repl.REPL_MODE_STRICT, true);
137+
138+
r.write(`_ = 10; // explicitly set to 10
139+
_; // 10 from user input
140+
.clear // No output because useGlobal is true
141+
_; // remains 10
142+
`);
143+
144+
assertOutput(r.output, [
145+
'Expression assignment to _ now disabled.',
146+
'10',
147+
'10',
148+
'10',
149+
]);
150+
151+
// delete globals leaked by REPL when `useGlobal` is `true`
152+
delete global.module;
153+
delete global.require;
154+
}
155+
156+
function initRepl(mode, useGlobal) {
135157
const inputStream = new stream.PassThrough();
136158
const outputStream = new stream.PassThrough();
137159
outputStream.accum = '';
@@ -146,7 +168,8 @@ function initRepl(mode) {
146168
useColors: false,
147169
terminal: false,
148170
prompt: '',
149-
replMode: mode
171+
replMode: mode,
172+
useGlobal: useGlobal
150173
});
151174
}
152175

0 commit comments

Comments
 (0)