diff options
Diffstat (limited to 'test/cctest/test_linked_binding.cc')
-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); +} |