summaryrefslogtreecommitdiffstats
path: root/devtools/client/webaudioeditor/test/browser_webaudio-actor-automation-event.js
blob: 9d542d5f01a6d2aa6d9d07749ca357913de57fc8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
/* Any copyright is dedicated to the Public Domain.
   http://creativecommons.org/publicdomain/zero/1.0/ */

/**
 * Test that the WebAudioActor receives and emits the `automation-event` events
 * with correct arguments from the content.
 */

add_task(function* () {
  let { target, front } = yield initBackend(AUTOMATION_URL);
  let events = [];

  let expected = [
    ["setValueAtTime", 0.2, 0],
    ["linearRampToValueAtTime", 1, 0.3],
    ["exponentialRampToValueAtTime", 0.75, 0.6],
    ["setValueCurveAtTime", [-1, 0, 1], 0.7, 0.3],
  ];

  front.on("automation-event", onAutomationEvent);

  let [_, __, [destNode, oscNode, gainNode], [connect1, connect2]] = yield Promise.all([
    front.setup({ reload: true }),
    once(front, "start-context"),
    get3(front, "create-node"),
    get2(front, "connect-node")
  ]);

  is(events.length, 4, "correct number of events fired");

  function onAutomationEvent(e) {
    let { eventName, paramName, args } = e;
    let exp = expected[events.length];

    is(eventName, exp[0], "correct eventName in event");
    is(paramName, "frequency", "correct paramName in event");
    is(args.length, exp.length - 1, "correct length in args");

    args.forEach((a, i) => {
      // In the case of an array
      if (typeof a === "object") {
        a.forEach((f, j) => is(f, exp[i + 1][j], `correct argument in Float32Array: ${f}`));
      } else {
        is(a, exp[i + 1], `correct ${i + 1}th argument in args: ${a}`);
      }
    });
    events.push([eventName].concat(args));
  }

  front.off("automation-event", onAutomationEvent);
  yield removeTab(target.tab);
});