<!DOCTYPE html><html><head><title> Test Constructor: AudioBufferSource</title><scriptsrc="/resources/testharness.js"></script><scriptsrc="/resources/testharnessreport.js"></script><scriptsrc="/webaudio/resources/audit-util.js"></script><scriptsrc="/webaudio/resources/audit.js"></script><scriptsrc="/webaudio/resources/audionodeoptions.js"></script></head><body><scriptid="layout-test-code">letcontext;letaudit=Audit.createTaskRunner();audit.define('initialize',(task,should)=>{context=initializeContext(should);task.done();});audit.define('invalid constructor',(task,should)=>{testInvalidConstructor(should,'AudioBufferSourceNode',context);task.done();});audit.define('default constructor',(task,should)=>{letprefix='node0';letnode=testDefaultConstructor(should,'AudioBufferSourceNode',context,{prefix:prefix,numberOfInputs:0,numberOfOutputs:1,channelCount:2,channelCountMode:'max',channelInterpretation:'speakers'});testDefaultAttributes(should,node,prefix,[{name:'buffer',value:null},{name:'detune',value:0},{name:'loop',value:false},{name:'loopEnd',value:0.0},{name:'loopStart',value:0.0},{name:'playbackRate',value:1.0},]);task.done();});audit.define('nullable buffer',(task,should)=>{letnode;letoptions={buffer:null};should(()=>{node=newAudioBufferSourceNode(context,options);},'node1 = new AudioBufferSourceNode(c, '+JSON.stringify(options)).notThrow();should(node.buffer,'node1.buffer').beEqualTo(null);task.done();});audit.define('constructor options',(task,should)=>{letnode;letbuffer=context.createBuffer(2,1000,context.sampleRate);letoptions={buffer:buffer,detune:.5,loop:true,loopEnd:(buffer.length/2)/context.sampleRate,loopStart:5/context.sampleRate,playbackRate:.75};letmessage='node = new AudioBufferSourceNode(c, '+JSON.stringify(options)+')';should(()=>{node=newAudioBufferSourceNode(context,options);},message).notThrow();// Use the factory method to create an equivalent node and compare the// results from the constructor against this node.letfactoryNode=context.createBufferSource();factoryNode.buffer=options.buffer;factoryNode.detune.value=options.detune;factoryNode.loop=options.loop;factoryNode.loopEnd=options.loopEnd;factoryNode.loopStart=options.loopStart;factoryNode.playbackRate.value=options.playbackRate;should(node.buffer===buffer,'node2.buffer === buffer').beEqualTo(true);should(node.detune.value,'node2.detune.value').beEqualTo(factoryNode.detune.value);should(node.loop,'node2.loop').beEqualTo(factoryNode.loop);should(node.loopEnd,'node2.loopEnd').beEqualTo(factoryNode.loopEnd);should(node.loopStart,'node2.loopStart').beEqualTo(factoryNode.loopStart);should(node.playbackRate.value,'node2.playbackRate.value').beEqualTo(factoryNode.playbackRate.value);task.done();});audit.run();</script></body></html>