Upstream version 5.34.92.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / LayoutTests / webaudio / pannernode-basic.html
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <script src="../resources/js-test.js"></script>
5 <script src="resources/audio-testing.js"></script>
6 </head>
7
8 <body>
9 <div id="description"></div>
10 <div id="console"></div>
11
12 <script>
13 description("Basic tests for PannerNode.");
14
15 var context = 0;
16
17 function runTest() {
18     if (window.testRunner) {
19         testRunner.dumpAsText();
20         testRunner.waitUntilDone();
21     }
22     
23     window.jsTestIsAsync = true;
24
25     context = new webkitAudioContext();
26     var panner = context.createPanner();
27    
28     if (panner.numberOfInputs === 1) 
29         testPassed("PannerNode has one input.");
30     else
31         testFailed("PannerNode should have one input.");
32     
33     if (panner.numberOfOutputs === 1) 
34         testPassed("PannerNode has one output.");
35     else
36         testFailed("PannerNode should have one output.");
37
38     if (panner.refDistance === 1)
39         testPassed("refDistance default value is 1.");
40     else
41         testFailed("refDistance default value should be 1.");
42     
43     panner.refDistance = 270.52
44     if (panner.refDistance === 270.52)
45         testPassed("refDistance value is set to 270.52.");
46     else
47         testFailed("refDistance value should be set to 270.52.");
48     
49     if (panner.maxDistance === 10000)
50         testPassed("maxDistance default value is 10000.");
51     else
52         testFailed("maxDistance default value should be 10000.");
53     
54     panner.maxDistance = 100.55
55     if (panner.maxDistance === 100.55)
56         testPassed("maxDistance value is set to 100.55.");
57     else
58         testFailed("maxDistance value should be set to 100.55.");
59     
60     if (panner.rolloffFactor === 1)
61         testPassed("rolloffFactor default value is 1.");
62     else
63         testFailed("rolloffFactor default value should be 1.");
64     
65     panner.rolloffFactor = 0.83
66     if (panner.rolloffFactor === 0.83)
67         testPassed("rolloffFactor value is set to 0.83.");
68     else
69         testFailed("rolloffFactor value should be set to 0.83.");
70     
71     if (panner.coneInnerAngle === 360)
72         testPassed("coneInnerAngle default value is 360.");
73     else
74         testFailed("coneInnerAngle default value should be 360.");
75     
76     panner.coneInnerAngle = 240.45
77     if (panner.coneInnerAngle === 240.45)
78         testPassed("coneInnerAngle value is set to 240.45.");
79     else
80         testFailed("coneInnerAngle value should be set to 240.45.");
81     
82     if (panner.coneOuterAngle === 360)
83         testPassed("coneOuterAngle default value is 360.");
84     else
85         testFailed("coneOuterAngle default value should be 360.");
86     
87     panner.coneOuterAngle = 166.66
88     if (panner.coneOuterAngle === 166.66)
89         testPassed("coneOuterAngle value is set to 166.66.");
90     else
91         testFailed("coneOuterAngle value should be set to 166.66.");
92     
93     if (panner.coneOuterGain === 0)
94         testPassed("coneOuterGain default value is 0.");
95     else
96         testFailed("coneOuterGain default value should be 0.");
97
98     panner.coneOuterGain = 0.35
99     if (panner.coneOuterGain === 0.35)
100         testPassed("coneOuterGain value is set to 0.35.");
101     else
102         testFailed("coneOuterGain value should be set to 0.35.");
103
104     if (panner.panningModel === "HRTF")
105         testPassed("PannerNode defaults to 'HRTF' panningModel.");
106     else
107         testFailed("PannerNode should default to 'HRTF' panningModel.");
108     
109     if (panner.distanceModel === "inverse")
110         testPassed("PannerNode defaults to 'inverse' distanceModel.");
111     else
112         testFailed("PannerNode should default to 'inverse' distanceModel.");
113
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}
119                         ];
120
121     for (var i = 0; i < panningModels.length; ++i) {
122         try {
123             panner.panningModel = panningModels[i].value;
124             if (panner.panningModel === panningModels[i].value) {
125                 var message = "panningModel: '" + panningModels[i].value + "' is settable.";
126                 testPassed(message);
127             } else {
128                 var message = "panningModel: '" + panningModels[i].value + "' was not correctly set.";
129                 testFailed(message);
130             }
131         } catch(e) {
132             var message = "Setting panningModel to '" + panningModels[i].value + "' should not throw exception.";
133             testFailed(message);
134         }
135     }
136
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) {
140         try {
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.";
144                 testPassed(message);
145             } else {
146                 var message = "panningModel: " + panningModels[i].integerValue + " was not correctly set using legacy integer value.";
147                 testFailed(message);
148             }
149         } catch(e) {
150             var message = "Setting panningModel to " + panningModels[i].integerValue + " should not throw exception using legacy integer value.";
151             testFailed(message);
152         }
153     }
154
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}
159                         ];
160
161     for (var i = 0; i < distanceModels.length; ++i) {
162         try {
163             panner.distanceModel = distanceModels[i].value;
164             if (panner.distanceModel === distanceModels[i].value) {
165                 var message = "distanceModel: '" + distanceModels[i].value + "' is settable.";
166                 testPassed(message);
167             } else {
168                 var message = "distanceModel: '" + distanceModels[i].value + "' was not correctly set.";
169                 testFailed(message);
170             }
171         } catch(e) {
172             var message = "Setting distanceModel to '" + distanceModels[i].value + "' should not throw exception.";
173             testFailed(message);
174         }
175     }
176
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) {
180         try {
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.";
184                 testPassed(message);
185             } else {
186                 var message = "distanceModel: " + distanceModels[i].integerValue + " was not correctly set using legacy integer value.";
187                 testFailed(message);
188             }
189         } catch(e) {
190             var message = "Setting distanceModel to " + distanceModels[i].integerValue + " should not throw exception using legacy integer value.";
191             testFailed(message);
192         }
193     }
194
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");
198
199     finishJSTest();
200 }
201
202 runTest();
203
204 </script>
205
206 </body>
207 </html>