(function test() { // Read this test file using jsc shell's builtins, and check that its content is as expected. const in_file = 'jsc-read.js'; const check = content_read => { let testContent = test.toString(); let lineEnding = testContent.match(/\r?\n/)[0]; let expect = `(${testContent})();${lineEnding}`; if (content_read !== expect) throw Error('Expected to read this file as-is, instead read:\n==========\n' + content_read + '\n=========='); }; const test_arraybuffer = read_function => { let file = read_function(in_file, 'binary'); if (typeof file.buffer !== 'object' || file.byteLength === undefined || file.length === undefined || file.BYTES_PER_ELEMENT !== 1 || file.byteOffset !== 0) throw Error('Expected a Uint8Array'); let str = ''; for (var i = 0; i != file.length; ++i) str += String.fromCharCode(file[i]); // Assume ASCII. check(str); }; const test_string = read_function => { let str = read_function(in_file); if (typeof str !== 'string') throw Error('Expected a string'); check(str); }; // jsc's original file reading function is `readFile`, whereas SpiderMonkey // shell's file reading function is `read`. The latter is used by // emscripten's shell.js (d8 calls it `readbuffer`, which shell.js // polyfills). test_arraybuffer(readFile); test_arraybuffer(read); test_string(readFile); test_string(read); })();