Merge f2973dc435
into 3eefa464ee
This commit is contained in:
commit
5a15114437
4 changed files with 142 additions and 1 deletions
|
@ -31,7 +31,22 @@ AudioBufferSourceNode::~AudioBufferSourceNode() = default;
|
|||
// https://webaudio.github.io/web-audio-api/#dom-audiobuffersourcenode-buffer
|
||||
WebIDL::ExceptionOr<void> AudioBufferSourceNode::set_buffer(GC::Ptr<AudioBuffer> buffer)
|
||||
{
|
||||
m_buffer = buffer;
|
||||
// 1. Let new buffer be the AudioBuffer or null value to be assigned to buffer.
|
||||
auto new_buffer = buffer;
|
||||
|
||||
// 2. If new buffer is not null and [[buffer set]] is true, throw an InvalidStateError and abort these steps.
|
||||
if (new_buffer && m_buffer_set)
|
||||
return WebIDL::InvalidStateError::create(realm(), "Buffer has already been set"_string);
|
||||
|
||||
// 3. If new buffer is not null, set [[buffer set]] to true.
|
||||
if (new_buffer)
|
||||
m_buffer_set = true;
|
||||
|
||||
// 4. Assign new buffer to the buffer attribute.
|
||||
m_buffer = new_buffer;
|
||||
|
||||
// FIXME: 5. If start() has previously been called on this node, perform the operation acquire the content on buffer.
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
|
|
|
@ -60,6 +60,8 @@ private:
|
|||
GC::Ref<AudioParam> m_playback_rate;
|
||||
GC::Ref<AudioParam> m_detune;
|
||||
bool m_loop { false };
|
||||
// https://webaudio.github.io/web-audio-api/#dom-audiobuffersourcenode-buffer-set-slot
|
||||
bool m_buffer_set { false };
|
||||
double m_loop_start { 0.0 };
|
||||
double m_loop_end { 0.0 };
|
||||
};
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
Harness status: OK
|
||||
|
||||
Found 22 tests
|
||||
|
||||
22 Pass
|
||||
Pass # AUDIT TASK RUNNER STARTED.
|
||||
Pass Executing "validate .buffer"
|
||||
Pass Audit report
|
||||
Pass > [validate .buffer] Validatation of AudioBuffer in .buffer attribute setter
|
||||
Pass source.buffer = 57 threw TypeError: "Not an object of type AudioBuffer".
|
||||
Pass source.buffer = null did not throw an exception.
|
||||
Pass source.buffer = buffer did not throw an exception.
|
||||
Pass source.buffer = new buffer threw InvalidStateError: "Buffer has already been set".
|
||||
Pass source.buffer = null again did not throw an exception.
|
||||
Pass source.buffer = buffer again threw InvalidStateError: "Buffer has already been set".
|
||||
Pass source.buffer = null after setting to null did not throw an exception.
|
||||
Pass Setting source with mono buffer did not throw an exception.
|
||||
Pass Setting source with stereo buffer did not throw an exception.
|
||||
Pass Setting source with 3 channels buffer did not throw an exception.
|
||||
Pass Setting source with 4 channels buffer did not throw an exception.
|
||||
Pass Setting source with 5 channels buffer did not throw an exception.
|
||||
Pass Setting source with 6 channels buffer did not throw an exception.
|
||||
Pass Setting source with 7 channels buffer did not throw an exception.
|
||||
Pass Setting source with 8 channels buffer did not throw an exception.
|
||||
Pass Setting source with 9 channels buffer did not throw an exception.
|
||||
Pass < [validate .buffer] All assertions passed. (total 16 assertions)
|
||||
Pass # AUDIT TASK RUNNER FINISHED: 1 tasks ran successfully.
|
|
@ -0,0 +1,97 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>
|
||||
audiobuffersource-channels.html
|
||||
</title>
|
||||
<script src="../../../resources/testharness.js"></script>
|
||||
<script src="../../../resources/testharnessreport.js"></script>
|
||||
<script src="../../../webaudio/resources/audit-util.js"></script>
|
||||
<script src="../../../webaudio/resources/audit.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script id="layout-test-code">
|
||||
let audit = Audit.createTaskRunner();
|
||||
let context;
|
||||
let source;
|
||||
|
||||
audit.define(
|
||||
{
|
||||
label: 'validate .buffer',
|
||||
description:
|
||||
'Validatation of AudioBuffer in .buffer attribute setter'
|
||||
},
|
||||
function(task, should) {
|
||||
context = new AudioContext();
|
||||
source = context.createBufferSource();
|
||||
|
||||
// Make sure we can't set to something which isn't an AudioBuffer.
|
||||
should(function() {
|
||||
source.buffer = 57;
|
||||
}, 'source.buffer = 57').throw(TypeError);
|
||||
|
||||
// It's ok to set the buffer to null.
|
||||
should(function() {
|
||||
source.buffer = null;
|
||||
}, 'source.buffer = null').notThrow();
|
||||
|
||||
// Set the buffer to a valid AudioBuffer
|
||||
let buffer =
|
||||
new AudioBuffer({length: 128, sampleRate: context.sampleRate});
|
||||
|
||||
should(function() {
|
||||
source.buffer = buffer;
|
||||
}, 'source.buffer = buffer').notThrow();
|
||||
|
||||
// The buffer has been set; we can't set it again.
|
||||
should(function() {
|
||||
source.buffer =
|
||||
new AudioBuffer({length: 128, sampleRate: context.sampleRate})
|
||||
}, 'source.buffer = new buffer').throw(DOMException, 'InvalidStateError');
|
||||
|
||||
// The buffer has been set; it's ok to set it to null.
|
||||
should(function() {
|
||||
source.buffer = null;
|
||||
}, 'source.buffer = null again').notThrow();
|
||||
|
||||
// The buffer was already set (and set to null). Can't set it
|
||||
// again.
|
||||
should(function() {
|
||||
source.buffer = buffer;
|
||||
}, 'source.buffer = buffer again').throw(DOMException, 'InvalidStateError');
|
||||
|
||||
// But setting to null is ok.
|
||||
should(function() {
|
||||
}, 'source.buffer = null after setting to null').notThrow();
|
||||
|
||||
// Check that mono buffer can be set.
|
||||
should(function() {
|
||||
let monoBuffer =
|
||||
context.createBuffer(1, 1024, context.sampleRate);
|
||||
let testSource = context.createBufferSource();
|
||||
testSource.buffer = monoBuffer;
|
||||
}, 'Setting source with mono buffer').notThrow();
|
||||
|
||||
// Check that stereo buffer can be set.
|
||||
should(function() {
|
||||
let stereoBuffer =
|
||||
context.createBuffer(2, 1024, context.sampleRate);
|
||||
let testSource = context.createBufferSource();
|
||||
testSource.buffer = stereoBuffer;
|
||||
}, 'Setting source with stereo buffer').notThrow();
|
||||
|
||||
// Check buffers with more than two channels.
|
||||
for (let i = 3; i < 10; ++i) {
|
||||
should(function() {
|
||||
let buffer = context.createBuffer(i, 1024, context.sampleRate);
|
||||
let testSource = context.createBufferSource();
|
||||
testSource.buffer = buffer;
|
||||
}, 'Setting source with ' + i + ' channels buffer').notThrow();
|
||||
}
|
||||
task.done();
|
||||
});
|
||||
|
||||
audit.run();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
Loading…
Add table
Reference in a new issue