1
0
Fork 0
mirror of https://github.com/ton-blockchain/ton synced 2025-02-15 04:32:21 +00:00
ton/crypto/func/auto-tests/legacy_tester.js
Aleksandr Kirsanov a5d2a1003f
[FunC] Enrich and refactor testing framework, add negative tests
* fully refactor run_tests.py, make it extensible for the future
* an ability to write @compilation_should_fail tests
* an ability to launch run_tests.py for a single .fc file
* keep run_tests.js in sync with run_tests.py
* extract legacy_tests names/hashes to a separate file
  shared between legacy_tester.py and legacy_tester.js
2024-06-14 15:22:56 +03:00

68 lines
2.1 KiB
JavaScript

// Usage: `node legacy_tests.js` from current dir, providing some env (see getenv() calls).
// This is a JS version of legacy_tester.py to test FunC compiled to WASM.
const fs = require('fs');
const path = require('path')
const process = require('process');
const { compileWasm, compileFile } = require('./wasm_tests_common');
/** @return {string} */
function getenv(name, def = null) {
if (name in process.env)
return process.env[name]
if (def === null) {
console.log(`Environment variable ${name} is not set`)
process.exit(1)
}
return def
}
const FUNCFIFTLIB_MODULE = getenv('FUNCFIFTLIB_MODULE')
const FUNCFIFTLIB_WASM = getenv('FUNCFIFTLIB_WASM')
const TESTS_DIR = "legacy_tests"
/**
* @return {{filename: string, code_hash: BigInt}[]}
*/
function load_legacy_tests_list(jsonl_filename) {
let contents = fs.readFileSync(jsonl_filename)
let results = [...contents.toString().matchAll(/^\[\s*"(.*?)"\s*,\s*(.*?)\s*]/gms)]
return results.map((line) => ({
filename: line[1].trim(),
code_hash: BigInt(line[2]),
}))
}
async function main() {
const tests = load_legacy_tests_list('legacy_tests.jsonl')
for (let ti = 0; ti < tests.length; ++ti) {
const {filename: filename_rel, code_hash} = tests[ti]
const filename = path.join(TESTS_DIR, filename_rel)
console.log(`Running test ${ti + 1}/${tests.length}: ${filename_rel}`)
if (filename.includes('storage-provider')) {
console.log(" Skip");
continue;
}
const wasmModule = await compileWasm(FUNCFIFTLIB_MODULE, FUNCFIFTLIB_WASM)
const response = compileFile(wasmModule, filename);
if (response.status !== 'ok') {
console.error(response);
throw new Error(`Could not compile ${filename}`);
}
if (BigInt('0x' + response.codeHashHex) !== code_hash) {
throw new Error(`Code hash is different for ${filename}`);
}
console.log(' OK ');
}
console.log(`Done ${tests.length}`)
}
main().catch(console.error)