| <!DOCTYPE html> |
| <html> |
| <head> |
| <title> |
| OfflineAudioContext.startRendering Promise |
| </title> |
| <script src="../../imported/w3c/web-platform-tests/resources/testharness.js"></script> |
| <script src="../../resources/testharnessreport.js"></script> |
| <script src="../resources/audit.js"></script> |
| </head> |
| <body> |
| <script id="layout-test-code"> |
| let context; |
| let promiseData; |
| |
| let sampleRate = 48000; |
| let renderSeconds = 1; |
| let renderFrames = sampleRate * renderSeconds; |
| let contextChannels = 2; |
| |
| let audit = Audit.createTaskRunner(); |
| |
| audit.define('reject-promise', (task, should) => { |
| // Create a context and verify that calling startRendering more than |
| // once causes a rejected promise. |
| let context = |
| new OfflineAudioContext(contextChannels, renderFrames, sampleRate); |
| context.startRendering(); |
| should( |
| context.startRendering(), |
| 'Promise from calling startRendering twice') |
| .beRejected() |
| .then(() => task.done()); |
| }); |
| |
| audit.define('promise-results', (task, should) => { |
| // Create an offline context and verify that buffer returned by the |
| // promise matches the expected results. |
| context = |
| new OfflineAudioContext(contextChannels, renderFrames, sampleRate); |
| |
| let buffer = |
| context.createBuffer(contextChannels, renderFrames, sampleRate); |
| for (let k = 0; k < renderFrames; ++k) { |
| buffer.getChannelData(0)[k] = 1; |
| buffer.getChannelData(1)[k] = 2; |
| } |
| |
| let source = context.createBufferSource(); |
| source.buffer = buffer; |
| source.connect(context.destination); |
| source.start(); |
| |
| context.startRendering() |
| .then(buffer => { |
| return handlePromise(should, buffer); |
| }) |
| .then(() => task.done()); |
| }); |
| |
| audit.run(); |
| |
| function handlePromise(should, renderedData) { |
| should(context.state, 'context.state').beEqualTo('closed'); |
| should(renderedData.numberOfChannels, 'renderedData.numberOfChannels') |
| .beEqualTo(contextChannels); |
| should(renderedData.length, 'renderedData.length') |
| .beEqualTo(renderFrames); |
| |
| for (let channel = 0; channel < renderedData.numberOfChannels; |
| ++channel) { |
| should( |
| renderedData.getChannelData(channel), `Output channel ${channel}`) |
| .beConstantValueOf(channel + 1); |
| } |
| } |
| </script> |
| </body> |
| </html> |