Update ANGLE
[WebKit-https.git] / LayoutTests / webaudio / oscillator-basic.html
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
3 <!--
4 Create an oscillator of each type and verify that the type is set correctly.
5 -->
6 <html>
7 <head>
8 <script type="text/javascript" src="resources/audio-testing.js"></script>
9 <script type="text/javascript" src="../resources/js-test.js"></script>
10 </head>
11
12 <body>
13 <div id="description"></div>
14 <div id="console"></div>
15
16 <script>
17 description("Basic test of setting Oscillator node types.");
18
19 var sampleRate = 44100;
20 var renderLengthSeconds = 0.25;
21
22 var oscTypes = [{type: "sine", name: "SINE"},
23                 {type: "square", name: "SQUARE"},
24                 {type: "sawtooth", name: "SAWTOOTH"},
25                 {type: "triangle", name: "TRIANGLE"},
26                 {type: "custom", name: "CUSTOM"}];
27
28 function runTest() 
29 {
30     window.jsTestIsAsync = true;
31         
32     // Create offline audio context.
33     var context = new webkitOfflineAudioContext(2, sampleRate * renderLengthSeconds, sampleRate);
34     var osc = context.createOscillator();
35
36     // Set each possible oscillator type (except custom) and verify that the type is correct.
37     // Here we're setting the type using WebIDL enum values which are strings.
38     for (var k = 0; k < oscTypes.length - 1; ++k) {
39         osc.type = oscTypes[k].type;
40         if (osc.type == oscTypes[k].type)
41             testPassed("Oscillator correctly set to " + oscTypes[k].name + " type.");
42         else
43             testFailed("Oscillator set to " + oscTypes[k].name + " type, but returns " + oscTypes[osc.type].name + " type.");
44     }
45
46     // Now set a custom oscillator
47     var coeffA = new Float32Array([0, 1, 0.5]);
48     var coeffB = new Float32Array([0, 0, 0]);        
49     var wave = context.createPeriodicWave(coeffA, coeffB);
50     osc.setPeriodicWave(wave);
51     if (osc.type == "custom")
52         testPassed("Oscillator correctly set to CUSTOM type using setPeriodicWave.");
53     else
54         testFailed("Oscillator set to CUSTOM type, but returns " + oscTypes[osc.type].name + " type.");
55
56     // Try setting some invalid types
57     try {
58         osc.type = "sine";
59         osc.type = "custom";
60         testFailed("Directly setting oscillator type to custom did not throw exception.");
61     } catch (e) {
62         testPassed("Directly setting oscillator type to custom correctly throws exception.");
63     }
64
65     // Check that we don't throw an exception for illegal .type values as per WebIDL.
66     shouldNotThrowException(function() { osc.type = "xyz12349jfksd"; }, "Setting .type to illegal string value");
67     shouldNotThrowException(function() { osc.type = new Float32Array(1); }, "Setting .type to illegal type");
68
69     finishJSTest();
70 }
71
72 runTest();
73 successfullyParsed = true;
74
75 </script>
76 </body>
77 </html>