wrapture
Version:
Wrapture lets you go from a Python-trained model to deployable JavaScript with a single command. It generates TypeScript bindings and a Web/Node-compatible wrapper, using WebGPU/WASM-ready ONNX runtimes.
48 lines (38 loc) • 1.63 kB
text/typescript
// test/convert.test.js
import test from 'node:test';
import assert from 'node:assert/strict';
import fs from 'node:fs';
import { tmpdir } from 'node:os';
import { randomUUID } from 'node:crypto';
import path, { dirname } from 'node:path';
import { fileURLToPath } from 'node:url';
import { convert } from '../convert';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const fixtureModelPath = path.resolve('test', 'fixtures', 'basic_model.pt');
const outputDir = path.join(tmpdir(), `wrapture-test-${randomUUID()}`);
test('convert() should reject if file does not exist', async () => {
const nonExistentPath = 'some/missing/model.pt';
const invalidOut = path.join(tmpdir(), `wrapture-test-${randomUUID()}`);
await assert.rejects(
() => convert(nonExistentPath, invalidOut, {}),
/Input model file not found/i
);
});
test('convert() resolves if subprocess exits cleanly', async (t) => {
// Mock subprocess call by making convert.py short-circuit if needed
const mockInput = fixtureModelPath;
const output = outputDir;
// Make sure the output dir exists
fs.mkdirSync(output, { recursive: true });
// You can only run this if the python script exists and is safe to test
// Skip the test if script is missing or too slow
const scriptPath = path.resolve(__dirname, '../../../python', 'convert.py');
if (!fs.existsSync(scriptPath)) {
t.skip('Python script does not exist, skipping subprocess test');
return;
}
await assert.doesNotReject(async () => {
await convert(mockInput, output, { format: 'onnx', quantize: false });
});
});