diff options
author | Anna Henningsen <anna@addaleax.net> | 2019-11-05 22:50:24 +0100 |
---|---|---|
committer | Rich Trott <rtrott@gmail.com> | 2019-11-07 19:51:11 -0800 |
commit | e460e14d57869c37b181f1e4839c70d8fa89ffb3 (patch) | |
tree | 9c481c15fbce5e5a5e8413518faf099badb5ae0b /test/cctest | |
parent | 96db5a271c859eabbf81565e4ce82a93fd037fb9 (diff) | |
download | android-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.cc | 42 |
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); +} |