wasm_stream_instantiate_test.any.js (5601B)
1 // META: title=WebAssembly.instantiateStreaming 2 // META: script=/common/get-host-info.sub.js 3 promise_test(async function() { 4 const response = await fetch('resources/incrementer.wasm'); 5 const { instance, module } = await WebAssembly.instantiateStreaming(response); 6 assert_true(instance instanceof WebAssembly.Instance); 7 assert_true(module instanceof WebAssembly.Module); 8 }, "instantiateStreaming using resolved response"); 9 10 promise_test(async function() { 11 const response = await fetch('resources/incrementer.wasm'); 12 const { instance } = await WebAssembly.instantiateStreaming(response); 13 assert_true(instance instanceof WebAssembly.Instance); 14 }, "instantiateStreaming using resolved response and check instantiate"); 15 16 promise_test(async function() { 17 const result = fetch('resources/incrementer.wasm'); 18 const { instance } = await WebAssembly.instantiateStreaming(result); 19 assert_true(instance instanceof WebAssembly.Instance); 20 }, "instantiateStreaming using promise response from fetch and check instantiate"); 21 22 promise_test(async function(t) { 23 const result = fetch('resources/incrementer.wrong_mime_type.wasm'); 24 await promise_rejects_js(t, TypeError, WebAssembly.instantiateStreaming(result)); 25 }, "instantiateStreaming raise error if wrong mime type"); 26 27 promise_test(async function(t) { 28 const result = fetch('resources/incrementer.no_mime_type.wasm?pipe=header(Content-Type,)'); 29 await promise_rejects_js(t, TypeError, WebAssembly.instantiateStreaming(result)); 30 }, "instantiateStreaming raise error if no mime type"); 31 32 promise_test(async function(t) { 33 const result = fetch('webapi/status.py?status=404'); 34 await promise_rejects_js(t, TypeError, WebAssembly.instantiateStreaming(result)); 35 }, "instantiateStreaming raise error if 404 status"); 36 37 const getWasmUrl = fileName => { 38 const host_info = get_host_info(); 39 const url = host_info.HTTP_ORIGIN_WITH_DIFFERENT_PORT + '/wasm/webapi/'; 40 return url + fileName + "?pipe=header(Access-Control-Allow-Origin,*)"; 41 }; 42 43 promise_test(async function() { 44 const result = fetch(getWasmUrl('resources/incrementer.wasm'), {"mode": "cors"} ); 45 const { instance } = await WebAssembly.instantiateStreaming(result); 46 assert_true(instance instanceof WebAssembly.Instance); 47 }, "instantiateStreaming check CORS"); 48 49 promise_test(async function(t) { 50 const result = fetch(getWasmUrl('resources/incrementer.wasm'), {"mode": "no-cors"} ); 51 await promise_rejects_js(t, TypeError, WebAssembly.instantiateStreaming(result)); 52 }, "instantiateStreaming raise error if no-cors"); 53 54 promise_test(async function() { 55 const v = await fetch('resources/incrementer.wasm'); 56 const buffer = await v.arrayBuffer(); 57 const response = new Response(buffer, { headers: { "Content-Type" : "application/wasm" }}); 58 const { instance } = await WebAssembly.instantiateStreaming(response); 59 assert_true(instance instanceof WebAssembly.Instance); 60 }, "instantiateStreaming receive promise with response created from ArrayBuffer"); 61 62 promise_test(async function() { 63 const v = await fetch('resources/incrementer.wasm'); 64 const buffer = await v.arrayBuffer(); 65 const stream = new ReadableStream({ 66 start(controller) { 67 (async () => { 68 await Promise.resolve().then(() => controller.enqueue(new Uint8Array(buffer.slice(0, 20)))); 69 await Promise.resolve().then(() => controller.enqueue(new Uint8Array(buffer.slice(20, buffer.byteLength)))); 70 await Promise.resolve().then(() => controller.close()); 71 })(); 72 } 73 }); 74 const response = new Response(stream, { headers: { "Content-Type" : "application/wasm" }}); 75 const { instance } = await WebAssembly.instantiateStreaming(response); 76 assert_true(instance instanceof WebAssembly.Instance); 77 }, "instantiateStreaming using ReadableStream with Uint8Array chunks"); 78 79 promise_test(async function(t) { 80 const v = await fetch('resources/incrementer.wasm'); 81 const buffer = await v.arrayBuffer(); 82 const stream = new ReadableStream({ 83 start(controller) { 84 // Enqueuing an ArrayBuffer rather a Uint8Array per 85 // https://streams.spec.whatwg.org/#read-loop 86 controller.enqueue(buffer); 87 controller.close(); 88 } 89 }); 90 const response = new Response(stream, { headers: { "Content-Type" : "application/wasm" }}); 91 await promise_rejects_js(t, TypeError, WebAssembly.instantiateStreaming(response)); 92 }, "instantiateStreaming using ReadableStream with ArrayBuffer chunk"); 93 94 promise_test(async function() { 95 const response = await fetch('resources/incrementer.wasm'); 96 const blob = await response.blob(); 97 const { instance, module } = await WebAssembly.instantiateStreaming(new Response(blob, { headers: { "Content-Type" : "application/wasm" }})); 98 assert_true(instance instanceof WebAssembly.Instance); 99 assert_true(module instanceof WebAssembly.Module); 100 }, "instantiateStreaming using blob"); 101 102 promise_test(async function(t) { 103 const response = await fetch('resources/incrementer.wasm'); 104 const blob = await response.blob(); 105 const formData = new FormData; 106 formData.append('blob', blob); 107 formData.append('blob2', "Hello"); 108 await promise_rejects_js(t, WebAssembly.CompileError, WebAssembly.instantiateStreaming(new Response(formData, { headers: { "Content-Type" : "application/wasm" }}))); 109 }, "instantiateStreaming using FormData");