Add test case for group device automation and pad provisioning

This commit is contained in:
2026-07-14 11:29:28 +02:00
parent fa3ae193bb
commit 6eaa7547ea

View File

@@ -278,6 +278,70 @@ test('serializes nested Live 10 Simplers without artificial empty Session clips'
}
});
test('binds group device automation to each concrete pad and provisions MOD devices', async () => {
const server = await createServer({
server: { middlewareMode: true },
appType: 'custom',
mode: 'production',
define: { 'import.meta.env.DEV': 'false' },
});
try {
const { buildProject } = await server.ssrLoadModule('/src/lib/exporters/ableton/builders.ts');
const data = project();
data.pads.a[2].pitch = 7;
data.settings.groupFaderParams.a[FaderParam.PTC] = 0.5;
data.groupPatterns[0].events.push(
{
type: 'fader',
kind: PatternEventKind.Fader,
position: 0,
source: 0,
flags: 0,
rawData: new Uint8Array(8),
parameter: FaderParam.PTC,
reserved: 0,
rawValue: 24575,
value: 0.75,
},
{
type: 'fader',
kind: PatternEventKind.Fader,
position: 0,
source: 0,
flags: 0,
rawData: new Uint8Array(8),
parameter: FaderParam.MOD,
reserved: 0,
rawValue: 16384,
value: 0.5,
},
);
const generated = await buildProject(data, {
abletonVersion: '10',
includeArchivedSamples: true,
exportAllPadsWithSamples: true,
groupTracks: true,
sendEffects: false,
allScenes: true,
});
const xml = gunzipSync(Buffer.from(generated)).toString('utf8');
const simplerBlocks = [...xml.matchAll(/<OriginalSimpler\b[\s\S]*?<\/OriginalSimpler>/g)].map(
(match) => match[0],
);
assert.match(xml, /<FloatEvent\b[^>]*Value="2\.5"/);
assert.match(xml, /<FloatEvent\b[^>]*Value="9\.5"/);
assert.ok(
simplerBlocks.every((simpler) =>
/<Lfo>[\s\S]*?<IsOn>[\s\S]*?<Manual Value="true"\s*\/>/.test(simpler),
),
);
} finally {
await server.close();
}
});
test('automatically builds a per-group rack without flattening chromatic pads', () => {
const result = abletonTransformer(project(), {
includeArchivedSamples: true,