86 lines
3.3 KiB
C++
86 lines
3.3 KiB
C++
#include "node_test_fixture.h"
|
|
#include "node_internals.h" // RunBootstrapping()
|
|
|
|
void InitializeBinding(v8::Local<v8::Object> exports,
|
|
v8::Local<v8::Value> module,
|
|
v8::Local<v8::Context> context,
|
|
void* 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();
|
|
}
|
|
|
|
NODE_MODULE_LINKED(cctest_linkedbinding, InitializeBinding)
|
|
|
|
class LinkedBindingTest : public EnvironmentTestFixture {};
|
|
|
|
TEST_F(LinkedBindingTest, SimpleTest) {
|
|
const v8::HandleScope handle_scope(isolate_);
|
|
const Argv argv;
|
|
Env test_env {handle_scope, argv};
|
|
|
|
v8::Local<v8::Context> context = isolate_->GetCurrentContext();
|
|
|
|
const char* run_script =
|
|
"process._linkedBinding('cctest_linkedbinding').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);
|
|
}
|
|
|
|
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);
|
|
}
|