26 lines
1.7 KiB
JavaScript
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');
|