tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

worklet_test_audioWorkletGlobalScopeRegisterProcessor.js (8349B)


      1 // Define several classes.
      2 class EmptyWorkletProcessor extends AudioWorkletProcessor {}
      3 
      4 class NoProcessWorkletProcessor extends AudioWorkletProcessor {
      5  constructor() {
      6    super();
      7  }
      8 }
      9 
     10 class BadDescriptorsWorkletProcessor extends AudioWorkletProcessor {
     11  constructor() {
     12    super();
     13  }
     14 
     15  process() {
     16    // Do nothing, output silence
     17  }
     18 
     19  static get parameterDescriptors() {
     20    return "A string";
     21  }
     22 }
     23 
     24 class GoodDescriptorsWorkletProcessor extends AudioWorkletProcessor {
     25  constructor() {
     26    super();
     27  }
     28 
     29  process() {
     30    // Do nothing, output silence
     31  }
     32 
     33  static get parameterDescriptors() {
     34    return [
     35      {
     36        name: "myParam",
     37        defaultValue: 0.707,
     38      },
     39    ];
     40  }
     41 }
     42 
     43 class DummyProcessWorkletProcessor extends AudioWorkletProcessor {
     44  constructor() {
     45    super();
     46  }
     47 
     48  process() {
     49    // Do nothing, output silence
     50  }
     51 }
     52 
     53 class DescriptorsNoNameWorkletProcessor extends AudioWorkletProcessor {
     54  constructor() {
     55    super();
     56  }
     57 
     58  process() {
     59    // Do nothing, output silence
     60  }
     61 
     62  static get parameterDescriptors() {
     63    return [
     64      {
     65        defaultValue: 0.707,
     66      },
     67    ];
     68  }
     69 }
     70 
     71 class DescriptorsDefaultValueNotNumberWorkletProcessor extends AudioWorkletProcessor {
     72  constructor() {
     73    super();
     74  }
     75 
     76  process() {
     77    // Do nothing, output silence
     78  }
     79 
     80  static get parameterDescriptors() {
     81    return [
     82      {
     83        name: "test",
     84        defaultValue: "test",
     85      },
     86    ];
     87  }
     88 }
     89 
     90 class DescriptorsMinValueNotNumberWorkletProcessor extends AudioWorkletProcessor {
     91  constructor() {
     92    super();
     93  }
     94 
     95  process() {
     96    // Do nothing, output silence
     97  }
     98 
     99  static get parameterDescriptors() {
    100    return [
    101      {
    102        name: "test",
    103        minValue: "test",
    104      },
    105    ];
    106  }
    107 }
    108 
    109 class DescriptorsMaxValueNotNumberWorkletProcessor extends AudioWorkletProcessor {
    110  constructor() {
    111    super();
    112  }
    113 
    114  process() {
    115    // Do nothing, output silence
    116  }
    117 
    118  static get parameterDescriptors() {
    119    return [
    120      {
    121        name: "test",
    122        maxValue: "test",
    123      },
    124    ];
    125  }
    126 }
    127 
    128 class DescriptorsDuplicatedNameWorkletProcessor extends AudioWorkletProcessor {
    129  constructor() {
    130    super();
    131  }
    132 
    133  process() {
    134    // Do nothing, output silence
    135  }
    136 
    137  static get parameterDescriptors() {
    138    return [
    139      {
    140        name: "test",
    141      },
    142      {
    143        name: "test",
    144      },
    145    ];
    146  }
    147 }
    148 
    149 class DescriptorsNotDictWorkletProcessor extends AudioWorkletProcessor {
    150  constructor() {
    151    super();
    152  }
    153 
    154  process() {
    155    // Do nothing, output silence
    156  }
    157 
    158  static get parameterDescriptors() {
    159    return [42];
    160  }
    161 }
    162 
    163 class DescriptorsOutOfRangeMinWorkletProcessor extends AudioWorkletProcessor {
    164  constructor() {
    165    super();
    166  }
    167 
    168  process() {
    169    // Do nothing, output silence
    170  }
    171 
    172  static get parameterDescriptors() {
    173    return [
    174      {
    175        name: "test",
    176        defaultValue: 0,
    177        minValue: 1,
    178        maxValue: 2,
    179      },
    180    ];
    181  }
    182 }
    183 
    184 class DescriptorsOutOfRangeMaxWorkletProcessor extends AudioWorkletProcessor {
    185  constructor() {
    186    super();
    187  }
    188 
    189  process() {
    190    // Do nothing, output silence
    191  }
    192 
    193  static get parameterDescriptors() {
    194    return [
    195      {
    196        name: "test",
    197        defaultValue: 3,
    198        minValue: 1,
    199        maxValue: 2,
    200      },
    201    ];
    202  }
    203 }
    204 
    205 class DescriptorsBadRangeMaxWorkletProcessor extends AudioWorkletProcessor {
    206  constructor() {
    207    super();
    208  }
    209 
    210  process() {
    211    // Do nothing, output silence
    212  }
    213 
    214  static get parameterDescriptors() {
    215    return [
    216      {
    217        name: "test",
    218        defaultValue: 1.5,
    219        minValue: 2,
    220        maxValue: 1,
    221      },
    222    ];
    223  }
    224 }
    225 
    226 // Test not a constructor
    227 // "TypeError: Argument 2 of AudioWorkletGlobalScope.registerProcessor is not a constructor."
    228 try {
    229  registerProcessor("sure!", () => {});
    230 } catch (e) {
    231  console.log(e);
    232 }
    233 
    234 // Test empty name
    235 // "NotSupportedError: Argument 1 of AudioWorkletGlobalScope.registerProcessor should not be an empty string."
    236 try {
    237  registerProcessor("", EmptyWorkletProcessor);
    238 } catch (e) {
    239  console.log(e);
    240 }
    241 
    242 // Test not an object
    243 // "TypeError: Argument 2 of AudioWorkletGlobalScope.registerProcessor is not an object."
    244 try {
    245  registerProcessor("my-worklet-processor", "");
    246 } catch (e) {
    247  console.log(e);
    248 }
    249 
    250 // Test Empty class definition
    251 registerProcessor("empty-worklet-processor", EmptyWorkletProcessor);
    252 
    253 // Test class with constructor but not process function
    254 registerProcessor("no-worklet-processor", NoProcessWorkletProcessor);
    255 
    256 // Test class with parameterDescriptors being iterable, but the elements are not
    257 // dictionaries.
    258 // "TypeError: AudioWorkletGlobalScope.registerProcessor: Element 0 in parameterDescriptors can't be converted to a dictionary.",
    259 try {
    260  registerProcessor(
    261    "bad-descriptors-worklet-processor",
    262    BadDescriptorsWorkletProcessor
    263  );
    264 } catch (e) {
    265  console.log(e);
    266 }
    267 
    268 // Test class with good parameterDescriptors
    269 // No error expected here
    270 registerProcessor(
    271  "good-descriptors-worklet-processor",
    272  GoodDescriptorsWorkletProcessor
    273 );
    274 
    275 // Test class with constructor and process function
    276 // No error expected here
    277 registerProcessor("dummy-worklet-processor", DummyProcessWorkletProcessor);
    278 
    279 // Test class adding class with the same name twice
    280 // "NotSupportedError: Operation is not supported: Argument 1 of AudioWorkletGlobalScope.registerProcessor is invalid: a class with the same name is already registered."
    281 try {
    282  registerProcessor("dummy-worklet-processor", DummyProcessWorkletProcessor);
    283 } catch (e) {
    284  console.log(e);
    285 }
    286 
    287 // "name" is a mandatory field in descriptors
    288 // "TypeError: Missing required 'name' member of AudioParamDescriptor."
    289 try {
    290  registerProcessor(
    291    "descriptors-no-name-worklet-processor",
    292    DescriptorsNoNameWorkletProcessor
    293  );
    294 } catch (e) {
    295  console.log(e);
    296 }
    297 
    298 // "defaultValue" should be a number
    299 // "TypeError: 'defaultValue' member of AudioParamDescriptor is not a finite floating-point value."
    300 try {
    301  registerProcessor(
    302    "descriptors-default-value-not-number-worklet-processor",
    303    DescriptorsDefaultValueNotNumberWorkletProcessor
    304  );
    305 } catch (e) {
    306  console.log(e);
    307 }
    308 
    309 // "min" should be a number
    310 // "TypeError: 'minValue' member of AudioParamDescriptor is not a finite floating-point value."
    311 try {
    312  registerProcessor(
    313    "descriptors-min-value-not-number-worklet-processor",
    314    DescriptorsMinValueNotNumberWorkletProcessor
    315  );
    316 } catch (e) {
    317  console.log(e);
    318 }
    319 
    320 // "max" should be a number
    321 // "TypeError: 'maxValue' member of AudioParamDescriptor is not a finite floating-point value."
    322 try {
    323  registerProcessor(
    324    "descriptors-max-value-not-number-worklet-processor",
    325    DescriptorsMaxValueNotNumberWorkletProcessor
    326  );
    327 } catch (e) {
    328  console.log(e);
    329 }
    330 
    331 // Duplicated values are not allowed for "name"
    332 // "NotSupportedError: Duplicated name \"test\" in parameterDescriptors"
    333 try {
    334  registerProcessor(
    335    "descriptors-duplicated-name-worklet-processor",
    336    DescriptorsDuplicatedNameWorkletProcessor
    337  );
    338 } catch (e) {
    339  console.log(e);
    340 }
    341 
    342 // Descriptors' elements should be dictionnary
    343 // "TypeError: Element 0 in parameterDescriptors can't be converted to a dictionary.",
    344 try {
    345  registerProcessor(
    346    "descriptors-not-dict-worklet-processor",
    347    DescriptorsNotDictWorkletProcessor
    348  );
    349 } catch (e) {
    350  console.log(e);
    351 }
    352 
    353 // defaultValue value should be in range [minValue, maxValue]. defaultValue < minValue is not allowed
    354 // "NotSupportedError: In parameterDescriptors, test defaultValue is out of the range defined by minValue and maxValue.",
    355 try {
    356  registerProcessor(
    357    "descriptors-out-of-range-min-worklet-processor",
    358    DescriptorsOutOfRangeMinWorkletProcessor
    359  );
    360 } catch (e) {
    361  console.log(e);
    362 }
    363 
    364 // defaultValue value should be in range [minValue, maxValue]. defaultValue > maxValue is not allowed
    365 // "NotSupportedError: In parameterDescriptors, test defaultValue is out of the range defined by minValue and maxValue.",
    366 try {
    367  registerProcessor(
    368    "descriptors-out-of-range-max-worklet-processor",
    369    DescriptorsOutOfRangeMaxWorkletProcessor
    370  );
    371 } catch (e) {
    372  console.log(e);
    373 }
    374 
    375 // We should have minValue < maxValue to define a valid range
    376 // "NotSupportedError: In parameterDescriptors, test minValue should be smaller than maxValue.",
    377 try {
    378  registerProcessor(
    379    "descriptors-bad-range-max-worklet-processor",
    380    DescriptorsBadRangeMaxWorkletProcessor
    381  );
    382 } catch (e) {
    383  console.log(e);
    384 }