| <!doctype html> |
| <html> |
| <head> |
| <title>Test suspend()resume()</title> |
| <style type="text/css"> |
| header { |
| margin: 20px 0; |
| } |
| #results { |
| white-space: pre; |
| font-family: monospace; |
| } |
| </style> |
| </head> |
| |
| <body> |
| <h1>Test suspend()/resume()</h1> |
| |
| <p> |
| The functionality of suspend()/resume() can't currently be tested with an OfflineAudioContext, |
| so they need to be tested manually here. |
| </p> |
| <p> |
| You may want to open up a console window to see the messages, in addition to viewing the |
| messages in the Results area below. |
| </p> |
| |
| <h2>Test 1</h2> |
| <p> |
| Test for <a href="crbug.com/483002">issue 483002</a> |
| </p> |
| <p> |
| Perform the following steps |
| <ol> |
| <li> |
| Start Test: you should hear a tone. |
| </li> |
| <li> |
| Run Test: This runs the test. You may press this multiple times. Each press should cause |
| "suspended" and "running" to be printed out in the Results section below and in the |
| console. |
| </li> |
| <li> |
| End Test: Press this to end the test and stop the audio. |
| </li> |
| </ol> |
| </p> |
| <button onclick="test1Start()">Test 1: Start Test</button> |
| <button onclick="test1Run()">Test 1: Run Test</button> |
| <button onclick="test1End()">Test 1: End Test</button> |
| <br></br> |
| |
| <h2>Test 2</h2> |
| <p> |
| Test for <a href="crbug.com/483269">issue 483269</a> |
| </p> |
| <p> |
| Perform the following steps |
| <ol> |
| <li> |
| Start Test: you should hear a tone. Wait a little bit before proceeding. |
| </li> |
| <li> |
| Run Test: You may press this multiple times. This calls suspend()/resume() multiple times. |
| The tone should stop momentarily, but restart very quickly. You should still hear the |
| tone. |
| </li> |
| <li> |
| End Test: Stops the tone. |
| </li> |
| </ol> |
| </p> |
| <p> |
| If you do not hear a tone after running the test (but before ending), the test has failed. |
| </p> |
| <button onclick="test2Start()">Test 2: Start Test</button> |
| <button onclick="test2Run()">Test 2: Run Test </button> |
| <button onclick="test2End()">Test 2: End Test </button> |
| |
| <header>Results</header> |
| <div id="results"></div> |
| |
| <script> |
| var context = new AudioContext(); |
| var testCount = 0; |
| var oscillator; |
| |
| function test1Start() { |
| oscillator = context.createOscillator(); |
| oscillator.connect(context.destination); |
| oscillator.start(); |
| log("Test 1 Start"); |
| } |
| |
| function test1Run() { |
| testCount += 1; |
| context.suspend().then(function () { |
| log(context.state, testCount); |
| return context.resume().then(function () { |
| log(context.state, testCount); |
| }, function (e) { |
| log("Failed to resume context: " + e, testCount); |
| }); |
| }, function (e) { |
| log("Failed to suspend context: " + e, testCount); |
| }).then(function () {; |
| log("Test 1 Run: should should be audible"); |
| }); |
| } |
| |
| function test1End() { |
| oscillator.stop(); |
| log("Test 1 End"); |
| } |
| |
| function test2Start() { |
| if (context.state === "suspended") { |
| context.resume().then(function () {}, |
| function (e) { log("Failed to resume context: " + e); }) |
| } |
| |
| oscillator = context.createOscillator(); |
| oscillator.connect(context.destination); |
| oscillator.start(); |
| log("Test 2 Start"); |
| } |
| |
| function test2Run() { |
| context.suspend(); |
| context.resume(); |
| context.suspend(); |
| context.suspend(); |
| context.resume().then(function () { |
| if (context.state === "running") { |
| log("Test 2 Run: sound should be audible"); |
| } else { |
| log("Test 2 Run: FAIL: context not running!"); |
| } |
| }); |
| } |
| |
| function test2End() { |
| oscillator.stop(); |
| log("Test 2 End"); |
| } |
| |
| function log(message, count) { |
| var prefix = count + ": "; |
| |
| if (count === undefined) |
| prefix = ""; |
| else |
| prefix = count + ": "; |
| console.log(prefix + message); |
| var results = document.querySelector("#results"); |
| results.textContent += prefix + message + "\n"; |
| } |
| </script> |
| |
| </body> |
| </html> |