| OLD | NEW |
| 1 <!doctype html> | 1 <!doctype html> |
| 2 <html> | 2 <html> |
| 3 <head> | 3 <head> |
| 4 <title>Test Constructor: AnalyserNode</title> | 4 <title>Test Constructor: AnalyserNode</title> |
| 5 <script src="../../resources/testharness.js"></script> | 5 <script src="../../resources/testharness.js"></script> |
| 6 <script src="../../resources/testharnessreport.js"></script> | 6 <script src="../../resources/testharnessreport.js"></script> |
| 7 <script src="../resources/audit-util.js"></script> | 7 <script src="../resources/audit-util.js"></script> |
| 8 <script src="../resources/audio-testing.js"></script> | 8 <script src="../resources/audit.js"></script> |
| 9 <script src="audionodeoptions.js"></script> | 9 <script src="new-audionodeoptions.js"></script> |
| 10 </head> | 10 </head> |
| 11 | 11 |
| 12 <body> | 12 <body> |
| 13 <script> | 13 <script> |
| 14 var context; | 14 var context; |
| 15 | 15 |
| 16 var audit = Audit.createTaskRunner(); | 16 var audit = Audit.createTaskRunner(); |
| 17 | 17 |
| 18 audit.defineTask("initialize", function (taskDone) { | 18 audit.define('initialize', (task, should) => { |
| 19 Should("context = new OfflineAudioContext(...)", function () { | 19 context = initializeContext(should); |
| 20 context = new OfflineAudioContext(1, 1, 48000); | 20 task.done(); |
| 21 }).notThrow(); | |
| 22 | |
| 23 taskDone(); | |
| 24 }); | 21 }); |
| 25 | 22 |
| 26 audit.defineTask("invalid constructor", function (taskDone) { | 23 audit.define('invalid constructor', (task, should) => { |
| 27 var node; | 24 testInvalidConstructor(should, 'AnalyserNode', context); |
| 28 var success = true; | 25 task.done(); |
| 29 | |
| 30 success = Should("new AnalyserNode()", function () { | |
| 31 node = new AnalyserNode(); | |
| 32 }).throw("TypeError"); | |
| 33 success = Should("new AnalyserNode(1)", function () { | |
| 34 node = new AnalyserNode(1) && success; | |
| 35 }).throw("TypeError"); | |
| 36 success = Should("new AnalyserNode(c, 42)", function () { | |
| 37 node = new AnalyserNode(context, 42) && success; | |
| 38 }).throw("TypeError"); | |
| 39 | |
| 40 Should("Invalid constructors", success) | |
| 41 .summarize( | |
| 42 "correctly threw errors", | |
| 43 "did not throw errors in all cases"); | |
| 44 | |
| 45 taskDone(); | |
| 46 }); | 26 }); |
| 47 | 27 |
| 48 audit.defineTask("default constructor", function (taskDone) { | 28 audit.define('default constructor', (task, should) => { |
| 49 var node; | 29 let prefix = 'node0'; |
| 50 var success = true; | 30 let node = testDefaultConstructor(should, 'AnalyserNode', context, { |
| 31 prefix: prefix, |
| 32 numberOfInputs: 1, |
| 33 numberOfOutputs: 1, |
| 34 // TODO(crbug.com/706610) |
| 35 channelCount: 2, |
| 36 channelCountMode: 'max', |
| 37 channelInterpretation: 'speakers' |
| 38 }); |
| 51 | 39 |
| 52 success = Should("node1 = new AnalyserNode(c)", function () { | 40 testDefaultAttributes(should, node, prefix, [ |
| 53 node = new AnalyserNode(context); | 41 {name: 'fftSize', value: 2048}, |
| 54 }).notThrow(); | 42 {name: 'frequencyBinCount', value: 1024}, |
| 55 success = Should("node0 instanceof AnalyserNode", node instanceof Analys
erNode) | 43 {name: 'minDecibels', value: -100}, {name: 'maxDecibels', value: -30}, |
| 56 .beEqualTo(true) && success; | 44 { |
| 57 success = Should("node0.fftSize", node.fftSize).beEqualTo(2048) && succe
ss; | 45 // Compare against the single-precision float value since 0.8 isn't |
| 58 success = Should("node0.frequencyBinCount", | 46 // exactly representable as a float. |
| 59 node.frequencyBinCount).beEqualTo(1024) && success; | 47 name: 'smoothingTimeConstant', |
| 60 success = Should("node0.minDecibels", node.minDecibels).beEqualTo(-100)
&& success; | 48 value: Math.fround(0.8) |
| 61 success = Should("node0.maxDecibels", node.maxDecibels).beEqualTo(-30) &
& success; | 49 } |
| 62 // All AudioParams are stored as single precision values. Compare | 50 ]); |
| 63 // against the single-precision float value. | |
| 64 success = Should("node0.smoothingTimeConstant", node.smoothingTimeConsta
nt) | |
| 65 .beEqualTo(Math.fround(0.8)) && success; | |
| 66 | 51 |
| 67 Should("new AnalyserNode(c)", success) | 52 task.done(); |
| 68 .summarize( | |
| 69 "constructed node with correct attributes", | |
| 70 "did not construct correct node correctly") | |
| 71 | |
| 72 taskDone(); | |
| 73 }); | 53 }); |
| 74 | 54 |
| 75 audit.defineTask("test AudioNodeOptions", function (taskDone) { | 55 audit.define('test AudioNodeOptions', (task, should) => { |
| 76 testAudioNodeOptions(context, "AnalyserNode"); | 56 testAudioNodeOptions(should, context, 'AnalyserNode'); |
| 77 taskDone(); | 57 task.done(); |
| 78 }); | 58 }); |
| 79 | 59 |
| 80 audit.defineTask("constructor with options", function (taskDone) { | 60 audit.define('constructor with options', (task, should) => { |
| 81 var options = { | 61 var options = { |
| 82 fftSize: 32, | 62 fftSize: 32, |
| 83 maxDecibels: 1, | 63 maxDecibels: 1, |
| 84 minDecibels: -13, | 64 minDecibels: -13, |
| 85 // Choose a value that can be represented the same as a float and as a | 65 // Choose a value that can be represented the same as a float and as a |
| 86 // double. | 66 // double. |
| 87 smoothingTimeConstant: 0.125 | 67 smoothingTimeConstant: 0.125 |
| 88 }; | 68 }; |
| 89 | 69 |
| 90 var node; | 70 var node; |
| 91 var success = true; | 71 should(() => { |
| 92 success = Should("node1 = new AnalyserNode(c, " + JSON.stringify(options
) + ")", function () { | 72 node = new AnalyserNode(context, options); |
| 93 node = new AnalyserNode(context, options); | 73 }, |
| 94 }).notThrow(); | 74 'node1 = new AnalyserNode(c, ' + JSON.stringify(options) + ')') |
| 75 .notThrow(); |
| 95 | 76 |
| 96 success = Should("node1 instanceof AnalyserNode", node instanceof Analys
erNode) | 77 should(node instanceof AnalyserNode, 'node1 instanceof AnalyserNode') |
| 97 .beEqualTo(true) && success; | 78 .beEqualTo(true); |
| 98 success = Should("node1.fftSize", node.fftSize) | 79 should(node.fftSize, 'node1.fftSize').beEqualTo(options.fftSize); |
| 99 .beEqualTo(options.fftSize) && success; | 80 should(node.maxDecibels, 'node1.maxDecibels') |
| 100 success = Should("node1.maxDecibels", node.maxDecibels) | 81 .beEqualTo(options.maxDecibels); |
| 101 .beEqualTo(options.maxDecibels) && success; | 82 should(node.minDecibels, 'node1.minDecibels') |
| 102 success = Should("node1.minDecibels", node.minDecibels) | 83 .beEqualTo(options.minDecibels); |
| 103 .beEqualTo(options.minDecibels) && success; | 84 should(node.smoothingTimeConstant, 'node1.smoothingTimeConstant') |
| 104 success = Should("node1.smoothingTimeConstant", node.smoothingTimeConsta
nt) | 85 .beEqualTo(options.smoothingTimeConstant); |
| 105 .beEqualTo(options.smoothingTimeConstant) && success; | |
| 106 | 86 |
| 107 Should("new AnalyserNode() with options", success) | 87 task.done(); |
| 108 .summarize( | |
| 109 "constructed with correct attributes", | |
| 110 "was not constructed correctly"); | |
| 111 | |
| 112 taskDone(); | |
| 113 }); | 88 }); |
| 114 | 89 |
| 115 audit.defineTask("construct invalid options", function (taskDone) { | 90 audit.define('construct invalid options', (task, should) => { |
| 116 var node; | 91 var node; |
| 117 var success = true; | |
| 118 | 92 |
| 119 success = Should("node = new AnalyserNode(c, { fftSize: 33 })", function
() { | 93 should(() => { |
| 120 node = new AnalyserNode(context, { | 94 node = new AnalyserNode(context, {fftSize: 33}); |
| 121 fftSize: 33 | 95 }, |
| 122 }); | 96 'node = new AnalyserNode(c, { fftSize: 33 })') |
| 123 }).throw("IndexSizeError") && success; | 97 .throw('IndexSizeError'); |
| 124 success = Should("node = new AnalyserNode(c, { maxDecibels: -500 })", fu
nction () { | 98 should(() => { |
| 125 node = new AnalyserNode(context, { | 99 node = new AnalyserNode(context, {maxDecibels: -500}); |
| 126 maxDecibels: -500 | 100 }, |
| 127 }); | 101 'node = new AnalyserNode(c, { maxDecibels: -500 })') |
| 128 }).throw("IndexSizeError") && success; | 102 .throw('IndexSizeError'); |
| 129 success = Should("node = new AnalyserNode(c, { minDecibels: -10 })", fun
ction () { | 103 should(() => { |
| 130 node = new AnalyserNode(context, { | 104 node = new AnalyserNode(context, {minDecibels: -10}); |
| 131 minDecibels: -10 | 105 }, |
| 132 }); | 106 'node = new AnalyserNode(c, { minDecibels: -10 })') |
| 133 }).throw("IndexSizeError") && success; | 107 .throw('IndexSizeError'); |
| 134 success = Should("node = new AnalyserNode(c, { smoothingTimeConstant: 2
})", function () { | 108 should(() => { |
| 135 node = new AnalyserNode(context, { | 109 node = new AnalyserNode(context, {smoothingTimeConstant: 2}); |
| 136 smoothingTimeConstant: 2 | 110 }, |
| 137 }); | 111 'node = new AnalyserNode(c, { smoothingTimeConstant: 2 })') |
| 138 }).throw("IndexSizeError") && success; | 112 .throw('IndexSizeError'); |
| 139 success = Should("node = new AnalyserNode(c, { frequencyBinCount: 33 })"
, function () { | 113 should(function() { |
| 140 node = new AnalyserNode(context, { | 114 node = new AnalyserNode(context, {frequencyBinCount: 33}); |
| 141 frequencyBinCount: 33 | 115 }, 'node = new AnalyserNode(c, { frequencyBinCount: 33 })').notThrow(); |
| 142 }); | 116 should(node.frequencyBinCount, 'node.frequencyBinCount') |
| 143 }).notThrow() && success; | 117 .beEqualTo(1024); |
| 144 success = Should("node.frequencyBinCount", node.frequencyBinCount).beEqu
alTo(1024) && | |
| 145 success; | |
| 146 | 118 |
| 147 Should("new AnalyserNode() with invalid option values", success) | 119 task.done(); |
| 148 .summarize( | |
| 149 "correctly handled", | |
| 150 "was not correctly handled"); | |
| 151 | |
| 152 taskDone(); | |
| 153 }); | 120 }); |
| 154 | 121 |
| 155 audit.defineTask("setting min/max", function (taskDone) { | 122 audit.define('setting min/max', (task, should) => { |
| 156 var node; | 123 var node; |
| 157 var success = true; | |
| 158 | 124 |
| 159 // Recall the default values of minDecibels and maxDecibels are -100, | 125 // Recall the default values of minDecibels and maxDecibels are -100, |
| 160 // and -30, respectively. Setting both values in the constructor should | 126 // and -30, respectively. Setting both values in the constructor should |
| 161 // not signal an error in any of the following cases. | 127 // not signal an error in any of the following cases. |
| 162 var options = { | 128 var options = {minDecibels: -10, maxDecibels: 20}; |
| 163 minDecibels: -10, | 129 should(() => { |
| 164 maxDecibels: 20 | 130 node = new AnalyserNode(context, options); |
| 165 }; | 131 }, |
| 166 success = Should("node = new AnalyserNode(c, " + JSON.stringify(options)
+ ")", | 132 'node = new AnalyserNode(c, ' + JSON.stringify(options) + ')') |
| 167 function () { | 133 .notThrow(); |
| 168 node = new AnalyserNode(context, options); | |
| 169 }).notThrow() && success; | |
| 170 | 134 |
| 171 options = { | 135 options = {maxDecibels: 20, minDecibels: -10}; |
| 172 maxDecibels: 20, | 136 should(() => { |
| 173 minDecibels: -10 | 137 node = new AnalyserNode(context, options); |
| 174 }; | 138 }, |
| 175 success = Should("node = new AnalyserNode(c, " + JSON.stringify(options)
+ ")", | 139 'node = new AnalyserNode(c, ' + JSON.stringify(options) + ')') |
| 176 function () { | 140 .notThrow(); |
| 177 node = new AnalyserNode(context, options); | |
| 178 }).notThrow() && success; | |
| 179 | 141 |
| 180 options = { | 142 options = {minDecibels: -200, maxDecibels: -150}; |
| 181 minDecibels: -200, | 143 should(() => { |
| 182 maxDecibels: -150 | 144 node = new AnalyserNode(context, options); |
| 183 }; | 145 }, |
| 184 success = Should("node = new AnalyserNode(c, " + JSON.stringify(options)
+ ")", | 146 'node = new AnalyserNode(c, ' + JSON.stringify(options) + ')') |
| 185 function () { | 147 .notThrow(); |
| 186 node = new AnalyserNode(context, options); | |
| 187 }).notThrow() && success; | |
| 188 | 148 |
| 189 options = { | 149 options = {maxDecibels: -150, minDecibels: -200}; |
| 190 maxDecibels: -150, | 150 should(() => { |
| 191 minDecibels: -200 | 151 node = new AnalyserNode(context, options); |
| 192 }; | 152 }, |
| 193 success = Should("node = new AnalyserNode(c, " + JSON.stringify(options)
+ ")", | 153 'node = new AnalyserNode(c, ' + JSON.stringify(options) + ')') |
| 194 function () { | 154 .notThrow(); |
| 195 node = new AnalyserNode(context, options); | |
| 196 }).notThrow() && success; | |
| 197 | 155 |
| 198 // But these should signal because minDecibel > maxDecibel | 156 // But these should signal because minDecibel > maxDecibel |
| 199 options = { | 157 options = {maxDecibels: -150, minDecibels: -10}; |
| 200 maxDecibels: -150, | 158 should(() => { |
| 201 minDecibels: -10 | 159 node = new AnalyserNode(context, options); |
| 202 }; | 160 }, |
| 203 success = Should("node = new AnalyserNode(c, " + JSON.stringify(options)
+ ")", | 161 'node = new AnalyserNode(c, ' + JSON.stringify(options) + ')') |
| 204 function () { | 162 .throw('IndexSizeError'); |
| 205 node = new AnalyserNode(context, options); | |
| 206 }).throw("IndexSizeError") && success; | |
| 207 | 163 |
| 208 options = { | 164 options = {minDecibels: -10, maxDecibels: -150}; |
| 209 minDecibels: -10, | 165 should(() => { |
| 210 maxDecibels: -150 | 166 node = new AnalyserNode(context, options); |
| 211 }; | 167 }, |
| 212 success = Should("node = new AnalyserNode(c, " + JSON.stringify(options)
+ ")", | 168 'node = new AnalyserNode(c, ' + JSON.stringify(options) + ')') |
| 213 function () { | 169 .throw('IndexSizeError'); |
| 214 node = new AnalyserNode(context, options); | |
| 215 }).throw("IndexSizeError") && success; | |
| 216 | 170 |
| 217 Should("new AnalyserNode with minDecibels/maxDecibels options values", s
uccess) | 171 task.done(); |
| 218 .summarize( | 172 }); |
| 219 "correctly handled", | |
| 220 "incorrectly handled"); | |
| 221 | 173 |
| 222 taskDone(); | 174 audit.run(); |
| 223 }); | |
| 224 audit.runTasks(); | |
| 225 </script> | 175 </script> |
| 226 </body> | 176 </body> |
| 227 </html> | 177 </html> |
| OLD | NEW |