Files
IAMCCS-IAMCCS-nodes/tests/test_open_h3_resolution_summary.cjs
T

26 lines
1.7 KiB
JavaScript

const fs = require('node:fs');
const path = require('node:path');
const vm = require('node:vm');
const assert = require('node:assert/strict');
const source = fs.readFileSync(path.join(__dirname, '../web/iamccs_h3_settings_pro_ui.js'), 'utf8');
const start = source.indexOf('function openH3ResolutionEstimate(');
const end = source.indexOf('function openH3ResolutionSummary(', start);
const context = vm.createContext({widget: (node, name) => node.widgets.find(item => item.name === name)});
vm.runInContext(source.slice(start, end) + '\nglobalThis.estimate = openH3ResolutionEstimate;', context);
const node = {widgets: Object.entries({width: 640, height: 384, h3_open_refine_scale: 2, h3_open_refine_enabled: true}).map(([name, value]) => ({name, value}))};
const set = (name, value) => {node.widgets.find(item => item.name === name).value = value;};
let result = context.estimate(node);
assert.deepEqual([result.targetWidth, result.targetHeight, result.pixelGain], [1280, 768, 4]);
set('width', 1024); set('height', 576); set('h3_open_refine_scale', 2.5);
result = context.estimate(node);
assert.deepEqual([result.targetWidth, result.targetHeight, result.pixelGain], [2560, 1440, 6.25]);
set('width', 736); set('height', 416); set('h3_open_refine_scale', 1.5);
result = context.estimate(node);
assert.deepEqual([result.targetWidth, result.targetHeight], [1088, 640], 'match Python half-to-even, not Math.round');
set('h3_open_refine_enabled', false);
assert.equal(context.estimate(node).enabled, false);
set('width', 0);
assert.equal(context.estimate(node), null);
assert.match(source, /section\.append\(openH3ResolutionSummary\(node\)\)/);
console.log('PASS: native/target sizes, pixel gain, QHD, Python grid rounding and bypass state');