Index: test/cctest/test-serialize.cc |
diff --git a/test/cctest/test-serialize.cc b/test/cctest/test-serialize.cc |
index 0c2622b23c905dab0d74a23476a1af309689971b..45d7499e211a1d671857cd042fe44f0fdc438c63 100644 |
--- a/test/cctest/test-serialize.cc |
+++ b/test/cctest/test-serialize.cc |
@@ -1882,6 +1882,71 @@ TEST(CodeSerializerCell) { |
} |
#endif // V8_TARGET_ARCH_X64 |
+TEST(SnapshotCreatorMultipleContexts) { |
+ DisableTurbofan(); |
+ v8::StartupData blob; |
+ { |
+ v8::SnapshotCreator creator; |
+ v8::Isolate* isolate = creator.GetIsolate(); |
+ { |
+ v8::HandleScope handle_scope(isolate); |
+ v8::Local<v8::Context> context = v8::Context::New(isolate); |
+ v8::Context::Scope context_scope(context); |
+ CompileRun("var f = function() { return 1; }"); |
+ CHECK_EQ(0, creator.AddContext(context)); |
+ } |
+ { |
+ v8::HandleScope handle_scope(isolate); |
+ v8::Local<v8::Context> context = v8::Context::New(isolate); |
+ v8::Context::Scope context_scope(context); |
+ CompileRun("var f = function() { return 2; }"); |
+ CHECK_EQ(1, creator.AddContext(context)); |
+ } |
+ { |
+ v8::HandleScope handle_scope(isolate); |
+ v8::Local<v8::Context> context = v8::Context::New(isolate); |
+ CHECK_EQ(2, creator.AddContext(context)); |
+ } |
+ blob = |
+ creator.CreateBlob(v8::SnapshotCreator::FunctionCodeHandling::kClear); |
+ } |
+ |
+ v8::Isolate::CreateParams params; |
+ params.snapshot_blob = &blob; |
+ params.array_buffer_allocator = CcTest::array_buffer_allocator(); |
+ v8::Isolate* isolate = v8::Isolate::New(params); |
+ { |
+ v8::Isolate::Scope isolate_scope(isolate); |
+ v8::ExtensionConfiguration* no_extension = nullptr; |
+ v8::Local<v8::ObjectTemplate> no_template = v8::Local<v8::ObjectTemplate>(); |
+ v8::Local<v8::Value> no_object = v8::Local<v8::Value>(); |
+ { |
+ v8::HandleScope handle_scope(isolate); |
+ v8::Local<v8::Context> context = |
+ v8::Context::New(isolate, no_extension, no_template, no_object, 0); |
+ v8::Context::Scope context_scope(context); |
+ ExpectInt32("f()", 1); |
+ } |
+ { |
+ v8::HandleScope handle_scope(isolate); |
+ v8::Local<v8::Context> context = |
+ v8::Context::New(isolate, no_extension, no_template, no_object, 1); |
+ v8::Context::Scope context_scope(context); |
+ ExpectInt32("f()", 2); |
+ } |
+ { |
+ v8::HandleScope handle_scope(isolate); |
+ v8::Local<v8::Context> context = |
+ v8::Context::New(isolate, no_extension, no_template, no_object, 2); |
+ v8::Context::Scope context_scope(context); |
+ ExpectUndefined("this.f"); |
+ } |
+ } |
+ |
+ isolate->Dispose(); |
+ delete[] blob.data; |
+} |
+ |
TEST(SerializationMemoryStats) { |
FLAG_profile_deserialization = true; |
FLAG_always_opt = false; |