diff options
Diffstat (limited to 'deps/v8/test/unittests/api/api-wasm-unittest.cc')
-rw-r--r-- | deps/v8/test/unittests/api/api-wasm-unittest.cc | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/deps/v8/test/unittests/api/api-wasm-unittest.cc b/deps/v8/test/unittests/api/api-wasm-unittest.cc index 85174ced7f..ab1f22b8e3 100644 --- a/deps/v8/test/unittests/api/api-wasm-unittest.cc +++ b/deps/v8/test/unittests/api/api-wasm-unittest.cc @@ -13,6 +13,8 @@ #include "include/v8-wasm.h" #include "src/api/api-inl.h" #include "src/handles/global-handles.h" +#include "src/wasm/wasm-features.h" +#include "test/common/flag-utils.h" #include "test/unittests/test-utils.h" #include "testing/gtest/include/gtest/gtest.h" @@ -156,4 +158,52 @@ TEST_F(ApiWasmTest, WasmStreamingSetCallback) { Promise::kPending); } +TEST_F(ApiWasmTest, WasmEnableDisableGC) { + Local<Context> context_local = Context::New(isolate()); + Context::Scope context_scope(context_local); + i::Handle<i::Context> context = v8::Utils::OpenHandle(*context_local); + // When using the flags, stringref and GC are controlled independently. + { + i::FlagScope<bool> flag_gc(&i::v8_flags.experimental_wasm_gc, false); + i::FlagScope<bool> flag_stringref(&i::v8_flags.experimental_wasm_stringref, + true); + EXPECT_FALSE(i_isolate()->IsWasmGCEnabled(context)); + EXPECT_TRUE(i_isolate()->IsWasmStringRefEnabled(context)); + } + { + i::FlagScope<bool> flag_gc(&i::v8_flags.experimental_wasm_gc, true); + i::FlagScope<bool> flag_stringref(&i::v8_flags.experimental_wasm_stringref, + false); + EXPECT_TRUE(i_isolate()->IsWasmGCEnabled(context)); + EXPECT_FALSE(i_isolate()->IsWasmStringRefEnabled(context)); + } + // When providing a callback, the callback will control GC, stringref, + // and inlining. + isolate()->SetWasmGCEnabledCallback([](auto) { return true; }); + EXPECT_TRUE(i_isolate()->IsWasmGCEnabled(context)); + EXPECT_TRUE(i_isolate()->IsWasmStringRefEnabled(context)); + EXPECT_TRUE(i_isolate()->IsWasmInliningEnabled(context)); + { + auto enabled_features = i::wasm::WasmFeatures::FromIsolate(i_isolate()); + EXPECT_TRUE(enabled_features.has_gc()); + EXPECT_TRUE(enabled_features.has_stringref()); + EXPECT_TRUE(enabled_features.has_typed_funcref()); + EXPECT_TRUE(enabled_features.has_inlining()); + } + isolate()->SetWasmGCEnabledCallback([](auto) { return false; }); + EXPECT_FALSE(i_isolate()->IsWasmGCEnabled(context)); + EXPECT_FALSE(i_isolate()->IsWasmStringRefEnabled(context)); + // TODO(crbug.com/1424350): Change (or just drop) this expectation when + // we enable inlining by default. + EXPECT_FALSE(i_isolate()->IsWasmInliningEnabled(context)); + { + auto enabled_features = i::wasm::WasmFeatures::FromIsolate(i_isolate()); + EXPECT_FALSE(enabled_features.has_gc()); + EXPECT_FALSE(enabled_features.has_stringref()); + EXPECT_FALSE(enabled_features.has_typed_funcref()); + EXPECT_FALSE(enabled_features.has_inlining()); + } + isolate()->SetWasmGCEnabledCallback(nullptr); +} + } // namespace v8 |