Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nodejs/node.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAnna Henningsen <anna@addaleax.net>2021-06-12 00:43:48 +0300
committerAnna Henningsen <anna@addaleax.net>2021-06-14 14:30:50 +0300
commitcd43073ce2c0c89498e37b4db6161a56fccd1fff (patch)
tree3ef9a3904e24baa7e858ae0620e429fc319ec6e9 /test
parent67d4a3f9bde27e4a4347d0bfa752be6cce33e6e9 (diff)
src: fix multiple AddLinkedBinding() calls
Singly-linked lists are extended at their tail, not their head. This fixes using more than 2 linked addons at a time. PR-URL: https://github.com/nodejs/node/pull/39012 Reviewed-By: Shelley Vohr <codebytere@gmail.com> Reviewed-By: Michaƫl Zasso <targos@protonmail.com> Reviewed-By: Richard Lau <rlau@redhat.com>
Diffstat (limited to 'test')
-rw-r--r--test/cctest/test_linked_binding.cc32
1 files changed, 32 insertions, 0 deletions
diff --git a/test/cctest/test_linked_binding.cc b/test/cctest/test_linked_binding.cc
index 17c020429f0..7e40068b5db 100644
--- a/test/cctest/test_linked_binding.cc
+++ b/test/cctest/test_linked_binding.cc
@@ -190,3 +190,35 @@ TEST_F(LinkedBindingTest, LocallyDefinedLinkedBindingNapiInstanceDataTest) {
CHECK_EQ(*instance_data, 1);
delete instance_data;
}
+
+TEST_F(LinkedBindingTest, ManyBindingsTest) {
+ const v8::HandleScope handle_scope(isolate_);
+ const Argv argv;
+ Env test_env {handle_scope, argv};
+
+ int calls = 0;
+ AddLinkedBinding(*test_env, "local_linked1", InitializeLocalBinding, &calls);
+ AddLinkedBinding(*test_env, "local_linked2", InitializeLocalBinding, &calls);
+ AddLinkedBinding(*test_env, "local_linked3", InitializeLocalBinding, &calls);
+ AddLinkedBinding(*test_env, local_linked_napi); // Add a N-API addon as well.
+ AddLinkedBinding(*test_env, "local_linked4", InitializeLocalBinding, &calls);
+ AddLinkedBinding(*test_env, "local_linked5", InitializeLocalBinding, &calls);
+
+ v8::Local<v8::Context> context = isolate_->GetCurrentContext();
+
+ const char* run_script =
+ "for (let i = 1; i <= 5; i++)process._linkedBinding(`local_linked${i}`);"
+ "process._linkedBinding('local_linked_napi').hello";
+ v8::Local<v8::Script> script = v8::Script::Compile(
+ context,
+ v8::String::NewFromOneByte(isolate_,
+ reinterpret_cast<const uint8_t*>(run_script))
+ .ToLocalChecked())
+ .ToLocalChecked();
+ v8::Local<v8::Value> completion_value = script->Run(context).ToLocalChecked();
+ v8::String::Utf8Value utf8val(isolate_, completion_value);
+ CHECK_NOT_NULL(*utf8val);
+ CHECK_EQ(strcmp(*utf8val, "world"), 0);
+ CHECK_EQ(calls, 5);
+}
+