115 lines
2.6 KiB
TypeScript
115 lines
2.6 KiB
TypeScript
import { vi } from 'vitest'
|
|
|
|
/**
|
|
* Mock implementation of Tone.js for testing
|
|
* This provides consistent, deterministic behavior for audio-related tests
|
|
*/
|
|
|
|
// Mock Sampler class
|
|
export const MockSampler = vi.fn().mockImplementation(() => ({
|
|
triggerAttackRelease: vi.fn(),
|
|
triggerAttack: vi.fn(),
|
|
triggerRelease: vi.fn(),
|
|
dispose: vi.fn(),
|
|
loaded: true,
|
|
volume: {
|
|
value: -12
|
|
},
|
|
connect: vi.fn(),
|
|
disconnect: vi.fn(),
|
|
toDestination: vi.fn()
|
|
}))
|
|
|
|
// Mock Transport object
|
|
export const MockTransport = {
|
|
start: vi.fn(),
|
|
stop: vi.fn(),
|
|
pause: vi.fn(),
|
|
position: '0:0:0',
|
|
bpm: {
|
|
value: 120,
|
|
rampTo: vi.fn()
|
|
},
|
|
timeSignature: [4, 4],
|
|
state: 'stopped',
|
|
scheduleOnce: vi.fn(),
|
|
scheduleRepeat: vi.fn(),
|
|
cancel: vi.fn(),
|
|
clear: vi.fn()
|
|
}
|
|
|
|
// Mock Destination
|
|
export const MockDestination = {
|
|
volume: {
|
|
value: -12
|
|
},
|
|
mute: false,
|
|
connect: vi.fn(),
|
|
disconnect: vi.fn()
|
|
}
|
|
|
|
// Mock ToneAudioBuffer
|
|
export const MockToneAudioBuffer = vi.fn().mockImplementation(() => ({
|
|
loaded: true,
|
|
dispose: vi.fn(),
|
|
get: vi.fn(),
|
|
set: vi.fn(),
|
|
load: vi.fn().mockResolvedValue(undefined)
|
|
}))
|
|
|
|
// Mock Gain node
|
|
export const MockGain = vi.fn().mockImplementation(() => ({
|
|
gain: {
|
|
value: 1,
|
|
setValueAtTime: vi.fn(),
|
|
linearRampToValueAtTime: vi.fn(),
|
|
exponentialRampToValueAtTime: vi.fn()
|
|
},
|
|
connect: vi.fn(),
|
|
disconnect: vi.fn(),
|
|
dispose: vi.fn()
|
|
}))
|
|
|
|
// Mock Meter
|
|
export const MockMeter = vi.fn().mockImplementation(() => ({
|
|
getValue: vi.fn().mockReturnValue(-Infinity),
|
|
connect: vi.fn(),
|
|
disconnect: vi.fn(),
|
|
dispose: vi.fn()
|
|
}))
|
|
|
|
// Complete Tone.js mock
|
|
export const ToneMock = {
|
|
Sampler: MockSampler,
|
|
Transport: MockTransport,
|
|
Destination: MockDestination,
|
|
ToneAudioBuffer: MockToneAudioBuffer,
|
|
Gain: MockGain,
|
|
Meter: MockMeter,
|
|
|
|
// Context management
|
|
start: vi.fn().mockResolvedValue(undefined),
|
|
getContext: vi.fn().mockReturnValue({
|
|
state: 'running',
|
|
resume: vi.fn().mockResolvedValue(undefined),
|
|
suspend: vi.fn().mockResolvedValue(undefined),
|
|
close: vi.fn().mockResolvedValue(undefined)
|
|
}),
|
|
|
|
// Time utilities
|
|
Time: vi.fn().mockImplementation((time) => ({
|
|
toSeconds: vi.fn().mockReturnValue(parseFloat(time) || 0),
|
|
valueOf: vi.fn().mockReturnValue(parseFloat(time) || 0)
|
|
})),
|
|
|
|
// Frequency utilities
|
|
Frequency: vi.fn().mockImplementation((freq) => ({
|
|
toFrequency: vi.fn().mockReturnValue(parseFloat(freq) || 440),
|
|
valueOf: vi.fn().mockReturnValue(parseFloat(freq) || 440)
|
|
}))
|
|
}
|
|
|
|
// Setup the global mock
|
|
export const setupToneMocks = () => {
|
|
vi.doMock('tone', () => ToneMock)
|
|
} |