4 <script src="../resources/js-test.js"></script>
5 <script src="resources/audio-testing.js"></script>
9 <div id="description"></div>
10 <div id="console"></div>
13 description("Basic tests for PannerNode.");
18 if (window.testRunner) {
19 testRunner.dumpAsText();
20 testRunner.waitUntilDone();
23 window.jsTestIsAsync = true;
25 context = new webkitAudioContext();
26 var panner = context.createPanner();
28 if (panner.numberOfInputs === 1)
29 testPassed("PannerNode has one input.");
31 testFailed("PannerNode should have one input.");
33 if (panner.numberOfOutputs === 1)
34 testPassed("PannerNode has one output.");
36 testFailed("PannerNode should have one output.");
38 if (panner.refDistance === 1)
39 testPassed("refDistance default value is 1.");
41 testFailed("refDistance default value should be 1.");
43 panner.refDistance = 270.52
44 if (panner.refDistance === 270.52)
45 testPassed("refDistance value is set to 270.52.");
47 testFailed("refDistance value should be set to 270.52.");
49 if (panner.maxDistance === 10000)
50 testPassed("maxDistance default value is 10000.");
52 testFailed("maxDistance default value should be 10000.");
54 panner.maxDistance = 100.55
55 if (panner.maxDistance === 100.55)
56 testPassed("maxDistance value is set to 100.55.");
58 testFailed("maxDistance value should be set to 100.55.");
60 if (panner.rolloffFactor === 1)
61 testPassed("rolloffFactor default value is 1.");
63 testFailed("rolloffFactor default value should be 1.");
65 panner.rolloffFactor = 0.83
66 if (panner.rolloffFactor === 0.83)
67 testPassed("rolloffFactor value is set to 0.83.");
69 testFailed("rolloffFactor value should be set to 0.83.");
71 if (panner.coneInnerAngle === 360)
72 testPassed("coneInnerAngle default value is 360.");
74 testFailed("coneInnerAngle default value should be 360.");
76 panner.coneInnerAngle = 240.45
77 if (panner.coneInnerAngle === 240.45)
78 testPassed("coneInnerAngle value is set to 240.45.");
80 testFailed("coneInnerAngle value should be set to 240.45.");
82 if (panner.coneOuterAngle === 360)
83 testPassed("coneOuterAngle default value is 360.");
85 testFailed("coneOuterAngle default value should be 360.");
87 panner.coneOuterAngle = 166.66
88 if (panner.coneOuterAngle === 166.66)
89 testPassed("coneOuterAngle value is set to 166.66.");
91 testFailed("coneOuterAngle value should be set to 166.66.");
93 if (panner.coneOuterGain === 0)
94 testPassed("coneOuterGain default value is 0.");
96 testFailed("coneOuterGain default value should be 0.");
98 panner.coneOuterGain = 0.35
99 if (panner.coneOuterGain === 0.35)
100 testPassed("coneOuterGain value is set to 0.35.");
102 testFailed("coneOuterGain value should be set to 0.35.");
104 if (panner.panningModel === "HRTF")
105 testPassed("PannerNode defaults to 'HRTF' panningModel.");
107 testFailed("PannerNode should default to 'HRTF' panningModel.");
109 if (panner.distanceModel === "inverse")
110 testPassed("PannerNode defaults to 'inverse' distanceModel.");
112 testFailed("PannerNode should default to 'inverse' distanceModel.");
114 // Check that the .panningModel attribute can be set to all legal values.
115 var panningModels = [{value: "equalpower", integerValue: panner.EQUALPOWER},
116 {value: "HRTF", integerValue: panner.HRTF},
117 // FIXME: enable "soundfield" once feature is implemented: https://bugs.webkit.org/show_bug.cgi?id=77367
118 // {value: "soundfield", integerValue: panner.SOUNDFIELD}
121 for (var i = 0; i < panningModels.length; ++i) {
123 panner.panningModel = panningModels[i].value;
124 if (panner.panningModel === panningModels[i].value) {
125 var message = "panningModel: '" + panningModels[i].value + "' is settable.";
128 var message = "panningModel: '" + panningModels[i].value + "' was not correctly set.";
132 var message = "Setting panningModel to '" + panningModels[i].value + "' should not throw exception.";
137 // For legacy support, verify that we can set the .panningModel attribute as an integer value and
138 // verify that this translates correctly to the WebIDL enum value.
139 for (var i = 0; i < panningModels.length; ++i) {
141 panner.panningModel = panningModels[i].integerValue;
142 if (panner.panningModel === panningModels[i].value && panningModels[i].integerValue === i) {
143 var message = "panningModel: " + panningModels[i].integerValue + " is settable using legacy integer value.";
146 var message = "panningModel: " + panningModels[i].integerValue + " was not correctly set using legacy integer value.";
150 var message = "Setting panningModel to " + panningModels[i].integerValue + " should not throw exception using legacy integer value.";
155 // Check that the .distanceModel attribute can be set to all legal values.
156 var distanceModels = [{value: "linear", integerValue: panner.LINEAR_DISTANCE},
157 {value: "inverse", integerValue: panner.INVERSE_DISTANCE},
158 {value: "exponential", integerValue: panner.EXPONENTIAL_DISTANCE}
161 for (var i = 0; i < distanceModels.length; ++i) {
163 panner.distanceModel = distanceModels[i].value;
164 if (panner.distanceModel === distanceModels[i].value) {
165 var message = "distanceModel: '" + distanceModels[i].value + "' is settable.";
168 var message = "distanceModel: '" + distanceModels[i].value + "' was not correctly set.";
172 var message = "Setting distanceModel to '" + distanceModels[i].value + "' should not throw exception.";
177 // For legacy support, verify that we can set the .distanceModel attribute as an integer value and
178 // verify that this translates correctly to the WebIDL enum value.
179 for (var i = 0; i < distanceModels.length; ++i) {
181 panner.distanceModel = distanceModels[i].integerValue;
182 if (panner.distanceModel === distanceModels[i].value && distanceModels[i].integerValue === i) {
183 var message = "distanceModel: " + distanceModels[i].integerValue + " is settable using legacy integer value.";
186 var message = "distanceModel: " + distanceModels[i].integerValue + " was not correctly set using legacy integer value.";
190 var message = "Setting distanceModel to " + distanceModels[i].integerValue + " should not throw exception using legacy integer value.";
195 // Check that we throw a TypeError for illegal .distanceModel values.
196 shouldThrowTypeError(function() { panner.distanceModel = "xyz12349jfksd"; }, "Setting .type to illegal string value");
197 shouldThrowTypeError(function() { panner.distanceModel = new Float32Array(1); }, "Setting .type to illegal type of Float32Array");