UNPKG

wavesurfer.js

Version:
47 lines (46 loc) 2.05 kB
import TimelinePlugin from '../plugins/timeline.js'; import { signal } from '../reactive/store.js'; const createEmitter = () => { const listeners = new Map(); return { on: jest.fn((event, listener) => { if (!listeners.has(event)) { listeners.set(event, new Set()); } listeners.get(event).add(listener); return () => { var _a; return (_a = listeners.get(event)) === null || _a === void 0 ? void 0 : _a.delete(listener); }; }), }; }; const createWaveSurfer = (duration = 1, scrollWidth = 100) => { const emitter = createEmitter(); const durationSignal = signal(duration); const wrapper = document.createElement('div'); Object.defineProperty(wrapper, 'scrollWidth', { configurable: true, value: scrollWidth }); document.body.appendChild(wrapper); return Object.assign(Object.assign({}, emitter), { getDuration: jest.fn(() => duration), getScroll: jest.fn(() => 0), getState: jest.fn(() => ({ duration: durationSignal })), getWidth: jest.fn(() => scrollWidth * 2), getWrapper: jest.fn(() => wrapper) }); }; describe('TimelinePlugin', () => { afterEach(() => { document.body.innerHTML = ''; jest.clearAllMocks(); }); test('preserves high precision offsets for notch positions', () => { const wavesurfer = createWaveSurfer(1, 100); const plugin = TimelinePlugin.create({ duration: 1, timeInterval: 0.333, timeOffset: 0.001, primaryLabelInterval: 10, secondaryLabelInterval: 10, }); plugin._init(wavesurfer); const notches = wavesurfer.getWrapper().querySelectorAll('[part^="timeline-notch"]'); expect(notches).toHaveLength(4); const offsets = Array.from(notches, (notch) => parseFloat(notch.style.left)); expect(offsets[0]).toBeCloseTo(0.1); expect(offsets[1]).toBeCloseTo(33.4); expect(offsets[2]).toBeCloseTo(66.7); expect(offsets[3]).toBeCloseTo(100); }); });