Source code
Revision control
Copy as Markdown
Other Tools
// Define several classes.
class EmptyWorkletProcessor extends AudioWorkletProcessor {}
class NoProcessWorkletProcessor extends AudioWorkletProcessor {
constructor() {
super();
}
}
class BadDescriptorsWorkletProcessor extends AudioWorkletProcessor {
constructor() {
super();
}
process() {
// Do nothing, output silence
}
static get parameterDescriptors() {
return "A string";
}
}
class GoodDescriptorsWorkletProcessor extends AudioWorkletProcessor {
constructor() {
super();
}
process() {
// Do nothing, output silence
}
static get parameterDescriptors() {
return [
{
name: "myParam",
defaultValue: 0.707,
},
];
}
}
class DummyProcessWorkletProcessor extends AudioWorkletProcessor {
constructor() {
super();
}
process() {
// Do nothing, output silence
}
}
class DescriptorsNoNameWorkletProcessor extends AudioWorkletProcessor {
constructor() {
super();
}
process() {
// Do nothing, output silence
}
static get parameterDescriptors() {
return [
{
defaultValue: 0.707,
},
];
}
}
class DescriptorsDefaultValueNotNumberWorkletProcessor extends AudioWorkletProcessor {
constructor() {
super();
}
process() {
// Do nothing, output silence
}
static get parameterDescriptors() {
return [
{
name: "test",
defaultValue: "test",
},
];
}
}
class DescriptorsMinValueNotNumberWorkletProcessor extends AudioWorkletProcessor {
constructor() {
super();
}
process() {
// Do nothing, output silence
}
static get parameterDescriptors() {
return [
{
name: "test",
minValue: "test",
},
];
}
}
class DescriptorsMaxValueNotNumberWorkletProcessor extends AudioWorkletProcessor {
constructor() {
super();
}
process() {
// Do nothing, output silence
}
static get parameterDescriptors() {
return [
{
name: "test",
maxValue: "test",
},
];
}
}
class DescriptorsDuplicatedNameWorkletProcessor extends AudioWorkletProcessor {
constructor() {
super();
}
process() {
// Do nothing, output silence
}
static get parameterDescriptors() {
return [
{
name: "test",
},
{
name: "test",
},
];
}
}
class DescriptorsNotDictWorkletProcessor extends AudioWorkletProcessor {
constructor() {
super();
}
process() {
// Do nothing, output silence
}
static get parameterDescriptors() {
return [42];
}
}
class DescriptorsOutOfRangeMinWorkletProcessor extends AudioWorkletProcessor {
constructor() {
super();
}
process() {
// Do nothing, output silence
}
static get parameterDescriptors() {
return [
{
name: "test",
defaultValue: 0,
minValue: 1,
maxValue: 2,
},
];
}
}
class DescriptorsOutOfRangeMaxWorkletProcessor extends AudioWorkletProcessor {
constructor() {
super();
}
process() {
// Do nothing, output silence
}
static get parameterDescriptors() {
return [
{
name: "test",
defaultValue: 3,
minValue: 1,
maxValue: 2,
},
];
}
}
class DescriptorsBadRangeMaxWorkletProcessor extends AudioWorkletProcessor {
constructor() {
super();
}
process() {
// Do nothing, output silence
}
static get parameterDescriptors() {
return [
{
name: "test",
defaultValue: 1.5,
minValue: 2,
maxValue: 1,
},
];
}
}
// Test not a constructor
// "TypeError: Argument 2 of AudioWorkletGlobalScope.registerProcessor is not a constructor."
try {
registerProcessor("sure!", () => {});
} catch (e) {
console.log(e);
}
// Test empty name
// "NotSupportedError: Argument 1 of AudioWorkletGlobalScope.registerProcessor should not be an empty string."
try {
registerProcessor("", EmptyWorkletProcessor);
} catch (e) {
console.log(e);
}
// Test not an object
// "TypeError: Argument 2 of AudioWorkletGlobalScope.registerProcessor is not an object."
try {
registerProcessor("my-worklet-processor", "");
} catch (e) {
console.log(e);
}
// Test Empty class definition
registerProcessor("empty-worklet-processor", EmptyWorkletProcessor);
// Test class with constructor but not process function
registerProcessor("no-worklet-processor", NoProcessWorkletProcessor);
// Test class with parameterDescriptors being iterable, but the elements are not
// dictionaries.
// "TypeError: AudioWorkletGlobalScope.registerProcessor: Element 0 in parameterDescriptors can't be converted to a dictionary.",
try {
registerProcessor(
"bad-descriptors-worklet-processor",
BadDescriptorsWorkletProcessor
);
} catch (e) {
console.log(e);
}
// Test class with good parameterDescriptors
// No error expected here
registerProcessor(
"good-descriptors-worklet-processor",
GoodDescriptorsWorkletProcessor
);
// Test class with constructor and process function
// No error expected here
registerProcessor("dummy-worklet-processor", DummyProcessWorkletProcessor);
// Test class adding class with the same name twice
// "NotSupportedError: Operation is not supported: Argument 1 of AudioWorkletGlobalScope.registerProcessor is invalid: a class with the same name is already registered."
try {
registerProcessor("dummy-worklet-processor", DummyProcessWorkletProcessor);
} catch (e) {
console.log(e);
}
// "name" is a mandatory field in descriptors
// "TypeError: Missing required 'name' member of AudioParamDescriptor."
try {
registerProcessor(
"descriptors-no-name-worklet-processor",
DescriptorsNoNameWorkletProcessor
);
} catch (e) {
console.log(e);
}
// "defaultValue" should be a number
// "TypeError: 'defaultValue' member of AudioParamDescriptor is not a finite floating-point value."
try {
registerProcessor(
"descriptors-default-value-not-number-worklet-processor",
DescriptorsDefaultValueNotNumberWorkletProcessor
);
} catch (e) {
console.log(e);
}
// "min" should be a number
// "TypeError: 'minValue' member of AudioParamDescriptor is not a finite floating-point value."
try {
registerProcessor(
"descriptors-min-value-not-number-worklet-processor",
DescriptorsMinValueNotNumberWorkletProcessor
);
} catch (e) {
console.log(e);
}
// "max" should be a number
// "TypeError: 'maxValue' member of AudioParamDescriptor is not a finite floating-point value."
try {
registerProcessor(
"descriptors-max-value-not-number-worklet-processor",
DescriptorsMaxValueNotNumberWorkletProcessor
);
} catch (e) {
console.log(e);
}
// Duplicated values are not allowed for "name"
// "NotSupportedError: Duplicated name \"test\" in parameterDescriptors"
try {
registerProcessor(
"descriptors-duplicated-name-worklet-processor",
DescriptorsDuplicatedNameWorkletProcessor
);
} catch (e) {
console.log(e);
}
// Descriptors' elements should be dictionnary
// "TypeError: Element 0 in parameterDescriptors can't be converted to a dictionary.",
try {
registerProcessor(
"descriptors-not-dict-worklet-processor",
DescriptorsNotDictWorkletProcessor
);
} catch (e) {
console.log(e);
}
// defaultValue value should be in range [minValue, maxValue]. defaultValue < minValue is not allowed
// "NotSupportedError: In parameterDescriptors, test defaultValue is out of the range defined by minValue and maxValue.",
try {
registerProcessor(
"descriptors-out-of-range-min-worklet-processor",
DescriptorsOutOfRangeMinWorkletProcessor
);
} catch (e) {
console.log(e);
}
// defaultValue value should be in range [minValue, maxValue]. defaultValue > maxValue is not allowed
// "NotSupportedError: In parameterDescriptors, test defaultValue is out of the range defined by minValue and maxValue.",
try {
registerProcessor(
"descriptors-out-of-range-max-worklet-processor",
DescriptorsOutOfRangeMaxWorkletProcessor
);
} catch (e) {
console.log(e);
}
// We should have minValue < maxValue to define a valid range
// "NotSupportedError: In parameterDescriptors, test minValue should be smaller than maxValue.",
try {
registerProcessor(
"descriptors-bad-range-max-worklet-processor",
DescriptorsBadRangeMaxWorkletProcessor
);
} catch (e) {
console.log(e);
}