Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(53)

Side by Side Diff: third_party/WebKit/LayoutTests/webaudio/OfflineAudioContext/offlineaudiocontext-suspend-resume-sequence.html

Issue 2680033002: Convert OfflineAudioContext tests to testharness (Closed)
Patch Set: Reindent. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 <!doctype html> 1 <!doctype html>
2 <html> 2 <html>
3 <head> 3 <head>
4 <script src="../../resources/js-test.js"></script> 4 <script src="../../resources/testharness.js"></script>
5 <script src="../../resources/testharnessreport.js"></script>
5 <script src="../resources/audit-util.js"></script> 6 <script src="../resources/audit-util.js"></script>
6 <script src="../resources/audio-testing.js"></script> 7 <script src="../resources/audit.js"></script>
7 </head> 8 </head>
8 9
9 <body> 10 <body>
10 <script> 11 <script>
11 description('Test OfflineAudioContext.resume() and OfflineAudioContext.sus pend() with the timed sequence.'); 12 var audit = Audit.createTaskRunner();
12 window.jsTestIsAsync = true;
13
14 var context; 13 var context;
15 14
16 // The sample rate is multiple of the rendering quantum, so suspension 15 // The sample rate is multiple of the rendering quantum, so suspension
17 // times fall in to the render quantum boundary. 16 // times fall in to the render quantum boundary.
18 var renderQuantum = 128; 17 var renderQuantum = 128;
19 18
20 var sampleRate = renderQuantum * 100; 19 var sampleRate = renderQuantum * 100;
21 var renderDuration = 2; 20 var renderDuration = 2;
22 21
23 // These numbers are in an arbitrary order, but not randomly generated in 22 // These numbers are in an arbitrary order, but not randomly generated in
24 // runtime to avoid moving pieces. However, it is safe to arrange them 23 // runtime to avoid moving pieces. However, it is safe to arrange them
25 // in a random order in runtime. 24 // in a random order in runtime.
26 // 25 //
27 // Also these numbers are multiple of 0.25, so they are supposed to fall 26 // Also these numbers are multiple of 0.25, so they are supposed to fall
28 // in the render quantum boundary for easier and more intuitive 27 // in the render quantum boundary for easier and more intuitive
29 // verification. 28 // verification.
30 var suspendTimes = [0.25, 0.75, 1.0, 0.5, 1.25, 0.0, 1.75]; 29 var suspendTimes = [0.25, 0.75, 1.0, 0.5, 1.25, 0.0, 1.75];
31 30
32 // Sorted ascending suspend time is our expected result. 31 // Sorted ascending suspend time is our expected result.
33 var expectedSuspendTimes = suspendTimes.slice(0).sort(function (a, b) { 32 var expectedSuspendTimes = suspendTimes.slice(0).sort(function (a, b) {
34 return a - b; 33 return a - b;
35 }); 34 });
36 35
37 var actualSuspendTimes = []; 36 var actualSuspendTimes = [];
38 37
39 context = new OfflineAudioContext(1, sampleRate * renderDuration, sampleRa te); 38 audit.define('test', (task, should) => {
39 task.describe('resume() and suspend() with timed sequence');
40 context = new OfflineAudioContext(1, sampleRate * renderDuration,
41 sampleRate);
40 42
41 for (var i = 0; i < suspendTimes.length; i++) { 43 for (var i = 0; i < suspendTimes.length; i++) {
44 // Schedule suspends in a random time order, but the actual suspend
45 // must happen in ascending time order.
46 scheduleSuspend(i, suspendTimes[i], should);
47 }
42 48
43 // Schedule suspends in a random time order, but the actual suspend 49 context.startRendering()
44 // must happen in ascending time order. 50 .then(buffer => verifyResult(should))
45 scheduleSuspend(i, suspendTimes[i]); 51 .then(() => task.done());
46 52
53 });
54
55 audit.run();
56
57 function scheduleSuspend(index, suspendTime, should) {
58 should(() => context.suspend(suspendTime)
59 .then(() => {
60 actualSuspendTimes.push(suspendTime);
61 context.resume();
62 }),
63 'Scheduling suspend #' + index + ' at ' + suspendTime +
64 ' second(s)')
65 .notThrow();
47 } 66 }
48 67
49 function scheduleSuspend(index, suspendTime) { 68 function verifyResult(should) {
50 testPassed('Scheduling suspend #' + index + ' at ' + suspendTime + ' sec ond(s).');
51 context.suspend(suspendTime).then(function () {
52 actualSuspendTimes.push(suspendTime);
53 context.resume();
54 })
55 }
56
57 function verifyResult() {
58
59 for (var i = 0; i < actualSuspendTimes.length; i++) { 69 for (var i = 0; i < actualSuspendTimes.length; i++) {
60 var scheduledOrder = suspendTimes.indexOf(actualSuspendTimes[i]); 70 var scheduledOrder = suspendTimes.indexOf(actualSuspendTimes[i]);
61 var expectedOrder = expectedSuspendTimes.indexOf(actualSuspendTimes[i] ); 71 var expectedOrder = expectedSuspendTimes.indexOf(actualSuspendTimes[
72 i]);
62 73
63 if (i === expectedOrder) { 74 should(i, 'The resolution order of suspend #' + scheduledOrder +
64 testPassed('The resolution order of suspend #' + scheduledOrder +
65 ' is ' + i + ' at ' + suspendTimes[scheduledOrder].toFixed(2) + 75 ' is ' + i + ' at ' + suspendTimes[scheduledOrder].toFixed(2) +
66 ' second(s).'); 76 ' second(s)')
67 } 77 .beEqualTo(expectedOrder);
68 } 78 }
69 } 79 }
70 80
71 context.startRendering().then(verifyResult).then(finishJSTest);
72
73 successfullyParsed = true;
74 </script> 81 </script>
75 82
76 </body> 83 </body>
77 </html> 84 </html>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698