added audioplayer contrib module
This commit is contained in:
Executable
+108
@@ -0,0 +1,108 @@
|
||||
import PeakCache from '../src/peakcache';
|
||||
|
||||
describe('PeakCache:', function() {
|
||||
var peakcache;
|
||||
var test_length = 200;
|
||||
var test_length2 = 300;
|
||||
var test_start = 50;
|
||||
var test_end = 100;
|
||||
var test_start2 = 100;
|
||||
var test_end2 = 120;
|
||||
var test_start3 = 120;
|
||||
var test_end3 = 150;
|
||||
|
||||
var window_size = 20;
|
||||
|
||||
function __createPeakCache() {
|
||||
peakcache = new PeakCache();
|
||||
}
|
||||
|
||||
beforeEach(function (done) {
|
||||
__createPeakCache();
|
||||
done();
|
||||
});
|
||||
|
||||
/** @test {PeakCache#addRangeToPeakCache} */
|
||||
it('empty cache returns full range', function() {
|
||||
var newranges = peakcache.addRangeToPeakCache(test_length, test_start, test_end);
|
||||
expect(newranges.length).toEqual(1);
|
||||
expect(newranges[0][0]).toEqual(test_start);
|
||||
expect(newranges[0][1]).toEqual(test_end);
|
||||
});
|
||||
|
||||
/** @test {PeakCache#addRangeToPeakCache} */
|
||||
it('different length clears cache', function() {
|
||||
peakcache.addRangeToPeakCache(test_length, test_start, test_end);
|
||||
var newranges = peakcache.addRangeToPeakCache(test_length2, test_start, test_end);
|
||||
expect(newranges.length).toEqual(1);
|
||||
expect(newranges[0][0]).toEqual(test_start);
|
||||
expect(newranges[0][1]).toEqual(test_end);
|
||||
});
|
||||
|
||||
/** @test {PeakCache#addRangeToPeakCache} */
|
||||
it('consecutive calls return no ranges', function() {
|
||||
peakcache.addRangeToPeakCache(test_length, test_start, test_end);
|
||||
var newranges = peakcache.addRangeToPeakCache(test_length, test_start, test_end);
|
||||
expect(newranges.length).toEqual(0);
|
||||
});
|
||||
|
||||
/** @test {PeakCache#addRangeToPeakCache} */
|
||||
it('sliding window returns window sized range', function() {
|
||||
var newranges = peakcache.addRangeToPeakCache(test_length, test_start, test_end);
|
||||
expect(newranges.length).toEqual(1);
|
||||
expect(newranges[0][0]).toEqual(test_start);
|
||||
expect(newranges[0][1]).toEqual(test_end);
|
||||
var newranges = peakcache.addRangeToPeakCache(test_length, test_start + window_size, test_end + window_size);
|
||||
expect(newranges.length).toEqual(1);
|
||||
expect(newranges[0][0]).toEqual(test_end);
|
||||
expect(newranges[0][1]).toEqual(test_end + window_size);
|
||||
var newranges = peakcache.addRangeToPeakCache(test_length, test_start + window_size * 2, test_end + window_size * 2);
|
||||
expect(newranges.length).toEqual(1);
|
||||
expect(newranges[0][0]).toEqual(test_end + window_size);
|
||||
expect(newranges[0][1]).toEqual(test_end + window_size * 2);
|
||||
});
|
||||
|
||||
/** @test {PeakCache#addRangeToPeakCache} */
|
||||
/** @test {PeakCache#getCacheRanges} */
|
||||
it('disjoint set creates two ranges', function() {
|
||||
peakcache.addRangeToPeakCache(test_length, test_start, test_end);
|
||||
peakcache.addRangeToPeakCache(test_length, test_start3, test_end3);
|
||||
var ranges = peakcache.getCacheRanges();
|
||||
expect(ranges.length).toEqual(2);
|
||||
expect(ranges[0][0]).toEqual(test_start);
|
||||
expect(ranges[0][1]).toEqual(test_end);
|
||||
expect(ranges[1][0]).toEqual(test_start3);
|
||||
expect(ranges[1][1]).toEqual(test_end3);
|
||||
});
|
||||
|
||||
/** @test {PeakCache#addRangeToPeakCache} */
|
||||
/** @test {PeakCache#getCacheRanges} */
|
||||
it('filling in disjoint sets coalesces', function() {
|
||||
peakcache.addRangeToPeakCache(test_length, test_start, test_end);
|
||||
peakcache.addRangeToPeakCache(test_length, test_start3, test_end3);
|
||||
var newranges = peakcache.addRangeToPeakCache(test_length, test_start, test_end3);
|
||||
expect(newranges.length).toEqual(1);
|
||||
expect(newranges[0][0]).toEqual(test_end);
|
||||
expect(newranges[0][1]).toEqual(test_start3);
|
||||
var ranges = peakcache.getCacheRanges();
|
||||
expect(ranges.length).toEqual(1);
|
||||
expect(ranges[0][0]).toEqual(test_start);
|
||||
expect(ranges[0][1]).toEqual(test_end3);
|
||||
});
|
||||
|
||||
/** @test {PeakCache#addRangeToPeakCache} */
|
||||
/** @test {PeakCache#getCacheRanges} */
|
||||
it('filling in disjoint sets coalesces / edge cases', function() {
|
||||
peakcache.addRangeToPeakCache(test_length, test_start, test_end);
|
||||
peakcache.addRangeToPeakCache(test_length, test_start3, test_end3);
|
||||
var newranges = peakcache.addRangeToPeakCache(test_length, test_start2, test_end2);
|
||||
expect(newranges.length).toEqual(1);
|
||||
expect(newranges[0][0]).toEqual(test_end);
|
||||
expect(newranges[0][1]).toEqual(test_start3);
|
||||
var ranges = peakcache.getCacheRanges();
|
||||
expect(ranges.length).toEqual(1);
|
||||
expect(ranges[0][0]).toEqual(test_start);
|
||||
expect(ranges[0][1]).toEqual(test_end3);
|
||||
});
|
||||
|
||||
});
|
||||
@@ -0,0 +1,118 @@
|
||||
import WaveSurfer from '../src/wavesurfer.js';
|
||||
|
||||
|
||||
/** @test {WaveSurfer} */
|
||||
describe('WaveSurfer/plugin API:', () => {
|
||||
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
|
||||
|
||||
let waveformDiv;
|
||||
let dummyPlugin;
|
||||
let wavesurfer;
|
||||
|
||||
// clean up after each test
|
||||
afterEach(done => {
|
||||
wavesurfer.destroy();
|
||||
waveformDiv.parentNode.removeChild(waveformDiv);
|
||||
done();
|
||||
});
|
||||
|
||||
// utility function to generate a mock plugin object
|
||||
function mockPlugin(name, deferInit = false) {
|
||||
class MockPlugin {
|
||||
constructor(params, ws) {
|
||||
this.ws = ws;
|
||||
// using the instance factory unfortunately makes it
|
||||
// difficult to use the spyOn function, so we use this
|
||||
// instead
|
||||
this.isInitialised = false;
|
||||
}
|
||||
init() {
|
||||
this.isInitialised = true;
|
||||
}
|
||||
destroy() { }
|
||||
}
|
||||
return {
|
||||
name,
|
||||
deferInit,
|
||||
staticProps: {
|
||||
[`${name}Static`]: 'static property value'
|
||||
},
|
||||
instance: MockPlugin
|
||||
};
|
||||
}
|
||||
|
||||
// utility function to generate wavesurfer instances for testing
|
||||
function __createWaveform(options = {}) {
|
||||
waveformDiv = document.createElement('div');
|
||||
document.getElementsByTagName('body')[0].appendChild(waveformDiv);
|
||||
|
||||
wavesurfer = WaveSurfer.create(Object.assign({
|
||||
container: waveformDiv
|
||||
}, options));
|
||||
wavesurfer.load('/base/spec/support/demo.wav');
|
||||
}
|
||||
|
||||
// plugin methods
|
||||
/** @test {WaveSurfer#addPlugin} */
|
||||
it('addPlugin adds staticProps and correctly builds and instantiates plugin class', () => {
|
||||
dummyPlugin = mockPlugin('dummy');
|
||||
__createWaveform();
|
||||
wavesurfer.addPlugin(dummyPlugin);
|
||||
|
||||
expect(wavesurfer.dummyStatic).toEqual(dummyPlugin.staticProps.dummyStatic);
|
||||
expect(wavesurfer.dummy.ws).toEqual(wavesurfer);
|
||||
expect(typeof Object.getPrototypeOf(wavesurfer.dummy).on).toEqual('function');
|
||||
});
|
||||
|
||||
/** @test {WaveSurfer#initPlugin} */
|
||||
it('initPlugin calls init function of the plugin and adds its name to the initialisedPluginList', () => {
|
||||
dummyPlugin = mockPlugin('dummy');
|
||||
__createWaveform();
|
||||
wavesurfer.addPlugin(dummyPlugin);
|
||||
spyOn(wavesurfer.dummy, 'init');
|
||||
wavesurfer.initPlugin('dummy');
|
||||
|
||||
expect(wavesurfer.dummy.init).toHaveBeenCalled();
|
||||
expect(wavesurfer.initialisedPluginList.dummy).toBeTrue();
|
||||
});
|
||||
|
||||
/** @test {WaveSurfer#destroyPlugin} */
|
||||
it('destroyPlugin calls plugin destroy function and removes the plugin name from the initialisedPluginList', () => {
|
||||
dummyPlugin = mockPlugin('dummy');
|
||||
__createWaveform();
|
||||
wavesurfer.addPlugin(dummyPlugin);
|
||||
wavesurfer.initPlugin('dummy');
|
||||
spyOn(wavesurfer.dummy, 'destroy');
|
||||
wavesurfer.destroyPlugin('dummy');
|
||||
|
||||
expect(wavesurfer.dummy.destroy).toHaveBeenCalled();
|
||||
expect(wavesurfer.initialisedPluginList.dummy).toBeUndefined();
|
||||
});
|
||||
|
||||
// auto-adding and initialising of plugins (registerPlugins)
|
||||
/** @test {WaveSurfer#registerPlugins} */
|
||||
it('registerPlugin adds a plugin but does not call plugin init function if the plugin property deferInit is truethy', () => {
|
||||
dummyPlugin = mockPlugin('dummy', true);
|
||||
__createWaveform({
|
||||
plugins: [
|
||||
dummyPlugin
|
||||
]
|
||||
});
|
||||
expect(wavesurfer.dummyStatic).toEqual(dummyPlugin.staticProps.dummyStatic);
|
||||
expect(wavesurfer.dummy.ws).toEqual(wavesurfer);
|
||||
expect(wavesurfer.dummy.isInitialised).toBeFalse();
|
||||
});
|
||||
|
||||
/** @test {WaveSurfer#registerPlugins} */
|
||||
it('registerPlugin adds a plugin ands calls plugin init function if the plugin property deferInit is falsey', () => {
|
||||
dummyPlugin = mockPlugin('dummy');
|
||||
__createWaveform({
|
||||
plugins: [
|
||||
dummyPlugin
|
||||
]
|
||||
});
|
||||
expect(wavesurfer.dummyStatic).toEqual(dummyPlugin.staticProps.dummyStatic);
|
||||
expect(wavesurfer.dummy.ws).toEqual(wavesurfer);
|
||||
expect(wavesurfer.dummy.isInitialised).toBeTrue();
|
||||
});
|
||||
});
|
||||
Binary file not shown.
Executable
+29
@@ -0,0 +1,29 @@
|
||||
import WaveSurfer from '../src/wavesurfer.js';
|
||||
|
||||
/** @test {util} */
|
||||
describe('util:', function() {
|
||||
/** @test {getId} */
|
||||
it('getId returns a random string', function() {
|
||||
expect(WaveSurfer.util.getId()).toStartWith('wavesurfer_');
|
||||
});
|
||||
|
||||
/** @test {min} */
|
||||
it('min returns the smallest number in the provided array', function() {
|
||||
expect(WaveSurfer.util.min([0, 1, 1.1, 100, -1])).toEqual(-1);
|
||||
});
|
||||
|
||||
/** @test {min} */
|
||||
it('min returns +Infinity for an empty array', function() {
|
||||
expect(WaveSurfer.util.min([])).toEqual(+Infinity);
|
||||
});
|
||||
|
||||
/** @test {max} */
|
||||
it('max returns the largest number in the provided array', function() {
|
||||
expect(WaveSurfer.util.max([0, 1, 1.1, 100, -1])).toEqual(100);
|
||||
});
|
||||
|
||||
/** @test {max} */
|
||||
it('max returns -Infinity for an empty array', function() {
|
||||
expect(WaveSurfer.util.max([])).toEqual(-Infinity);
|
||||
});
|
||||
});
|
||||
Executable
+113
@@ -0,0 +1,113 @@
|
||||
import WaveSurfer from '../src/wavesurfer.js';
|
||||
|
||||
/** @test {WaveSurfer} */
|
||||
describe('WaveSurfer/playback:', function () {
|
||||
var wavesurfer;
|
||||
|
||||
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
|
||||
|
||||
/*
|
||||
* Handle creating wavesurfer ui requirements
|
||||
*/
|
||||
function __createWaveform() {
|
||||
var waveformDiv = document.createElement('div');
|
||||
waveformDiv.id = 'waveform';
|
||||
document.getElementsByTagName('body')[0].appendChild(waveformDiv);
|
||||
|
||||
return WaveSurfer.create({
|
||||
container: '#waveform',
|
||||
waveColor: 'violet',
|
||||
progressColor: 'purple'
|
||||
});
|
||||
}
|
||||
|
||||
beforeAll(function (done) {
|
||||
wavesurfer = __createWaveform();
|
||||
wavesurfer.load('/base/spec/support/demo.wav');
|
||||
|
||||
wavesurfer.on('ready', function () {
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
beforeEach(function () {
|
||||
wavesurfer.seekTo(0);
|
||||
});
|
||||
|
||||
afterAll(function () {
|
||||
wavesurfer.destroy();
|
||||
});
|
||||
|
||||
/**
|
||||
* @test {WaveSurfer#play}
|
||||
* @test {WaveSurfer#isPlaying}
|
||||
*/
|
||||
it('should play', function () {
|
||||
wavesurfer.play();
|
||||
|
||||
expect(wavesurfer.isPlaying()).toBeTrue();
|
||||
});
|
||||
|
||||
/**
|
||||
* @test {WaveSurfer#play}
|
||||
* @test {WaveSurfer#isPlaying}
|
||||
* @test {WaveSurfer#pause}
|
||||
*/
|
||||
it('should pause', function () {
|
||||
wavesurfer.play();
|
||||
expect(wavesurfer.isPlaying()).toBeTrue();
|
||||
|
||||
wavesurfer.pause();
|
||||
expect(wavesurfer.isPlaying()).toBeFalse();
|
||||
});
|
||||
|
||||
/**
|
||||
* @test {WaveSurfer#playPause}
|
||||
* @test {WaveSurfer#isPlaying}
|
||||
*/
|
||||
it('should play or pause', function () {
|
||||
wavesurfer.playPause();
|
||||
expect(wavesurfer.isPlaying()).toBeTrue();
|
||||
|
||||
wavesurfer.playPause();
|
||||
expect(wavesurfer.isPlaying()).toBeFalse();
|
||||
});
|
||||
|
||||
/** @test {WaveSurfer#getDuration} */
|
||||
it('should get duration', function () {
|
||||
var duration = parseInt(wavesurfer.getDuration(), 10);
|
||||
expect(duration).toBeNumber();
|
||||
});
|
||||
|
||||
/** @test {WaveSurfer#toggleMute} */
|
||||
it('should toggle mute', function () {
|
||||
wavesurfer.toggleMute();
|
||||
expect(wavesurfer.isMuted).toBeTrue();
|
||||
|
||||
wavesurfer.toggleMute();
|
||||
expect(wavesurfer.isMuted).toBeFalse();
|
||||
});
|
||||
|
||||
/** @test {WaveSurfer#setMute} */
|
||||
it('should set mute', function () {
|
||||
wavesurfer.setMute(true);
|
||||
expect(wavesurfer.isMuted).toBeTrue();
|
||||
|
||||
wavesurfer.setMute(false);
|
||||
expect(wavesurfer.isMuted).toBeFalse();
|
||||
});
|
||||
|
||||
/** @test {WaveSurfer#zoom} */
|
||||
it('should set zoom parameters', function () {
|
||||
wavesurfer.zoom(20);
|
||||
expect(wavesurfer.params.minPxPerSec).toEqual(20);
|
||||
expect(wavesurfer.params.scrollParent).toBe(true);
|
||||
});
|
||||
|
||||
/** @test {WaveSurfer#zoom} */
|
||||
it('should set unzoom parameters', function () {
|
||||
wavesurfer.zoom(false);
|
||||
expect(wavesurfer.params.minPxPerSec).toEqual(wavesurfer.defaultParams.minPxPerSec);
|
||||
expect(wavesurfer.params.scrollParent).toBe(false);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user