| OLD | NEW |
| 1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
| 2 <html> | 2 <html> |
| 3 <head> | |
| 4 <script src="../resources/js-test.js"></script> | |
| 5 <script src="resources/compatibility.js"></script> | |
| 6 <script src="resources/audio-testing.js"></script> | |
| 7 </head> | |
| 8 | 3 |
| 9 <body> | 4 <head> |
| 10 <div id="description"></div> | 5 <script src="../resources/js-test.js"></script> |
| 11 <div id="console"></div> | 6 <script src="resources/compatibility.js"></script> |
| 7 <script src="resources/audio-testing.js"></script> |
| 8 </head> |
| 12 | 9 |
| 13 <script> | 10 <body> |
| 14 description("Basic tests for PannerNode."); | 11 <script> |
| 12 description("Basic tests for PannerNode."); |
| 13 window.jsTestIsAsync = true; |
| 15 | 14 |
| 16 var context = 0; | 15 var context; |
| 16 var panner; |
| 17 var audit = Audit.createTaskRunner(); |
| 17 | 18 |
| 18 function runTest() { | 19 audit.defineTask("initialize", function (done) { |
| 19 if (window.testRunner) { | 20 context = new AudioContext(); |
| 20 testRunner.dumpAsText(); | 21 panner = context.createPanner(); |
| 21 testRunner.waitUntilDone(); | 22 done(); |
| 22 } | 23 }); |
| 23 | 24 |
| 24 window.jsTestIsAsync = true; | 25 audit.defineTask("basic", function (done) { |
| 26 var success = true; |
| 25 | 27 |
| 26 context = new AudioContext(); | 28 success = Should("panner.numberOfInputs", panner.numberOfInputs) |
| 27 var panner = context.createPanner(); | 29 .beEqualTo(1) && success; |
| 30 success = Should("panner.numberOfOutputs", panner.numberOfOutputs) |
| 31 .beEqualTo(1) && success; |
| 32 success = Should("panner.refDistance", panner.refDistance) |
| 33 .beEqualTo(1) && success; |
| 34 panner.refDistance = 270.5; |
| 35 success = Should("panner.refDistance = 270.5", panner.refDistance) |
| 36 .beEqualTo(270.5) && success; |
| 37 success = Should("panner.maxDistance", panner.maxDistance) |
| 38 .beEqualTo(10000) && success; |
| 39 panner.maxDistance = 100.5; |
| 40 success = Should("panner.maxDistance = 100.5", panner.maxDistance) |
| 41 .beEqualTo(100.5) && success; |
| 42 success = Should("panner.rolloffFactor", panner.rolloffFactor) |
| 43 .beEqualTo(1) && success; |
| 44 panner.rolloffFactor = 0.75; |
| 45 success = Should("panner.rolloffFactor = 0.75", panner.rolloffFactor) |
| 46 .beEqualTo(0.75) && success; |
| 47 success = Should("panner.coneInnerAngle", panner.coneInnerAngle) |
| 48 .beEqualTo(360) && success; |
| 49 panner.coneInnerAngle = 240.5; |
| 50 success = Should("panner.coneInnerAngle = 240.5", panner.coneInnerAngle) |
| 51 .beEqualTo(240.5) && success; |
| 52 success = Should("panner.coneOuterAngle", panner.coneOuterAngle) |
| 53 .beEqualTo(360) && success; |
| 54 panner.coneOuterAngle = 166.5; |
| 55 success = Should("panner.coneOuterAngle = 166.5", panner.coneOuterAngle) |
| 56 .beEqualTo(166.5) && success; |
| 57 success = Should("panner.coneOuterGain", panner.coneOuterGain) |
| 58 .beEqualTo(0) && success; |
| 59 panner.coneOuterGain = 0.25; |
| 60 success = Should("panner.coneOuterGain = 0.25", panner.coneOuterGain) |
| 61 .beEqualTo(0.25) && success; |
| 62 success = Should("panner.panningModel", panner.panningModel) |
| 63 .beEqualTo("equalpower") && success; |
| 64 success = Should("panner.distanceModel", panner.distanceModel) |
| 65 .beEqualTo("inverse") && success; |
| 28 | 66 |
| 29 if (panner.numberOfInputs === 1) | 67 success = Should("panner.positionX", panner.positionX.value) |
| 30 testPassed("PannerNode has one input."); | 68 .beEqualTo(0) && success; |
| 31 else | 69 success = Should("panner.positionY", panner.positionY.value) |
| 32 testFailed("PannerNode should have one input."); | 70 .beEqualTo(0) && success; |
| 71 success = Should("panner.positionZ", panner.positionZ.value) |
| 72 .beEqualTo(0) && success; |
| 73 success = Should("panner.orientationX", panner.orientationX.value) |
| 74 .beEqualTo(1) && success; |
| 75 success = Should("panner.orientationY", panner.orientationY.value) |
| 76 .beEqualTo(0) && success; |
| 77 success = Should("panner.orientationZ", panner.orientationZ.value) |
| 78 .beEqualTo(0) && success; |
| 33 | 79 |
| 34 if (panner.numberOfOutputs === 1) | 80 if (success) |
| 35 testPassed("PannerNode has one output."); | 81 testPassed("Basic Panner attribute tests.\n"); |
| 36 else | 82 else |
| 37 testFailed("PannerNode should have one output."); | 83 testFailed("Basic Panner attribute tests.\n"); |
| 38 | 84 |
| 39 if (panner.refDistance === 1) | 85 done(); |
| 40 testPassed("refDistance default value is 1."); | 86 }); |
| 41 else | |
| 42 testFailed("refDistance default value should be 1."); | |
| 43 | 87 |
| 44 panner.refDistance = 270.52 | 88 audit.defineTask("listener", function (done) { |
| 45 if (panner.refDistance === 270.52) | 89 var success = true; |
| 46 testPassed("refDistance value is set to 270.52."); | |
| 47 else | |
| 48 testFailed("refDistance value should be set to 270.52."); | |
| 49 | 90 |
| 50 if (panner.maxDistance === 10000) | 91 success = Should("listener.positionX", context.listener.positionX.value) |
| 51 testPassed("maxDistance default value is 10000."); | 92 .beEqualTo(0) && success; |
| 52 else | 93 success = Should("listener.positionY", context.listener.positionY.value) |
| 53 testFailed("maxDistance default value should be 10000."); | 94 .beEqualTo(0) && success; |
| 95 success = Should("listener.positionZ", context.listener.positionZ.value) |
| 96 .beEqualTo(0) && success; |
| 97 success = Should("listener.forwardX", context.listener.forwardX.value) |
| 98 .beEqualTo(0) && success; |
| 99 success = Should("listener.forwardY", context.listener.forwardY.value) |
| 100 .beEqualTo(0) && success; |
| 101 success = Should("listener.forwardZ", context.listener.forwardZ.value) |
| 102 .beEqualTo(-1) && success; |
| 103 success = Should("listener.upX", context.listener.upX.value) |
| 104 .beEqualTo(0) && success; |
| 105 success = Should("listener.upY", context.listener.upY.value) |
| 106 .beEqualTo(1) && success; |
| 107 success = Should("listener.upZ", context.listener.upZ.value) |
| 108 .beEqualTo(0) && success; |
| 54 | 109 |
| 55 panner.maxDistance = 100.55 | 110 if (success) |
| 56 if (panner.maxDistance === 100.55) | 111 testPassed("Basic AudioListener attribute tests.\n"); |
| 57 testPassed("maxDistance value is set to 100.55."); | 112 else |
| 58 else | 113 testFailed("Basic AudioListener attribute tests.\n"); |
| 59 testFailed("maxDistance value should be set to 100.55."); | 114 done(); |
| 115 }); |
| 60 | 116 |
| 61 if (panner.rolloffFactor === 1) | 117 audit.defineTask("panning models", function (done) { |
| 62 testPassed("rolloffFactor default value is 1."); | 118 // Check that the .panningModel attribute can be set to all legal values
. |
| 63 else | 119 var panningModels = ["equalpower", "HRTF"]; |
| 64 testFailed("rolloffFactor default value should be 1."); | |
| 65 | 120 |
| 66 panner.rolloffFactor = 0.83 | 121 var success = true; |
| 67 if (panner.rolloffFactor === 0.83) | 122 for (var i = 0; i < panningModels.length; ++i) { |
| 68 testPassed("rolloffFactor value is set to 0.83."); | 123 success = Should('panner.panningModel = "' + panningModels[i] + '"', f
unction () { |
| 69 else | 124 panner.panningModel = panningModels[i]; |
| 70 testFailed("rolloffFactor value should be set to 0.83."); | 125 }).notThrow() && success; |
| 71 | 126 |
| 72 if (panner.coneInnerAngle === 360) | 127 success = Should('panner.panningModel = "' + panningModels[i] + '"', p
anner.panningModel) |
| 73 testPassed("coneInnerAngle default value is 360."); | 128 .beEqualTo(panningModels[i]) && success; |
| 74 else | 129 } |
| 75 testFailed("coneInnerAngle default value should be 360."); | |
| 76 | 130 |
| 77 panner.coneInnerAngle = 240.45 | 131 success = Should('panner.panningModel = "invalid"', function () { |
| 78 if (panner.coneInnerAngle === 240.45) | 132 panner.panningModel = "invalid"; |
| 79 testPassed("coneInnerAngle value is set to 240.45."); | 133 }).notThrow() && success; |
| 80 else | |
| 81 testFailed("coneInnerAngle value should be set to 240.45."); | |
| 82 | 134 |
| 83 if (panner.coneOuterAngle === 360) | 135 success = Should("panner.panningModel", panner.panningModel) |
| 84 testPassed("coneOuterAngle default value is 360."); | 136 .beEqualTo("HRTF") && success; |
| 85 else | |
| 86 testFailed("coneOuterAngle default value should be 360."); | |
| 87 | 137 |
| 88 panner.coneOuterAngle = 166.66 | 138 // Check that numerical values are no longer supported. We shouldn't th
row and the value |
| 89 if (panner.coneOuterAngle === 166.66) | 139 // shouldn't be changed. |
| 90 testPassed("coneOuterAngle value is set to 166.66."); | 140 panner.panningModel = "HRTF"; |
| 91 else | 141 success = Should('panner.panningModel = 1', function () { |
| 92 testFailed("coneOuterAngle value should be set to 166.66."); | 142 panner.panningModel = 1; |
| 143 }).notThrow() && success; |
| 93 | 144 |
| 94 if (panner.coneOuterGain === 0) | 145 success = Should('panner.panningModel', panner.panningModel) |
| 95 testPassed("coneOuterGain default value is 0."); | 146 .beEqualTo("HRTF") && success; |
| 96 else | |
| 97 testFailed("coneOuterGain default value should be 0."); | |
| 98 | 147 |
| 99 panner.coneOuterGain = 0.35 | 148 if (success) |
| 100 if (panner.coneOuterGain === 0.35) | 149 testPassed("Basic Panner panning models tests.\n"); |
| 101 testPassed("coneOuterGain value is set to 0.35."); | 150 else |
| 102 else | 151 testFailed("Basic Panner panning models tests.\n"); |
| 103 testFailed("coneOuterGain value should be set to 0.35."); | 152 done(); |
| 153 }); |
| 104 | 154 |
| 105 if (panner.panningModel === "equalpower") | 155 audit.defineTask("distance models", function (done) { |
| 106 testPassed("PannerNode defaults to 'equalpower' panningModel."); | 156 // Check that the .panningModel attribute can be set to all legal values
. |
| 107 else | 157 var distanceModels = ["linear", "inverse", "exponential"]; |
| 108 testFailed("PannerNode should default to 'equalpower' panningModel."); | |
| 109 | 158 |
| 110 if (panner.distanceModel === "inverse") | 159 var success = true; |
| 111 testPassed("PannerNode defaults to 'inverse' distanceModel."); | 160 for (var i = 0; i < distanceModels.length; ++i) { |
| 112 else | 161 success = Should('panner.distanceModel = "' + distanceModels[i] + '"', |
| 113 testFailed("PannerNode should default to 'inverse' distanceModel."); | 162 function () { |
| 163 panner.distanceModel = distanceModels[i]; |
| 164 }).notThrow() && success; |
| 114 | 165 |
| 115 // Check that the .panningModel attribute can be set to all legal values. | 166 success = Should('panner.distanceModel = "' + distanceModels[i] + '"',
panner |
| 116 var panningModels = [{value: "equalpower", integerValue: panner.EQUALPOWER}, | 167 .distanceModel) |
| 117 {value: "HRTF", integerValue: panner.HRTF}, | 168 .beEqualTo(distanceModels[i]) && success; |
| 118 ]; | 169 } |
| 119 | 170 |
| 120 for (var i = 0; i < panningModels.length; ++i) { | 171 success = Should('panner.distanceModel = "invalid"', function () { |
| 121 try { | 172 panner.distanceModel = "invalid"; |
| 122 panner.panningModel = panningModels[i].value; | 173 }).notThrow() && success; |
| 123 if (panner.panningModel === panningModels[i].value) { | |
| 124 var message = "panningModel: '" + panningModels[i].value + "' is
settable."; | |
| 125 testPassed(message); | |
| 126 } else { | |
| 127 var message = "panningModel: '" + panningModels[i].value + "' wa
s not correctly set."; | |
| 128 testFailed(message); | |
| 129 } | |
| 130 } catch(e) { | |
| 131 var message = "Setting panningModel to '" + panningModels[i].value +
"' should not throw exception."; | |
| 132 testFailed(message); | |
| 133 } | |
| 134 } | |
| 135 | 174 |
| 136 // Check that numerical values are no longer supported. | 175 success = Should("panner.distanceModel", panner.distanceModel) |
| 137 panner.panningModel = "HRTF"; | 176 .beEqualTo("exponential") && success; |
| 138 panner.panningModel = 1; | |
| 139 if (panner.panningModel == 1) { | |
| 140 testFailed("panningModel incorrectly set to " + panner.panningModel + ".
"); | |
| 141 } else { | |
| 142 testPassed("panningModel correctly not set to 1."); | |
| 143 } | |
| 144 | 177 |
| 145 // Check that the .distanceModel attribute can be set to all legal values. | 178 if (success) |
| 146 var distanceModels = [{value: "linear"}, | 179 testPassed("Basic Panner distance models tests.\n"); |
| 147 {value: "inverse"}, | 180 else |
| 148 {value: "exponential"} | 181 testFailed("Basic Panner distance models tests.\n"); |
| 149 ]; | 182 done(); |
| 183 }); |
| 150 | 184 |
| 151 for (var i = 0; i < distanceModels.length; ++i) { | 185 audit.defineTask("finish", function (done) { |
| 152 try { | 186 finishJSTest(); |
| 153 panner.distanceModel = distanceModels[i].value; | 187 done(); |
| 154 if (panner.distanceModel === distanceModels[i].value) { | 188 }); |
| 155 var message = "distanceModel: '" + distanceModels[i].value + "'
is settable."; | |
| 156 testPassed(message); | |
| 157 } else { | |
| 158 var message = "distanceModel: '" + distanceModels[i].value + "'
was not correctly set."; | |
| 159 testFailed(message); | |
| 160 } | |
| 161 } catch(e) { | |
| 162 var message = "Setting distanceModel to '" + distanceModels[i].value
+ "' should not throw exception."; | |
| 163 testFailed(message); | |
| 164 } | |
| 165 } | |
| 166 | 189 |
| 167 // Check that numerical values are no longer supported. | |
| 168 panner.distanceModel = "inverse"; | |
| 169 panner.distanceModel = 1; | |
| 170 if (panner.distanceModel == 1) { | |
| 171 testFailed("distanceModel incorrectly set to " + panner.distanceModel +
"."); | |
| 172 } else { | |
| 173 testPassed("distanceModel correctly not set to 1."); | |
| 174 } | |
| 175 | 190 |
| 176 finishJSTest(); | 191 audit.runTasks(); |
| 177 } | 192 </script> |
| 178 | 193 |
| 179 runTest(); | 194 </body> |
| 180 | 195 |
| 181 </script> | 196 </html> |
| 182 | |
| 183 </body> | |
| 184 </html> | |
| OLD | NEW |