feat: Add test case for sparse pads handling (p01 omitted)
This commit is contained in:
100
tests/sparse-pads.test.ts
Normal file
100
tests/sparse-pads.test.ts
Normal file
@@ -0,0 +1,100 @@
|
||||
import assert from 'node:assert/strict';
|
||||
import test from 'node:test';
|
||||
import { collectPads } from '../src/lib/parsers';
|
||||
import abletonTransformer from '../src/lib/transformers/ableton';
|
||||
import dawProjectTransformer from '../src/lib/transformers/dawProject';
|
||||
import midiTransformer from '../src/lib/transformers/midi';
|
||||
import reaperTransformer from '../src/lib/transformers/reaper';
|
||||
import { TarFile } from '../src/lib/untar';
|
||||
import {
|
||||
EffectType,
|
||||
FaderParam,
|
||||
Group,
|
||||
GroupFaderParam,
|
||||
ProjectRawData,
|
||||
} from '../src/types/types';
|
||||
import { findPad } from '../src/lib/utils';
|
||||
|
||||
function faderParams(): GroupFaderParam {
|
||||
return Object.fromEntries(
|
||||
(['a', 'b', 'c', 'd'] as Group[]).map((group) => [
|
||||
group,
|
||||
Object.fromEntries(Array.from({ length: 12 }, (_, parameter) => [parameter, -1])),
|
||||
]),
|
||||
) as GroupFaderParam;
|
||||
}
|
||||
|
||||
function sparseProject(): ProjectRawData {
|
||||
const rawPad = new Uint8Array(27);
|
||||
rawPad[1] = 202;
|
||||
rawPad[16] = 100;
|
||||
rawPad[20] = 255;
|
||||
rawPad[24] = 60;
|
||||
const pads = collectPads([new TarFile('pads/a/p02', rawPad.length, rawPad)], []);
|
||||
const params = faderParams();
|
||||
|
||||
return {
|
||||
pads,
|
||||
groupPatterns: [],
|
||||
scenes: [
|
||||
{
|
||||
number: 1,
|
||||
name: '01',
|
||||
patternNumbers: { a: 0, b: 0, c: 0, d: 0 },
|
||||
timeSignature: { numerator: 4, denominator: 4 },
|
||||
patterns: [],
|
||||
patternEvents: {},
|
||||
},
|
||||
],
|
||||
songPositions: [],
|
||||
settings: {
|
||||
bpm: 120,
|
||||
scale: 0,
|
||||
rootNote: 0,
|
||||
groupFaderParams: params,
|
||||
faderAssignment: {
|
||||
a: FaderParam.LVL,
|
||||
b: FaderParam.LVL,
|
||||
c: FaderParam.LVL,
|
||||
d: FaderParam.LVL,
|
||||
},
|
||||
rawData: new Uint8Array(),
|
||||
},
|
||||
effects: {
|
||||
rawData: new Uint8Array(),
|
||||
effectType: EffectType.Off,
|
||||
param1: 0,
|
||||
param2: 0,
|
||||
},
|
||||
sounds: [],
|
||||
projectFile: {} as File,
|
||||
scenesSettings: { timeSignature: { numerator: 4, denominator: 4 } },
|
||||
};
|
||||
}
|
||||
|
||||
test('keeps physical p02 on zero-based pattern source 1 when p01 is omitted', () => {
|
||||
const data = sparseProject();
|
||||
const physicalPad = data.pads.a[0];
|
||||
|
||||
assert.equal(physicalPad.pad, 2);
|
||||
assert.equal(findPad('a0', data.pads), undefined);
|
||||
assert.equal(findPad('a1', data.pads), physicalPad);
|
||||
|
||||
const params = { exportAllPadsWithSamples: true, keepUnusedPatterns: false };
|
||||
assert.deepEqual(
|
||||
abletonTransformer(data, params).tracks.map((track) => track.padCode),
|
||||
['a1'],
|
||||
);
|
||||
assert.deepEqual(
|
||||
midiTransformer(data, params).tracks.map((track) => track.padCode),
|
||||
['a1'],
|
||||
);
|
||||
assert.deepEqual(
|
||||
reaperTransformer(data, params).tracks.map((track) => track.padCode),
|
||||
['a1'],
|
||||
);
|
||||
assert.deepEqual(
|
||||
dawProjectTransformer(data, params).tracks.map((track) => track.padCode),
|
||||
['a1'],
|
||||
);
|
||||
});
|
||||
Reference in New Issue
Block a user