| <!DOCTYPE html> | |
| <!-- | |
| Copyright 2023 The Cobalt Authors. All Rights Reserved. | |
| Licensed under the Apache License, Version 2.0 (the "License"); | |
| you may not use this file except in compliance with the License. | |
| You may obtain a copy of the License at | |
| http://www.apache.org/licenses/LICENSE-2.0 | |
| Unless required by applicable law or agreed to in writing, software | |
| distributed under the License is distributed on an "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| See the License for the specific language governing permissions and | |
| limitations under the License. | |
| --> | |
| <head> | |
| <title>Cobalt WASM Basic Test</title> | |
| <script src='black_box_js_test_utils.js'></script> | |
| </head> | |
| <body> | |
| <script> | |
| const fail = msg => { | |
| if (msg) { | |
| console.error(msg); | |
| } | |
| notReached(); | |
| }; | |
| const timeoutId = setTimeout(fail, 3000); | |
| const success = () => { | |
| clearTimeout(timeoutId); | |
| onEndTest(); | |
| }; | |
| const Module = {}; | |
| const noop = () => {}; | |
| const wasmImports = { | |
| emscripten_notify_memory_growth: () => { | |
| if (!Module.asm || !Module.asm.memory) { | |
| return; | |
| } | |
| Module.HEAPU8 = new Uint8Array(Module.asm.memory.buffer); | |
| }, | |
| fd_close: noop, | |
| fd_seek: noop, | |
| fd_write: noop, | |
| proc_exit: noop, | |
| }; | |
| const importObject = { | |
| env: wasmImports, | |
| wasi_snapshot_preview1: wasmImports, | |
| }; | |
| const stringFromHeap = stringPointer => { | |
| const heap = Module.HEAPU8; | |
| let endPointer = stringPointer; | |
| // Find null terminating character. | |
| while (heap[endPointer]) ++endPointer; | |
| return (new TextDecoder('utf8')).decode(heap.subarray(stringPointer, endPointer)); | |
| } | |
| fetch('wasm_basic_test.wasm') | |
| .then(response => response.arrayBuffer()) | |
| .then(bufferSource => WebAssembly.instantiate(bufferSource, importObject)) | |
| .then(({instance}) => { | |
| Module.asm = instance.exports; | |
| wasmImports.emscripten_notify_memory_growth(); | |
| assertEqual(3, Module.asm.add(1, 2)); | |
| // Include space for null terminating byte. | |
| const helloStringPointer = Module.asm.malloc(7); | |
| Module.asm.getHello(helloStringPointer); | |
| assertEqual("Hello.", stringFromHeap(helloStringPointer)); | |
| Module.asm.free(helloStringPointer); | |
| success(); | |
| }) | |
| .catch(fail); | |
| setupFinished(); | |
| </script> | |
| </body> |