AudioPannerNode should raise exception when distanceModel is set incorrectly
[WebKit-https.git] / LayoutTests / webaudio / audiopannernode-basic.html
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <script src="resources/audio-testing.js"></script>
5 <script src="../fast/js/resources/js-test-pre.js"></script>
6 </head>
7
8 <body>
9 <div id="description"></div>
10 <div id="console"></div>
11
12 <script>
13 description("Basic test for AudioPannerNode.");
14
15 function runTest() {
16     if (window.testRunner) {
17         testRunner.dumpAsText();
18         testRunner.waitUntilDone();
19     }
20
21     window.jsTestIsAsync = true;
22
23     var context = new webkitAudioContext();
24     var panner = context.createPanner();
25     
26     if (panner.numberOfInputs === 1)
27         testPassed("AudioPannerNode has one input.");
28     else
29         testFailed("AudioPannerNode should have one input.");
30
31     if (panner.numberOfOutputs === 1)
32         testPassed("AudioPannerNode has one output.");
33     else
34         testFailed("AudioPannerNode should have one output.");
35
36     if (panner.panningModel === panner.HRTF)
37         testPassed("panningModel default value is HRTF.");
38     else
39         testFailed("panningModel default value is not HRTF.");
40     
41     // Set the panning model and see if it can be read back correctly.
42     panner.panningModel = panner.EQUALPOWER;
43     if (panner.panningModel === 0)
44         testPassed("panningModel set to EQUALPOWER model and read correctly.");
45     else
46         testFailed("panningModel set to EQUALPOWER (0) but returned " + panner.panningModel);
47     
48     panner.panningModel = panner.HRTF;
49     if (panner.panningModel === 1)
50         testPassed("panningModel set to HRTF model and read correctly.");
51     else
52         testFailed("panningModel set to HRTF (1) but returned " + panner.panningModel);
53
54     // SOUNDFIELD should throw exception because it is not
55     // currently implemented.  (See https://bugs.webkit.org/show_bug.cgi?id=77367)
56     try {
57         panner.panningModel = panner.SOUNDFIELD;
58         testFailed("Setting panningModel to SOUNDFIELD should throw exception because it is not implemented.");
59     } catch(e) {
60         testPassed("Setting panningModel to SOUNDFIELD correctly throws exception because it is not implemented.");
61     }
62
63     // Other invalid models should throw an exception.
64     try {
65         panner.panningModel = panner.SOUNDFIELD + 1;
66         testFailed("Illegal panningModel should throw exception.");
67     } catch(e) {
68         testPassed("Illegal panningModel correctly throws exception.");
69     }
70
71     panner.distanceModel = panner.LINEAR_DISTANCE;
72     if (panner.distanceModel === 0)
73         testPassed("distanceModel set to LINEAR_DISTANCE and read correctly.");
74     else
75         testFailed("distanceModel set to LINEAR_DISTANCE (0) but returned " + panner.distanceModel);
76
77     panner.distanceModel = panner.INVERSE_DISTANCE;
78     if (panner.distanceModel === 1)
79         testPassed("distanceModel set to INVERSE_DISTANCE and read correctly.");
80     else
81         testFailed("distanceModel set to INVERSE_DISTANCE (1) but returned " + panner.distanceModel);
82
83     panner.distanceModel = panner.EXPONENTIAL_DISTANCE;
84     if (panner.distanceModel === 2)
85         testPassed("distanceModel set to EXPONENTIAL_DISTANCE and read correctly.");
86     else
87         testFailed("distanceModel set to EXPONENTIAL_DISTANCE (2) but returned " + panner.distanceModel);
88
89     try {
90         panner.distanceModel = panner.EXPONENTIAL_DISTANCE + 1;
91         testFailed("Illegal distanceModel should throw exception.");
92     } catch(e) {
93         testPassed("Illegal distanceModel correctly throws exception.");
94     }
95
96     finishJSTest();
97 }
98
99 runTest();
100 successfullyParsed = true;
101 </script>
102
103 <script src="../fast/js/resources/js-test-post.js"></script>
104 </body>
105 </html>