Chromium Code Reviews| Index: test/cctest/wasm/test-run-wasm-module.cc |
| diff --git a/test/cctest/wasm/test-run-wasm-module.cc b/test/cctest/wasm/test-run-wasm-module.cc |
| index fb1cbbf1d3eb87b2ac85c46c9f164465efed9163..6700e407a65423255c476d963a7c13fdeb48f3da 100644 |
| --- a/test/cctest/wasm/test-run-wasm-module.cc |
| +++ b/test/cctest/wasm/test-run-wasm-module.cc |
| @@ -230,7 +230,7 @@ TEST(Run_WasmModule_Serialization) { |
| create_params.array_buffer_allocator = |
| CcTest::InitIsolateOnce()->array_buffer_allocator(); |
| - for (int i = 0; i < 3; ++i) { |
| + for (int i = 0; i < 4; ++i) { |
|
bradnelson
2016/10/17 20:38:04
The numeric counting is getting hard to follow her
Mircea Trofin
2016/10/18 04:34:13
Currently, TEST_F isn't available to cctest. I ref
|
| v8::Isolate* v8_isolate = v8::Isolate::New(create_params); |
| if (i == 1) { |
| // Invalidate the header by providing a mismatched version |
| @@ -244,6 +244,11 @@ TEST(Run_WasmModule_Serialization) { |
| serialized_bytes.first = nullptr; |
| serialized_bytes.second = 0; |
| } |
| + if (i == 3) { |
| + // Not even the wire bytes are valid. Clear half of them. |
| + memset(const_cast<uint8_t*>(wire_bytes.first), '\0', |
| + wire_bytes.second / 2); |
| + } |
| { |
| v8::Isolate::Scope isolate_scope(v8_isolate); |
| v8::HandleScope new_scope(v8_isolate); |
| @@ -254,20 +259,33 @@ TEST(Run_WasmModule_Serialization) { |
| v8::MaybeLocal<v8::WasmCompiledModule> deserialized = |
| v8::WasmCompiledModule::DeserializeOrCompile( |
| v8_isolate, serialized_bytes, wire_bytes); |
| - v8::Local<v8::WasmCompiledModule> compiled_module; |
| - CHECK(deserialized.ToLocal(&compiled_module)); |
| - Handle<JSObject> module_object = |
| - Handle<JSObject>::cast(v8::Utils::OpenHandle(*compiled_module)); |
| - Handle<JSObject> instance = |
| - WasmModule::Instantiate(isolate, &thrower, module_object, |
| - Handle<JSReceiver>::null(), |
| - Handle<JSArrayBuffer>::null()) |
| - .ToHandleChecked(); |
| - Handle<Object> params[1] = {Handle<Object>(Smi::FromInt(41), isolate)}; |
| - int32_t result = testing::CallWasmFunctionForTesting( |
| - isolate, instance, &thrower, kFunctionName, 1, params, |
| - ModuleOrigin::kWasmOrigin); |
| - CHECK(result == 42); |
| + if (i == 3) { |
| + CHECK(deserialized.IsEmpty()); |
| + } else { |
| + v8::Local<v8::WasmCompiledModule> deserialized_module; |
| + CHECK(deserialized.ToLocal(&deserialized_module)); |
| + Handle<JSObject> module_object = |
| + Handle<JSObject>::cast(v8::Utils::OpenHandle(*deserialized_module)); |
| + { |
| + DisallowHeapAllocation assume_no_gc; |
| + Handle<WasmCompiledModule> compiled_part( |
| + WasmCompiledModule::cast(module_object->GetInternalField(0)), |
| + isolate); |
| + CHECK_EQ(memcmp(compiled_part->module_bytes()->GetCharsAddress(), |
| + wire_bytes.first, wire_bytes.second), |
| + 0); |
| + } |
| + Handle<JSObject> instance = |
| + WasmModule::Instantiate(isolate, &thrower, module_object, |
| + Handle<JSReceiver>::null(), |
| + Handle<JSArrayBuffer>::null()) |
| + .ToHandleChecked(); |
| + Handle<Object> params[1] = {Handle<Object>(Smi::FromInt(41), isolate)}; |
| + int32_t result = testing::CallWasmFunctionForTesting( |
| + isolate, instance, &thrower, kFunctionName, 1, params, |
| + ModuleOrigin::kWasmOrigin); |
| + CHECK(result == 42); |
| + } |
| new_ctx->Exit(); |
| } |
| v8_isolate->Dispose(); |