OLD | NEW |
| (Empty) |
1 <!doctype html> | |
2 <html> | |
3 <head> | |
4 <title>Test audiocontext suspend/resume</title> | |
5 <script src="resources/compatibility.js"></script> | |
6 <script src="resources/audio-testing.js"></script> | |
7 <script src="../resources/js-test.js"></script> | |
8 </head> | |
9 | |
10 <body> | |
11 <script> | |
12 description("Test suspend/resume for an AudioContext"); | |
13 | |
14 var context; | |
15 var osc; | |
16 var p1; | |
17 var p2; | |
18 | |
19 var sampleRate = 44100; | |
20 var durationInSeconds = 1; | |
21 | |
22 function passed () { | |
23 testPassed("Context resumed correctly."); | |
24 } | |
25 | |
26 function failed () { | |
27 testFailed("Context did not resume!."); | |
28 } | |
29 | |
30 function resolvedResumeWhenReleased () { | |
31 testFailed("resume() on a released context not rejected"); | |
32 finishJSTest(); | |
33 } | |
34 | |
35 function rejectedResumeWhenReleased () { | |
36 testPassed("resume() on a released context rejected as expected"); | |
37 finishJSTest(); | |
38 } | |
39 | |
40 function checkResult (event) { | |
41 // We don't care about the actual result of the offline rendering. | |
42 shouldBeEqualToString("context.state", "released"); | |
43 shouldThrow("context.suspend()"); | |
44 context.resume().then(resolvedResumeWhenReleased, rejectedResumeWhenRele
ased); | |
45 } | |
46 | |
47 function runTest() { | |
48 window.jsTestIsAsync = true; | |
49 // Test suspend/resume. Ideally this test is best with a online AudioCo
ntext, but content | |
50 // shell doesn't really have a working online AudioContext. Hence, use a
n | |
51 // OfflineAudioContext. Not all possible scenarios can be easily checked
with an offline | |
52 // context instead of an online context. | |
53 | |
54 // Create an audio context with an oscillator. | |
55 context = new OfflineAudioContext(1, durationInSeconds * sampleRate, sam
pleRate); | |
56 osc = context.createOscillator(); | |
57 osc.connect(context.destination); | |
58 | |
59 // Verify the state. | |
60 shouldBeEqualToString("context.state", "paused"); | |
61 | |
62 // Multiple calls to suspend() should not be a problem. But these curren
tly do nothing with | |
63 // an OfflineAudioContext. | |
64 shouldNotThrow("context.suspend()"); | |
65 shouldNotThrow("context.suspend()"); | |
66 | |
67 // Multiple calls to resume should not be a problem. But these currently
do nothing with an | |
68 // OfflineAudioContext. | |
69 shouldNotThrow("p1 = context.resume()"); | |
70 shouldBeType(p1, Promise); | |
71 p1.then(passed, failed); | |
72 shouldNotThrow("p2 = context.resume()"); | |
73 shouldBeType(p2, Promise); | |
74 if (p1 === p2) | |
75 testFailed("Promises from resume should not be equal."); | |
76 else | |
77 testPassed("Promises from resume are not equal."); | |
78 p2.then(passed, failed); | |
79 | |
80 // Resume doesn't actually resume an offline context | |
81 shouldBeEqualToString("context.state", "paused"); | |
82 | |
83 // Render the offline context. | |
84 osc.start(); | |
85 context.oncomplete = checkResult; | |
86 context.startRendering(); | |
87 } | |
88 | |
89 runTest(); | |
90 successfullyParsed = true; | |
91 </script> | |
92 </body> | |
93 </html> | |
OLD | NEW |