mirror of
https://github.com/zebrajr/node.git
synced 2025-12-06 00:20:08 +01:00
PR-URL: https://github.com/nodejs/node/pull/59964 Reviewed-By: Vinícius Lourenço Claro Cardoso <contact@viniciusl.com.br>
117 lines
3.2 KiB
JavaScript
117 lines
3.2 KiB
JavaScript
'use strict';
|
|
|
|
const common = require('../common');
|
|
const assert = require('assert');
|
|
const { startNewREPLServer } = require('../common/repl');
|
|
const { describe, it } = require('node:test');
|
|
|
|
// This test verifies that tab completion works correctly with unary expressions
|
|
// like delete, typeof, void, etc. This is a regression test for the issue where
|
|
// typing "delete globalThis._" and then backspacing and typing "globalThis"
|
|
// would cause "globalThis is not defined" error.
|
|
|
|
describe('REPL tab completion with unary expressions', () => {
|
|
it('should handle delete operator correctly', (t, done) => {
|
|
const { replServer } = startNewREPLServer({ terminal: false });
|
|
|
|
// Test delete with member expression
|
|
replServer.complete(
|
|
'delete globalThis._',
|
|
common.mustSucceed((completions) => {
|
|
assert.strictEqual(completions[1], 'globalThis._');
|
|
|
|
// Test delete with identifier
|
|
replServer.complete(
|
|
'delete globalThis',
|
|
common.mustSucceed((completions) => {
|
|
assert.strictEqual(completions[1], 'globalThis');
|
|
replServer.close();
|
|
done();
|
|
})
|
|
);
|
|
})
|
|
);
|
|
});
|
|
|
|
it('should handle typeof operator correctly', (t, done) => {
|
|
const { replServer } = startNewREPLServer({ terminal: false });
|
|
|
|
replServer.complete(
|
|
'typeof globalThis',
|
|
common.mustSucceed((completions) => {
|
|
assert.strictEqual(completions[1], 'globalThis');
|
|
replServer.close();
|
|
done();
|
|
})
|
|
);
|
|
});
|
|
|
|
it('should handle void operator correctly', (t, done) => {
|
|
const { replServer } = startNewREPLServer({ terminal: false });
|
|
|
|
replServer.complete(
|
|
'void globalThis',
|
|
common.mustSucceed((completions) => {
|
|
assert.strictEqual(completions[1], 'globalThis');
|
|
replServer.close();
|
|
done();
|
|
})
|
|
);
|
|
});
|
|
|
|
it('should handle other unary operators correctly', (t, done) => {
|
|
const { replServer } = startNewREPLServer({ terminal: false });
|
|
|
|
const unaryOperators = [
|
|
'!globalThis',
|
|
'+globalThis',
|
|
'-globalThis',
|
|
'~globalThis',
|
|
];
|
|
|
|
let testIndex = 0;
|
|
|
|
function testNext() {
|
|
if (testIndex >= unaryOperators.length) {
|
|
replServer.close();
|
|
done();
|
|
return;
|
|
}
|
|
|
|
const testCase = unaryOperators[testIndex++];
|
|
replServer.complete(
|
|
testCase,
|
|
common.mustSucceed((completions) => {
|
|
assert.strictEqual(completions[1], 'globalThis');
|
|
testNext();
|
|
})
|
|
);
|
|
}
|
|
|
|
testNext();
|
|
});
|
|
|
|
it('should still evaluate globalThis correctly after unary expression completion', (t, done) => {
|
|
const { replServer } = startNewREPLServer({ terminal: false });
|
|
|
|
// First trigger completion with delete
|
|
replServer.complete(
|
|
'delete globalThis._',
|
|
common.mustSucceed(() => {
|
|
// Then evaluate globalThis
|
|
replServer.eval(
|
|
'globalThis',
|
|
replServer.context,
|
|
'test.js',
|
|
common.mustSucceed((result) => {
|
|
assert.strictEqual(typeof result, 'object');
|
|
assert.ok(result !== null);
|
|
replServer.close();
|
|
done();
|
|
})
|
|
);
|
|
})
|
|
);
|
|
});
|
|
});
|