import assert from 'node:assert/strict'; import test from 'node:test'; import { canonicalizeFilterFaderValue, convertGroupFaderValue, FADER_POLICIES, getFaderPolicy, } from '../src/lib/exporters/ableton/faderPolicies'; import { AblTrack } from '../src/lib/transformers/ableton'; import { FaderParam } from '../src/types/types'; const track = { volume: 0.4 } as AblTrack; test('defines an explicit policy for every EP group fader parameter', () => { assert.equal(Object.keys(FADER_POLICIES).length, 12); for (let parameter = FaderParam.LVL; parameter <= FaderParam.MOD; parameter++) { assert.ok(getFaderPolicy(parameter)); } }); test('separates Live targets, note transforms and unsupported group parameters', () => { assert.equal(getFaderPolicy(FaderParam.PAN).renderStrategy, 'target'); assert.equal(getFaderPolicy(FaderParam.VEL).renderStrategy, 'note'); assert.equal(getFaderPolicy(FaderParam.TIM).renderStrategy, 'unsupported'); assert.equal(getFaderPolicy(FaderParam.ATK).renderStrategy, 'unsupported'); assert.equal(getFaderPolicy(FaderParam.REL).renderStrategy, 'unsupported'); }); test('uses one group-fader conversion path for mixer and pad targets', () => { assert.equal(convertGroupFaderValue(FaderParam.LVL, 0.5, { track }), 0.2); assert.equal(convertGroupFaderValue(FaderParam.PAN, 0.75, { track }), 0.5); assert.equal(convertGroupFaderValue(FaderParam.PTC, 0.75, { track, valueOffset: 7 }), 9.5); }); test('canonicalizes only effectively-open filter fader values', () => { assert.equal(canonicalizeFilterFaderValue(FaderParam.LPF, 0.9996299743652344), 1); assert.equal(canonicalizeFilterFaderValue(FaderParam.HPF, 0.0003700256347656), 0); assert.equal(canonicalizeFilterFaderValue(FaderParam.LPF, 0.998), 0.998); assert.equal(canonicalizeFilterFaderValue(FaderParam.HPF, 0.002), 0.002); });