summaryrefslogtreecommitdiff
path: root/test/cctest
diff options
context:
space:
mode:
authorAnna Henningsen <anna@addaleax.net>2019-11-05 22:50:24 +0100
committerRich Trott <rtrott@gmail.com>2019-11-07 19:51:11 -0800
commite460e14d57869c37b181f1e4839c70d8fa89ffb3 (patch)
tree9c481c15fbce5e5a5e8413518faf099badb5ae0b /test/cctest
parent96db5a271c859eabbf81565e4ce82a93fd037fb9 (diff)
downloadandroid-node-v8-e460e14d57869c37b181f1e4839c70d8fa89ffb3.tar.gz
android-node-v8-e460e14d57869c37b181f1e4839c70d8fa89ffb3.tar.bz2
android-node-v8-e460e14d57869c37b181f1e4839c70d8fa89ffb3.zip
src: allow adding linked bindings to Environment
This allows manually adding linked bindings to an `Environment` instance, without having to register modules at program load in a global namespace. PR-URL: https://github.com/nodejs/node/pull/30274 Reviewed-By: Gireesh Punathil <gpunathi@in.ibm.com> Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Diffstat (limited to 'test/cctest')
-rw-r--r--test/cctest/test_linked_binding.cc42
1 files changed, 42 insertions, 0 deletions
diff --git a/test/cctest/test_linked_binding.cc b/test/cctest/test_linked_binding.cc
index 9068865552..6724402c55 100644
--- a/test/cctest/test_linked_binding.cc
+++ b/test/cctest/test_linked_binding.cc
@@ -41,3 +41,45 @@ TEST_F(LinkedBindingTest, SimpleTest) {
CHECK_NOT_NULL(*utf8val);
CHECK_EQ(strcmp(*utf8val, "value"), 0);
}
+
+void InitializeLocalBinding(v8::Local<v8::Object> exports,
+ v8::Local<v8::Value> module,
+ v8::Local<v8::Context> context,
+ void* priv) {
+ ++*static_cast<int*>(priv);
+ v8::Isolate* isolate = context->GetIsolate();
+ exports->Set(
+ context,
+ v8::String::NewFromOneByte(isolate,
+ reinterpret_cast<const uint8_t*>("key"),
+ v8::NewStringType::kNormal).ToLocalChecked(),
+ v8::String::NewFromOneByte(isolate,
+ reinterpret_cast<const uint8_t*>("value"),
+ v8::NewStringType::kNormal).ToLocalChecked())
+ .FromJust();
+}
+
+TEST_F(LinkedBindingTest, LocallyDefinedLinkedBindingTest) {
+ const v8::HandleScope handle_scope(isolate_);
+ const Argv argv;
+ Env test_env {handle_scope, argv};
+
+ int calls = 0;
+ AddLinkedBinding(*test_env, "local_linked", InitializeLocalBinding, &calls);
+
+ v8::Local<v8::Context> context = isolate_->GetCurrentContext();
+
+ const char* run_script =
+ "process._linkedBinding('local_linked').key";
+ v8::Local<v8::Script> script = v8::Script::Compile(
+ context,
+ v8::String::NewFromOneByte(isolate_,
+ reinterpret_cast<const uint8_t*>(run_script),
+ v8::NewStringType::kNormal).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, "value"), 0);
+ CHECK_EQ(calls, 1);
+}