| <!DOCTYPE html> |
| <!-- |
| Create an oscillator of each type and verify that the type is set correctly. |
| --> |
| <html> |
| <head> |
| <title> |
| oscillator-basic.html |
| </title> |
| <script src="../../imported/w3c/web-platform-tests/resources/testharness.js"></script> |
| <script src="../../resources/testharnessreport.js"></script> |
| <script src="../resources/audit-util.js"></script> |
| <script src="../resources/audit.js"></script> |
| <script src="../resources/start-stop-exceptions.js"></script> |
| </head> |
| <body> |
| <script id="layout-test-code"> |
| let sampleRate = 44100; |
| let renderLengthSeconds = 0.25; |
| |
| let oscTypes = ['sine', 'square', 'sawtooth', 'triangle', 'custom']; |
| |
| let audit = Audit.createTaskRunner(); |
| |
| audit.define('basic osc tests', (task, should) => { |
| // Create offline audio context. |
| let context = new OfflineAudioContext( |
| 2, sampleRate * renderLengthSeconds, sampleRate); |
| let osc = context.createOscillator(); |
| |
| // Set each possible oscillator type (except CUSTOM) and verify that the |
| // type is correct. Here we're setting the type using WebIDL enum |
| // values which are strings. |
| for (let k = 0; k < oscTypes.length - 1; ++k) { |
| osc.type = oscTypes[k]; |
| should(osc.type, 'osc.type = \'' + oscTypes[k] + '\'') |
| .beEqualTo(oscTypes[k]); |
| } |
| |
| // Verify that setting a custom type directly does not set the custom |
| // type. This test has to be done before using setPeriodicWave. |
| |
| should(function() { |
| osc.type = 'custom'; |
| }, 'osc.type = \'custom\'').throw(DOMException, 'InvalidStateError'); |
| |
| // Now set a custom oscillator |
| let coeffA = new Float32Array([0, 1, 0.5]); |
| let coeffB = new Float32Array([0, 0, 0]); |
| let wave = context.createPeriodicWave(coeffA, coeffB); |
| |
| should(function() { |
| osc.setPeriodicWave(wave); |
| }, 'osc.setPeriodicWave(wave)').notThrow(); |
| should(osc.type, 'After setting periodicWave, osc.type') |
| .beEqualTo('custom'); |
| |
| // Check that numerical values are no longer supported |
| let oldType = osc.type; |
| osc.type = 0; |
| should(osc.type, 'osc.type = 0').notBeEqualTo(0); |
| should(osc.type, 'osc.type').beEqualTo(oldType); |
| |
| task.done(); |
| }); |
| |
| audit.define('start/stop exceptions', (task, should) => { |
| // We're not going to render anything, so make it simple |
| let context = new OfflineAudioContext(1, 1, sampleRate); |
| let node = new OscillatorNode(context); |
| |
| testStartStop(should, node); |
| task.done(); |
| }); |
| |
| audit.run(); |
| </script> |
| </body> |
| </html> |