329 lines
9.0 KiB
JavaScript
329 lines
9.0 KiB
JavaScript
|
/* eslint-env jasmine */
|
||
|
import TestHelpers from './test-helpers';
|
||
|
|
||
|
let audioElement;
|
||
|
let wavesurfer;
|
||
|
export function sharedTests(backend) {
|
||
|
let element;
|
||
|
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
|
||
|
|
||
|
beforeEach(function() {
|
||
|
audioElement = TestHelpers.createElement('testAudio', 'audio');
|
||
|
const wave = TestHelpers.createWaveform({
|
||
|
container: TestHelpers.createElement(),
|
||
|
waveColor: 'red',
|
||
|
progressColor: 'orange',
|
||
|
cursorColor: 'white',
|
||
|
backend: backend
|
||
|
});
|
||
|
wavesurfer = wave[0];
|
||
|
element = wave[1];
|
||
|
});
|
||
|
|
||
|
afterEach(function() {
|
||
|
wavesurfer.destroy();
|
||
|
TestHelpers.removeElement(element);
|
||
|
});
|
||
|
/**
|
||
|
* @test {WaveSurfer#isReady}
|
||
|
*/
|
||
|
it('should be ready', function(done) {
|
||
|
wavesurfer.once('ready', done);
|
||
|
loadElement();
|
||
|
});
|
||
|
|
||
|
/**
|
||
|
* @test {WaveSurfer#waveform-ready} When the waveform is drawn, the 'waveform-ready' event is triggered
|
||
|
*/
|
||
|
it('should fire waveform-ready event when the waveform is drawn', function(done) {
|
||
|
const waveformReadySpy = jasmine.createSpy('waveform-ready-spy');
|
||
|
|
||
|
wavesurfer.on('waveform-ready', () => {
|
||
|
waveformReadySpy();
|
||
|
|
||
|
expect(waveformReadySpy).toHaveBeenCalledTimes(1);
|
||
|
|
||
|
done();
|
||
|
});
|
||
|
|
||
|
loadAudioPeaks();
|
||
|
});
|
||
|
|
||
|
/**
|
||
|
* @test {WaveSurfer#play}
|
||
|
* @test {WaveSurfer#isPlaying}
|
||
|
*/
|
||
|
it('should play', function(done) {
|
||
|
wavesurfer.once('ready', function() {
|
||
|
wavesurfer.play();
|
||
|
|
||
|
expect(wavesurfer.isPlaying()).toBeTrue();
|
||
|
|
||
|
done();
|
||
|
});
|
||
|
loadElement();
|
||
|
});
|
||
|
|
||
|
/**
|
||
|
* @test {WaveSurfer#play}
|
||
|
* @test {WaveSurfer#isPlaying}
|
||
|
* @test {WaveSurfer#pause}
|
||
|
*/
|
||
|
it('should pause', function(done) {
|
||
|
wavesurfer.once('ready', function() {
|
||
|
wavesurfer.play();
|
||
|
expect(wavesurfer.isPlaying()).toBeTrue();
|
||
|
|
||
|
wavesurfer.pause();
|
||
|
expect(wavesurfer.isPlaying()).toBeFalse();
|
||
|
|
||
|
done();
|
||
|
});
|
||
|
loadElement();
|
||
|
});
|
||
|
|
||
|
/**
|
||
|
* @test {WaveSurfer#playPause}
|
||
|
* @test {WaveSurfer#isPlaying}
|
||
|
*/
|
||
|
it('should play or pause', function(done) {
|
||
|
wavesurfer.once('ready', function() {
|
||
|
wavesurfer.playPause();
|
||
|
expect(wavesurfer.isPlaying()).toBeTrue();
|
||
|
|
||
|
wavesurfer.playPause();
|
||
|
expect(wavesurfer.isPlaying()).toBeFalse();
|
||
|
|
||
|
done();
|
||
|
});
|
||
|
loadElement();
|
||
|
});
|
||
|
|
||
|
/** @test {WaveSurfer#getDuration} */
|
||
|
it('should get duration', function(done) {
|
||
|
wavesurfer.once('ready', function() {
|
||
|
let duration = parseInt(wavesurfer.getDuration(), 10);
|
||
|
expect(duration).toEqual(TestHelpers.EXAMPLE_FILE_DURATION);
|
||
|
|
||
|
done();
|
||
|
});
|
||
|
loadElement();
|
||
|
});
|
||
|
|
||
|
/** @test {WaveSurfer#getCurrentTime} */
|
||
|
it('should get currentTime', function(done) {
|
||
|
wavesurfer.once('ready', function() {
|
||
|
// initially zero
|
||
|
let time = wavesurfer.getCurrentTime();
|
||
|
expect(time).toEqual(0);
|
||
|
|
||
|
// seek to 50%
|
||
|
wavesurfer.seekTo(0.5);
|
||
|
time = parseInt(wavesurfer.getCurrentTime(), 10);
|
||
|
expect(time).toEqual(10);
|
||
|
|
||
|
done();
|
||
|
});
|
||
|
loadElement();
|
||
|
});
|
||
|
|
||
|
/** @test {WaveSurfer#setCurrentTime} */
|
||
|
it('should set currentTime', function(done) {
|
||
|
wavesurfer.once('ready', function() {
|
||
|
// initially zero
|
||
|
let time = wavesurfer.getCurrentTime();
|
||
|
expect(time).toEqual(0);
|
||
|
|
||
|
// set to 10 seconds
|
||
|
wavesurfer.setCurrentTime(10);
|
||
|
time = wavesurfer.getCurrentTime();
|
||
|
expect(time).toEqual(10);
|
||
|
|
||
|
// set to something higher than duration
|
||
|
wavesurfer.setCurrentTime(1000);
|
||
|
time = wavesurfer.getCurrentTime();
|
||
|
// sets it to end of track
|
||
|
time = parseInt(wavesurfer.getCurrentTime(), 10);
|
||
|
expect(time).toEqual(TestHelpers.EXAMPLE_FILE_DURATION);
|
||
|
|
||
|
done();
|
||
|
});
|
||
|
loadElement();
|
||
|
});
|
||
|
|
||
|
/** @test {WaveSurfer#skipBackward} */
|
||
|
it('should skip backward', function(done) {
|
||
|
wavesurfer.once('ready', function() {
|
||
|
// seek to 50%
|
||
|
wavesurfer.seekTo(0.5);
|
||
|
|
||
|
// skip 4 seconds backward
|
||
|
wavesurfer.skipBackward(4);
|
||
|
let time = wavesurfer.getCurrentTime();
|
||
|
expect(time).toBeWithinRange(6.88, 6.89);
|
||
|
|
||
|
// skip backward with params.skipLength (default: 2 seconds)
|
||
|
wavesurfer.skipBackward();
|
||
|
time = wavesurfer.getCurrentTime();
|
||
|
expect(time).toBeWithinRange(4.88, 4.89);
|
||
|
|
||
|
done();
|
||
|
});
|
||
|
loadElement();
|
||
|
});
|
||
|
|
||
|
/** @test {WaveSurfer#skipForward} */
|
||
|
it('should skip forward', function(done) {
|
||
|
wavesurfer.once('ready', function() {
|
||
|
// skip 4 seconds forward
|
||
|
wavesurfer.skipForward(4);
|
||
|
let time = wavesurfer.getCurrentTime();
|
||
|
expect(time).toBeWithinRange(3.99, 4);
|
||
|
|
||
|
// skip forward with params.skipLength (default: 2 seconds)
|
||
|
wavesurfer.skipForward();
|
||
|
time = wavesurfer.getCurrentTime();
|
||
|
expect(time).toBeWithinRange(5.99, 6);
|
||
|
|
||
|
done();
|
||
|
});
|
||
|
loadElement();
|
||
|
});
|
||
|
|
||
|
/** @test {WaveSurfer#getPlaybackRate} */
|
||
|
it('should get playback rate', function(done) {
|
||
|
wavesurfer.once('ready', function() {
|
||
|
let rate = wavesurfer.getPlaybackRate();
|
||
|
expect(rate).toEqual(1);
|
||
|
|
||
|
done();
|
||
|
});
|
||
|
loadElement();
|
||
|
});
|
||
|
|
||
|
/** @test {WaveSurfer#setPlaybackRate} */
|
||
|
it('should set playback rate', function(done) {
|
||
|
wavesurfer.once('ready', function() {
|
||
|
let rate = 0.5;
|
||
|
wavesurfer.setPlaybackRate(rate);
|
||
|
|
||
|
expect(wavesurfer.getPlaybackRate()).toEqual(rate);
|
||
|
|
||
|
done();
|
||
|
});
|
||
|
loadElement();
|
||
|
});
|
||
|
|
||
|
/** @test {WaveSurfer#getVolume} */
|
||
|
it('should get volume', function(done) {
|
||
|
audioElement.volume = 0.3;
|
||
|
wavesurfer.once('ready', function() {
|
||
|
let volume = wavesurfer.getVolume();
|
||
|
expect(volume).toEqual(audioElement.volume);
|
||
|
|
||
|
done();
|
||
|
});
|
||
|
loadElement();
|
||
|
});
|
||
|
|
||
|
/** @test {WaveSurfer#setVolume} */
|
||
|
it('should set volume', function(done) {
|
||
|
let targetVolume = 0.5;
|
||
|
|
||
|
wavesurfer.once('volume', function(result) {
|
||
|
expect(result).toEqual(targetVolume);
|
||
|
expect(wavesurfer.getVolume()).toEqual(targetVolume);
|
||
|
|
||
|
done();
|
||
|
});
|
||
|
|
||
|
wavesurfer.once('ready', function() {
|
||
|
wavesurfer.setVolume(targetVolume);
|
||
|
});
|
||
|
loadElement();
|
||
|
});
|
||
|
|
||
|
/** @test {WaveSurfer#toggleMute} */
|
||
|
it('should toggle mute', function(done) {
|
||
|
wavesurfer.once('ready', function() {
|
||
|
wavesurfer.toggleMute();
|
||
|
expect(wavesurfer.isMuted).toBeTrue();
|
||
|
|
||
|
wavesurfer.toggleMute();
|
||
|
expect(wavesurfer.isMuted).toBeFalse();
|
||
|
|
||
|
done();
|
||
|
});
|
||
|
loadElement();
|
||
|
});
|
||
|
|
||
|
/** @test {WaveSurfer#setMute} */
|
||
|
it('should set mute', function(done) {
|
||
|
wavesurfer.once('ready', function() {
|
||
|
wavesurfer.setMute(true);
|
||
|
expect(wavesurfer.isMuted).toBeTrue();
|
||
|
|
||
|
wavesurfer.setMute(false);
|
||
|
expect(wavesurfer.isMuted).toBeFalse();
|
||
|
|
||
|
done();
|
||
|
});
|
||
|
loadElement();
|
||
|
});
|
||
|
|
||
|
/** @test {WaveSurfer#getMute} */
|
||
|
it('should get mute', function(done) {
|
||
|
wavesurfer.once('ready', function() {
|
||
|
wavesurfer.setMute(true);
|
||
|
expect(wavesurfer.getMute()).toBeTrue();
|
||
|
|
||
|
wavesurfer.setMute(false);
|
||
|
expect(wavesurfer.getMute()).toBeFalse();
|
||
|
|
||
|
done();
|
||
|
});
|
||
|
loadElement();
|
||
|
});
|
||
|
}
|
||
|
|
||
|
export function sharedErrorTests(backend) {
|
||
|
let element;
|
||
|
|
||
|
beforeEach(function() {
|
||
|
element = TestHelpers.createElement('test');
|
||
|
});
|
||
|
|
||
|
afterEach(function() {
|
||
|
TestHelpers.removeElement(element);
|
||
|
});
|
||
|
|
||
|
/**
|
||
|
* @test {WaveSurfer}
|
||
|
*/
|
||
|
it('throw when load is called with invalid HTMLMediaElement', function() {
|
||
|
let wave = TestHelpers.createWaveform({
|
||
|
container: '#test',
|
||
|
backend: backend
|
||
|
});
|
||
|
expect(function() {
|
||
|
wave[0].load({
|
||
|
foo: 'bar'
|
||
|
});
|
||
|
}).toThrow(new Error('media parameter is not a valid media element'));
|
||
|
});
|
||
|
}
|
||
|
function loadElement() {
|
||
|
// set src
|
||
|
audioElement.src = TestHelpers.EXAMPLE_FILE_PATH;
|
||
|
wavesurfer.load(audioElement);
|
||
|
}
|
||
|
|
||
|
/** Retrieve normalized waveform peaks, then load an audio resource giving peaks and setting preload attribute to 'none' **/
|
||
|
function loadAudioPeaks() {
|
||
|
TestHelpers.getPeaks(TestHelpers.EXAMPLE_STEREO_FILE_JSON_PATH, (peaks) => {
|
||
|
const src = TestHelpers.EXAMPLE_STEREO_FILE_PATH;
|
||
|
|
||
|
wavesurfer.load(src, peaks, 'none', TestHelpers.EXAMPLE_STEREO_FILE_DURATION);
|
||
|
});
|
||
|
}
|