summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorMarcel Laverdet <marcel@laverdet.com>2019-11-12 14:26:08 -0800
committerAnna Henningsen <anna@addaleax.net>2019-11-20 19:02:55 +0100
commitc712fb7cd6222018cf615fd0071998bde6f16da9 (patch)
tree2f6713dc39dfea54e6fb6b1a56a82c9da64469a6 /test
parentc63af4fea041673eb7c33f6df3c474d4537fe5eb (diff)
downloadandroid-node-v8-c712fb7cd6222018cf615fd0071998bde6f16da9.tar.gz
android-node-v8-c712fb7cd6222018cf615fd0071998bde6f16da9.tar.bz2
android-node-v8-c712fb7cd6222018cf615fd0071998bde6f16da9.zip
src: add abstract `IsolatePlatformDelegate`
Adds a new abstract class for module authors and embedders to register arbitrary isolates with `node::MultiIsolatePlatform`. PR-URL: https://github.com/nodejs/node/pull/30324 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Diffstat (limited to 'test')
-rw-r--r--test/cctest/node_test_fixture.cc10
-rw-r--r--test/cctest/node_test_fixture.h16
-rw-r--r--test/cctest/test_platform.cc47
3 files changed, 65 insertions, 8 deletions
diff --git a/test/cctest/node_test_fixture.cc b/test/cctest/node_test_fixture.cc
index 1a50e58dd9..b6f4af6b9e 100644
--- a/test/cctest/node_test_fixture.cc
+++ b/test/cctest/node_test_fixture.cc
@@ -1,7 +1,7 @@
#include "node_test_fixture.h"
-ArrayBufferUniquePtr NodeTestFixture::allocator{nullptr, nullptr};
-uv_loop_t NodeTestFixture::current_loop;
-NodePlatformUniquePtr NodeTestFixture::platform;
-TracingAgentUniquePtr NodeTestFixture::tracing_agent;
-bool NodeTestFixture::node_initialized = false;
+ArrayBufferUniquePtr NodeZeroIsolateTestFixture::allocator{nullptr, nullptr};
+uv_loop_t NodeZeroIsolateTestFixture::current_loop;
+NodePlatformUniquePtr NodeZeroIsolateTestFixture::platform;
+TracingAgentUniquePtr NodeZeroIsolateTestFixture::tracing_agent;
+bool NodeZeroIsolateTestFixture::node_initialized = false;
diff --git a/test/cctest/node_test_fixture.h b/test/cctest/node_test_fixture.h
index ac0701d094..c8cb923297 100644
--- a/test/cctest/node_test_fixture.h
+++ b/test/cctest/node_test_fixture.h
@@ -60,14 +60,13 @@ using ArrayBufferUniquePtr = std::unique_ptr<node::ArrayBufferAllocator,
using TracingAgentUniquePtr = std::unique_ptr<node::tracing::Agent>;
using NodePlatformUniquePtr = std::unique_ptr<node::NodePlatform>;
-class NodeTestFixture : public ::testing::Test {
+class NodeZeroIsolateTestFixture : public ::testing::Test {
protected:
static ArrayBufferUniquePtr allocator;
static TracingAgentUniquePtr tracing_agent;
static NodePlatformUniquePtr platform;
static uv_loop_t current_loop;
static bool node_initialized;
- v8::Isolate* isolate_;
static void SetUpTestCase() {
if (!node_initialized) {
@@ -99,8 +98,18 @@ class NodeTestFixture : public ::testing::Test {
void SetUp() override {
allocator = ArrayBufferUniquePtr(node::CreateArrayBufferAllocator(),
&node::FreeArrayBufferAllocator);
+ }
+};
+
+
+class NodeTestFixture : public NodeZeroIsolateTestFixture {
+ protected:
+ v8::Isolate* isolate_;
+
+ void SetUp() override {
+ NodeZeroIsolateTestFixture::SetUp();
isolate_ = NewIsolate(allocator.get(), &current_loop);
- CHECK_NE(isolate_, nullptr);
+ CHECK_NOT_NULL(isolate_);
isolate_->Enter();
}
@@ -110,6 +119,7 @@ class NodeTestFixture : public ::testing::Test {
isolate_->Dispose();
platform->UnregisterIsolate(isolate_);
isolate_ = nullptr;
+ NodeZeroIsolateTestFixture::TearDown();
}
};
diff --git a/test/cctest/test_platform.cc b/test/cctest/test_platform.cc
index 5420502124..73057bb2d8 100644
--- a/test/cctest/test_platform.cc
+++ b/test/cctest/test_platform.cc
@@ -57,3 +57,50 @@ TEST_F(PlatformTest, SkipNewTasksInFlushForegroundTasks) {
EXPECT_EQ(3, run_count);
EXPECT_FALSE(platform->FlushForegroundTasks(isolate_));
}
+
+// Tests the registration of an abstract `IsolatePlatformDelegate` instance as
+// opposed to the more common `uv_loop_s*` version of `RegisterIsolate`.
+TEST_F(NodeZeroIsolateTestFixture, IsolatePlatformDelegateTest) {
+ // Allocate isolate
+ v8::Isolate::CreateParams create_params;
+ create_params.array_buffer_allocator = allocator.get();
+ auto isolate = v8::Isolate::Allocate();
+ CHECK_NOT_NULL(isolate);
+
+ // Register *first*, then initialize
+ auto delegate = std::make_shared<node::PerIsolatePlatformData>(
+ isolate,
+ &current_loop);
+ platform->RegisterIsolate(isolate, delegate.get());
+ v8::Isolate::Initialize(isolate, create_params);
+
+ // Try creating Context + IsolateData + Environment
+ {
+ v8::Isolate::Scope isolate_scope(isolate);
+ v8::HandleScope handle_scope(isolate);
+
+ auto context = node::NewContext(isolate);
+ CHECK(!context.IsEmpty());
+ v8::Context::Scope context_scope(context);
+
+ std::unique_ptr<node::IsolateData, decltype(&node::FreeIsolateData)>
+ isolate_data{node::CreateIsolateData(isolate,
+ &current_loop,
+ platform.get()),
+ node::FreeIsolateData};
+ CHECK(isolate_data);
+
+ std::unique_ptr<node::Environment, decltype(&node::FreeEnvironment)>
+ environment{node::CreateEnvironment(isolate_data.get(),
+ context,
+ 0, nullptr,
+ 0, nullptr),
+ node::FreeEnvironment};
+ CHECK(environment);
+ }
+
+ // Graceful shutdown
+ delegate->Shutdown();
+ isolate->Dispose();
+ platform->UnregisterIsolate(isolate);
+}