Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(91)

Unified Diff: third_party/WebKit/LayoutTests/webaudio/iirfilter-basic.html

Issue 1361233004: Implement IIRFilter node for WebAudio. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix test issue by printing fewer digits. Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/LayoutTests/webaudio/iirfilter-basic.html
diff --git a/third_party/WebKit/LayoutTests/webaudio/iirfilter-basic.html b/third_party/WebKit/LayoutTests/webaudio/iirfilter-basic.html
new file mode 100644
index 0000000000000000000000000000000000000000..d07e145ef8f30c71cda1f6d667b36f91a2b67864
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/webaudio/iirfilter-basic.html
@@ -0,0 +1,210 @@
+<!doctype html>
+<html>
+ <head>
+ <title>Test Basic IIRFilterNode Properties</title>
+ <script src="../resources/js-test.js"></script>
+ <script src="resources/compatibility.js"></script>
+ <script src="resources/audio-testing.js"></script>
+ </head>
+
+ <body>
+ <script>
+ description("Test Basic IIRFilterNode Properties");
+ window.jsTestIsAsync = true;
+
+ var sampleRate = 48000;
+ var testFrames = 100;
+
+ // Global context that can be used by the individual tasks. It must be defined by the
+ // initialize task.
+ var context;
+
+ var audit = Audit.createTaskRunner();
+
+ audit.defineTask("initialize", function (done) {
+ context = new OfflineAudioContext(1, testFrames, sampleRate);
+ done();
+ });
+
+ audit.defineTask("existence", function (done) {
+ shouldBeDefined("context.createIIRFilter");
+ done();
+ });
+
+ audit.defineTask("parameters", function (done) {
+ // Create a really simple IIR filter. Doesn't much matter what.
+ var coef = Float32Array.from([1]);
+
+ var f = context.createIIRFilter(coef, coef);
+
+ var success = true;
+
+ success = Should("numberOfInputs", f.numberOfInputs).beEqualTo(1) && success;
+ success = Should("numberOfOutputs", f.numberOfOutputs).beEqualTo(1) && success;
+ success = Should("channelCountMode", f.channelCountMode).beEqualTo("max") && success;
+ success = Should("channelInterpretation", f.channelInterpretation).beEqualTo("speakers") && success;
+
+ if (success)
+ testPassed("All basic IIRFilter parameters are correct.\n");
+ else
+ testFailed("Some basic IIRFilter parameter was not correct.\n");
+ done();
+ });
+
+ audit.defineTask("exceptions-createIIRFilter", function (done) {
+ var success = true;
+
+ success = Should("createIIRFilter()", function () {
+ // Two args are required.
+ context.createIIRFilter();
+ }).throw("TypeError") && success;
+
+ success = Should("createIIRFilter(new Float32Array(1))", function () {
+ // Two args are required.
+ context.createIIRFilter(new Float32Array(1));
+ }).throw("TypeError") && success;
+
+ success = Should("createIIRFilter(null, null)", function () {
+ // null is not valid
+ context.createIIRFilter(null, null);
+ }).throw("TypeError") && success;
+
+ success = Should("createIIRFilter([], [])", function () {
+ // There has to be at least one coefficient.
+ context.createIIRFilter([], []);
+ }).throw("NotSupportedError") && success;
+
+ success = Should("createIIRFilter([1], [])", function () {
+ // There has to be at least one coefficient.
+ context.createIIRFilter([1], []);
+ }).throw("NotSupportedError") && success;
+
+ success = Should("createIIRFilter([], [1])", function () {
+ // There has to be at least one coefficient.
+ context.createIIRFilter([], [1]);
+ }).throw("NotSupportedError") && success;
+
+ success = Should("createIIRFilter(new Float32Array(20), new Float32Array(20))",
+ // Max allowed size for the coefficient arrays.
+ function () {
+ var fb = new Float32Array(20);
+ fb[0] = 1;
+ context.createIIRFilter(fb, fb);
+ }).notThrow() && success;
+
+ success = Should("createIIRFilter(new Float32Array(21), [1])",
+ // Max allowed size for the feedforward coefficient array.
+ function () {
+ var coef = new Float32Array(21);
+ coef[0] = 1;
+ context.createIIRFilter(coef, [1]);
+ }).throw("NotSupportedError") && success;
+
+ success = Should("createIIRFilter([1], new Float32Array(21))",
+ // Max allowed size for the feedback coefficient array.
+ function () {
+ var coef = new Float32Array(21);
+ coef[0] = 1;
+ context.createIIRFilter([1], coef);
+ }).throw("NotSupportedError") && success;
+
+ success = Should("createIIRFilter([1], new Float32Array(2))", function () {
+ // First feedback coefficient can't be 0.
+ context.createIIRFilter([1], new Float32Array(2));
+ }).throw("InvalidStateError") && success;
+
+ success = Should("createIIRFilter(new Float32Array(10), [1])", function () {
+ // feedforward coefficients can't all be zero.
+ context.createIIRFilter(new Float32Array(10), [1]);
+ }).throw("InvalidStateError") && success;
+
+ success = Should("createIIRFilter([1], [1, NaN, Infinity])", function () {
+ // Feedback coefficients must be finite.
+ context.createIIRFilter([1], [1, Infinity, NaN]);
+ }).throw("InvalidStateError") && success;
+
+ success = Should("createIIRFilter([1, NaN, Infinity], [1])", function () {
+ // Feedforward coefficients must be finite.
+ context.createIIRFilter([1, Infinity, NaN], [1]);
+ }).throw("InvalidStateError") && success;
+
+ success = Should("createIIRFilter([1, 'abc', []], [1])", function () {
+ // Test that random junk in the array is converted to NaN.
+ context.createIIRFilter([1, "abc", []], [1]);
+ }).throw("InvalidStateError") && success;
+
+ if (success)
+ testPassed("All exceptions for createIIRFilter were correctly thrown.\n");
+ else
+ testFailed("Some exceptions for createIIRFilter were not thrown as expected.\n");
+ done();
+ });
+
+ audit.defineTask("exceptions-getFrequencyData", function (done) {
+ // Create a really simple IIR filter. Doesn't much matter what.
+ var coef = Float32Array.from([1]);
+
+ var f = context.createIIRFilter(coef, coef);
+
+ var success = true;
+
+ success = Should("getFrequencyResponse(null, new Float32Array(1), new Float32Array(1))",
+ function () {
+ // frequencyHz can't be null.
+ f.getFrequencyResponse(null, new Float32Array(1), new Float32Array(1));
+ }).throw("TypeError") && success;
+
+ success = Should("getFrequencyResponse(new Float32Array(1), null, new Float32Array(1))",
+ function () {
+ // magResponse can't be null.
+ f.getFrequencyResponse(new Float32Array(1), null, new Float32Array(1));
+ }).throw("TypeError") && success;
+
+ success = Should("getFrequencyResponse(new Float32Array(1), new Float32Array(1), null)",
+ function () {
+ // phaseResponse can't be null.
+ f.getFrequencyResponse(new Float32Array(1), new Float32Array(1), null);
+ }).throw("TypeError") && success;
+
+ success = Should(
+ "getFrequencyResponse(new Float32Array(10), new Float32Array(1), new Float32Array(20))",
+ function () {
+ // magResponse array must be longer than frequencyHz
+ f.getFrequencyResponse(new Float32Array(10), new Float32Array(1), new Float32Array(
+ 20));
+ }).throw("NotSupportedError") && success;
+
+ success = Should(
+ "getFrequencyResponse(new Float32Array(10), new Float32Array(20), new Float32Array(1))",
+ function () {
+ // phaseResponse array must be longer than frequencyHz
+ f.getFrequencyResponse(new Float32Array(10), new Float32Array(20), new Float32Array(
+ 1));
+ }).throw("NotSupportedError") && success;
+
+ success = Should(
+ "getFrequencyResponse(new Float32Array(10), new Float32Array(20), new Float32Array(30))",
+ function () {
+ // Ok if magResponse and phaseResponse have different lengths as long as they're longer
+ // than frequencyHz.
+ f.getFrequencyResponse(new Float32Array(10), new Float32Array(20), new Float32Array(
+ 30));
+ }).notThrow() && success;
+
+ if (success)
+ testPassed("getFrequencyResponse exceptions handled correctly.\n");
+ else
+ testFailed("getFrequencyResponse exceptions not handled correctly.\n");
+
+ done();
+ });
+ audit.defineTask("finish", function (done) {
+ finishJSTest();
+ done();
+ });
+
+ audit.runTasks();
+ successfullyParsed = true;
+ </script>
+ </body>
+</html>

Powered by Google App Engine
This is Rietveld 408576698