Skip to content

Commit fc2db50

Browse files
Trottitaloacasas
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 9f6d1f6 commit fc2db50

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
@@ -721,9 +721,7 @@ REPLServer.prototype.createContext = function() {
721721

722722
Object.defineProperty(context, '_', {
723723
configurable: true,
724-
get: () => {
725-
return this.last;
726-
},
724+
get: () => this.last,
727725
set: (value) => {
728726
this.last = value;
729727
if (!this.underscoreAssigned) {
@@ -1265,9 +1263,10 @@ function defineDefaultCommands(repl) {
12651263
help: 'Print this help message',
12661264
action: function() {
12671265
const names = Object.keys(this.commands).sort();
1268-
const longestNameLength = names.reduce((max, name) => {
1269-
return Math.max(max, name.length);
1270-
}, 0);
1266+
const longestNameLength = names.reduce(
1267+
(max, name) => Math.max(max, name.length),
1268+
0
1269+
);
12711270
names.forEach((name) => {
12721271
const cmd = this.commands[name];
12731272
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)