summaryrefslogtreecommitdiffstats
path: root/accessible/tests/mochitest/actions/test_media.html
blob: 5327901e5666c3c16f8b1b00c20d8959208582c9 (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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
<!DOCTYPE html>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=483573
-->
<head>
  <title>HTML5 audio/video tests</title>
  <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css" />

  <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>

  <script type="application/javascript"
          src="../common.js"></script>
  <script type="application/javascript"
          src="../events.js"></script>
  <script type="application/javascript"
          src="../actions.js"></script>
  <script type="application/javascript"
          src="../role.js"></script>
  <script type="application/javascript"
          src="../states.js"></script>

  <script type="application/javascript">
    SimpleTest.requestCompleteLog(); // To help diagnose bug 1845221

    // gA11yEventDumpID = "eventDump";
    // gA11yEventDumpToConsole = true; // debug stuff

    function focusChecker(aAcc) {
      this.type = EVENT_FOCUS;
      this.target = aAcc;
      this.getID = function focusChecker_getID() {
        return "focus handling";
      };
      this.check = function focusChecker_check(aEvent) {
        testStates(this.target, STATE_FOCUSED);
      };
    }

    function nameChecker(aAcc, aName) {
      this.type = EVENT_NAME_CHANGE;
      this.target = aAcc;
      this.getID = function nameChecker_getID() {
        return "name change handling";
      };
      this.check = function nameChecker_check(aEvent) {
        is(aEvent.accessible.name, aName,
           "Wrong name of " + prettyName(aEvent.accessible) + " on focus");
      };
    }

    async function loadAudioSource() {
      /**
       * Setting the source dynamically and wait for it to load,
       * so we can test the accessibility tree of the control in its ready and
       * stable state.
       *
       * See bug 1484048 comment 25 for discussion on how it switches UI when
       * loading a statically declared source.
       */
      await new Promise(resolve => {
        let el = document.getElementById("audio");
        el.addEventListener("canplaythrough", resolve, {once: true});
        el.src = "../bug461281.ogg";
      });

      doTest();
    }

    function doTest() {
      // ////////////////////////////////////////////////////////////////////////
      // test actions of audio controls

      todo(false, "Focus test are disabled until bug 494175 is fixed.");

      var audioElm = getAccessible("audio");
      var playBtn = audioElm.firstChild;
      // var scrubber = playBtn.nextSibling.nextSibling.nextSibling;
      var muteBtn = audioElm.lastChild.previousSibling;

      var actions = [
        {
          ID: muteBtn,
          actionName: "press",
          eventTarget: "element",
          eventSeq: [
     //       new focusChecker(muteBtn),
            new nameChecker(muteBtn, "Unmute"),
          ],
        },
     //   {
     //     ID: scrubber,
     //     actionName: "activate",
     //     events: null,
     //     eventSeq: [
     //       new focusChecker(scrubber)
     //     ]
     //   },
        {
          ID: playBtn,
          actionName: "press",
          eventTarget: "element",
          eventSeq: [
     //       new focusChecker(playBtn),
            new nameChecker(playBtn, "Pause"),
          ],
        },
      ];

      testActions(actions); // Will call SimpleTest.finish();
    }

    SimpleTest.waitForExplicitFinish();
    addA11yLoadEvent(loadAudioSource);
  </script>
</head>
<body>

  <a target="_blank" rel="opener"
     title="Expose HTML5 video and audio elements' embedded controls through accessibility APIs"
     href="https://bugzilla.mozilla.org/show_bug.cgi?id=483573">Mozilla Bug 483573</a>
  <p id="display"></p>
  <div id="content" style="display: none"></div>
  <pre id="test">
  </pre>

  <audio id="audio" controls="true"></audio>

  <div id="eventDump"></div>
</body>
</html>