Skip to content

Commit

Permalink
add more tests (katspaugh#1378)
Browse files Browse the repository at this point in the history
* add param error tests
* add test-helpers module
* update dev dependencies
* more plugin tests
  • Loading branch information
thijstriemstra committed May 21, 2018
1 parent 5452cc3 commit dcdf3aa
Show file tree
Hide file tree
Showing 6 changed files with 173 additions and 43 deletions.
1 change: 1 addition & 0 deletions karma.conf.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ module.exports = function(config) {
'spec/util.spec.js': ['webpack'],
'spec/wavesurfer.spec.js': ['webpack'],
'spec/peakcache.spec.js': ['webpack'],

// source files, that you want to generate coverage for
// do not include tests or libraries
'src/**/*.js': ['coverage']
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@
"karma-jasmine-matchers": "3.7.0",
"karma-verbose-reporter": "0.0.6",
"karma-webpack": "^3.0.0",
"lint-staged": "^7.1.1",
"lint-staged": "^7.1.2",
"load-script": "^1.0.0",
"pre-commit": "^1.2.2",
"prettier": "^1.12.1",
Expand Down
32 changes: 29 additions & 3 deletions spec/plugin-api.spec.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
/* eslint-env jasmine */
import WaveSurfer from '../src/wavesurfer.js';

import TestHelpers from './test-helpers.js';

/** @test {WaveSurfer} */
describe('WaveSurfer/plugin API:', () => {
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
Expand All @@ -11,8 +13,10 @@ describe('WaveSurfer/plugin API:', () => {

// clean up after each test
afterEach(done => {
wavesurfer.destroy();
waveformDiv.parentNode.removeChild(waveformDiv);
if (wavesurfer !== undefined) {
wavesurfer.destroy();
waveformDiv.parentNode.removeChild(waveformDiv);
}
done();
});

Expand Down Expand Up @@ -54,7 +58,7 @@ describe('WaveSurfer/plugin API:', () => {
options
)
);
wavesurfer.load('/base/spec/support/demo.wav');
wavesurfer.load(TestHelpers.EXAMPLE_FILE_PATH);
}

// plugin methods
Expand All @@ -71,6 +75,16 @@ describe('WaveSurfer/plugin API:', () => {
expect(typeof Object.getPrototypeOf(wavesurfer.dummy).on).toEqual(
'function'
);

dummyPlugin = {};
expect(function() {
wavesurfer.addPlugin(dummyPlugin);
}).toThrow(new Error('Plugin does not have a name!'));

dummyPlugin.name = 'foo';
expect(function() {
wavesurfer.addPlugin(dummyPlugin);
}).toThrow(new Error('Plugin foo does not have an instance property!'));
});

/** @test {WaveSurfer#initPlugin} */
Expand All @@ -83,6 +97,10 @@ describe('WaveSurfer/plugin API:', () => {

expect(wavesurfer.dummy.init).toHaveBeenCalled();
expect(wavesurfer.initialisedPluginList.dummy).toBeTrue();

expect(function() {
wavesurfer.initPlugin('foo');
}).toThrow(new Error('Plugin foo has not been added yet!'));
});

/** @test {WaveSurfer#destroyPlugin} */
Expand All @@ -96,6 +114,14 @@ describe('WaveSurfer/plugin API:', () => {

expect(wavesurfer.dummy.destroy).toHaveBeenCalled();
expect(wavesurfer.initialisedPluginList.dummy).toBeUndefined();

expect(function() {
wavesurfer.destroyPlugin('foo');
}).toThrow(
new Error(
'Plugin foo has not been added yet and cannot be destroyed!'
)
);
});

// auto-adding and initialising of plugins (registerPlugins)
Expand Down
46 changes: 46 additions & 0 deletions spec/test-helpers.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import WaveSurfer from '../src/wavesurfer.js';

const TestHelpers = {
/** Example audio clip */
EXAMPLE_FILE_PATH: '/base/spec/support/demo.wav',

/** Length of example audio clip */
EXAMPLE_FILE_DURATION: 21,

createElement(id, type) {
if (id == undefined) {
id = 'waveform';
}
if (type == undefined) {
type = 'div';
}
var element = document.createElement(type);
element.id = id;
document.getElementsByTagName('body')[0].appendChild(element);

return element;
},

removeElement(element) {
document.getElementsByTagName('body')[0].removeChild(element);
},

/**
* Handle creating wavesurfer ui requirements
*
* @param {Object} options
*/
createWaveform(options) {
this.createElement('waveform');

options = options || {
container: '#waveform',
waveColor: '#90F09B',
progressColor: 'purple',
cursorColor: 'white'
};
return WaveSurfer.create(options);
}
};

export default TestHelpers;
4 changes: 3 additions & 1 deletion spec/util.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@

import WaveSurfer from '../src/wavesurfer.js';

import TestHelpers from './test-helpers.js';

/** @test {util.ajax} */
describe('util.ajax:', function() {
var defaultUrl = '/base/spec/support/demo.wav';
var defaultUrl = TestHelpers.EXAMPLE_FILE_PATH;

it('can load an arraybuffer', function(done) {
var options = {
Expand Down
131 changes: 93 additions & 38 deletions spec/wavesurfer.spec.js
Original file line number Diff line number Diff line change
@@ -1,34 +1,16 @@
/* eslint-env jasmine */
import WaveSurfer from '../src/wavesurfer.js';

import TestHelpers from './test-helpers.js';

/** @test {WaveSurfer} */
describe('WaveSurfer/playback:', function() {
var wavesurfer;

const EXAMPLE_FILE_PATH = '/base/spec/support/demo.wav';
const EXAMPLE_FILE_DURATION = 21;

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: '#90F09B',
progressColor: 'purple',
cursorColor: 'white'
});
}

beforeEach(function(done) {
wavesurfer = __createWaveform();
wavesurfer.load(EXAMPLE_FILE_PATH);
wavesurfer = TestHelpers.createWaveform();
wavesurfer.load(TestHelpers.EXAMPLE_FILE_PATH);

wavesurfer.on('ready', function() {
done();
Expand Down Expand Up @@ -85,7 +67,7 @@ describe('WaveSurfer/playback:', function() {
/** @test {WaveSurfer#getDuration} */
it('should get duration', function() {
let duration = parseInt(wavesurfer.getDuration(), 10);
expect(duration).toEqual(EXAMPLE_FILE_DURATION);
expect(duration).toEqual(TestHelpers.EXAMPLE_FILE_DURATION);
});

/** @test {WaveSurfer#getCurrentTime} */
Expand Down Expand Up @@ -116,7 +98,7 @@ describe('WaveSurfer/playback:', function() {
time = wavesurfer.getCurrentTime();
// sets it to end of track
time = parseInt(wavesurfer.getCurrentTime(), 10);
expect(time).toEqual(EXAMPLE_FILE_DURATION);
expect(time).toEqual(TestHelpers.EXAMPLE_FILE_DURATION);
});

/** @test {WaveSurfer#skipBackward} */
Expand Down Expand Up @@ -150,6 +132,20 @@ describe('WaveSurfer/playback:', function() {
expect(time).toEqual(expectedTime + 2);
});

/** @test {WaveSurfer#getPlaybackRate} */
it('should get playback rate', function() {
let rate = wavesurfer.getPlaybackRate();
expect(rate).toEqual(1);
});

/** @test {WaveSurfer#setPlaybackRate} */
it('should set playback rate', function() {
let rate = 0.5;
wavesurfer.setPlaybackRate(rate);

expect(wavesurfer.getPlaybackRate()).toEqual(rate);
});

/** @test {WaveSurfer#getVolume} */
it('should get volume', function() {
let volume = wavesurfer.getVolume();
Expand Down Expand Up @@ -196,20 +192,6 @@ describe('WaveSurfer/playback:', function() {
expect(wavesurfer.getMute()).toBeFalse();
});

/** @test {WaveSurfer#getPlaybackRate} */
it('should get playback rate', function() {
let rate = wavesurfer.getPlaybackRate();
expect(rate).toEqual(1);
});

/** @test {WaveSurfer#setPlaybackRate} */
it('should set playback rate', function() {
let rate = 0.5;
wavesurfer.setPlaybackRate(rate);

expect(wavesurfer.getPlaybackRate()).toEqual(rate);
});

/** @test {WaveSurfer#zoom} */
it('should set zoom parameters', function() {
wavesurfer.zoom(20);
Expand Down Expand Up @@ -295,4 +277,77 @@ describe('WaveSurfer/playback:', function() {

expect(list).toEqual([]);
});

/** @test {WaveSurfer#exportImage} */
it('should export image data', function() {
var imgData = wavesurfer.exportImage();
expect(imgData).toBeNonEmptyString();
});
});

/** @test {WaveSurfer} */
describe('WaveSurfer/errors:', function() {
var element;

beforeEach(function() {
element = TestHelpers.createElement('test');
});

afterEach(function() {
TestHelpers.removeElement(element);
});

/**
* @test {WaveSurfer}
*/
it('should throw when container element not found', function() {
expect(function() {
TestHelpers.createWaveform({
container: '#foo'
});
}).toThrow(new Error('Container element not found'));
});

/**
* @test {WaveSurfer}
*/
it('should throw when media container element not found', function() {
expect(function() {
TestHelpers.createWaveform({
container: '#test',
mediaContainer: '#foo'
});
}).toThrow(new Error('Media Container element not found'));
});

/**
* @test {WaveSurfer}
*/
it('should throw for invalid maxCanvasWidth param', function() {
expect(function() {
TestHelpers.createWaveform({
container: '#test',
maxCanvasWidth: 0.5
});
}).toThrow(new Error('maxCanvasWidth must be greater than 1'));

expect(function() {
TestHelpers.createWaveform({
container: '#test',
maxCanvasWidth: 3
});
}).toThrow(new Error('maxCanvasWidth must be an even number'));
});

/**
* @test {WaveSurfer}
*/
it('should throw for invalid renderer', function() {
expect(function() {
TestHelpers.createWaveform({
container: '#test',
renderer: 'foo'
});
}).toThrow(new Error('Renderer parameter is invalid'));
});
});

0 comments on commit dcdf3aa

Please sign in to comment.