test: throw when using public methods instead of primordials #36164
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR adds a check on our tests to unsure core doesn't use any built-in methods from the global object which could be mitigated by users.
Simple example
If that line of code is inside an internal module, it would raise the following error:
When we meant to use the global builtins
Sometimes, we really want to call the user-mitigated methods. A typical example are
Thenable
s, where we usually want to support third-party libraries, and not always callPromise.prototype.then
. It's usually done like this:That would raise two errors:
The correct™️ way of doing that would indeed be to use
callUnsafe
:or
Limitations
Error#stack
to test if the call was made by an internal or by the test files. It's detectingnode:
prefix, which was introduced in Node.js 15. I don't think this can be backported to earlier release lines.Next steps
We might want to land a modified version without waiting for all the tests to pass:
remove-primordials
module opt-in.Fixes: #30697
Checklist
make -j4 test
(UNIX), orvcbuild test
(Windows) passes