1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
// SPDX-License-Identifier: BSD-3-Clause
/**
* Define utility functions to preload and dump a file.
* This file gets injected as a `--pre-js` file.
*/
var vtkEmscriptenTestUtilities = {
/**
* Fetches a file `hostPath` from server and copies webassembly memory.
* Here is how you can call this from C/C++ code:
* ```cpp
* #include "vtkEmscriptenTestUtilities.h" // for PreloadDescriptor and vtkPreloadDataFileIntoMemory
* vtkEmscriptenTestUtilities::PreloadDescriptor* payload = nullptr;
* payload = reinterpret_cast<vtkEmscriptenTestUtilities::PreloadDescriptor*>(vtkPreloadDataFileIntoMemory("/path/to/server/directory/file.png"));
* ```
* @param {*} hostPath A valid path in the server"s filesystem.
*/
vtkPreloadDataFileIntoMemory__deps: ['malloc'],
vtkPreloadDataFileIntoMemory__sig: "pp",
vtkPreloadDataFileIntoMemory: (hostPathFile) => {
hostPathFile = UTF8ToString(hostPathFile);
const req = new XMLHttpRequest;
req.open("GET", `preload?file=${hostPathFile}`, false);
req.responseType = "arraybuffer";
req.send(null);
if (!(req.status >= 200 && req.status < 300)) {
return 0;
} else if (req.response !== undefined) {
let data = new Uint8Array(req.response || []);
const fileContentPtr = _malloc(data.length);
HEAPU8.set(data, fileContentPtr);
const payloadPtr = _malloc(4 + {{{ POINTER_SIZE }}});
{{{ makeSetValue('payloadPtr', 0, 'fileContentPtr', '*') }}}
{{{ makeSetValue('payloadPtr', `${POINTER_SIZE}`, 'data.length', '*') }}}
return payloadPtr;
}
},
/**
* Helps VTK C++ unit tests write a file in the server"s file system.
* Here is how you can call this from C/C++ code:
* ```cpp
* #include "vtkEmscriptenTestUtilities.h" // for vtkDumpFile
* vtkDumpFile("/path/to/server/directory/file.png", bytes, number_of_bytes);
* ```
* @param {*} hostPath A valid path in the server"s filesystem.
* @param {*} data A Uint8Array representing the contents of the file which will be dumped out in the server"s filesystem.
*/
vtkDumpFile__sig: "vppp",
vtkDumpFile: (hostPathFile, data, nbytes) => {
hostPathFile = UTF8ToString(hostPathFile);
const req = new XMLHttpRequest;
req.open("POST", `dump?file=${hostPathFile}`);
const byteArray = HEAPU8.subarray(data, data + nbytes);
req.send(new Uint8Array(byteArray));
},
};
mergeInto(LibraryManager.library, vtkEmscriptenTestUtilities);
|