Index: third_party/WebKit/LayoutTests/webaudio/Panner/panner-distance-clamping.html |
diff --git a/third_party/WebKit/LayoutTests/webaudio/Panner/panner-distance-clamping.html b/third_party/WebKit/LayoutTests/webaudio/Panner/panner-distance-clamping.html |
index edea8d6dcbb58dacb0f5c7a23522a2da9dc60839..a4df2ebd1778efd4149c2500dca5e2e128ea6192 100644 |
--- a/third_party/WebKit/LayoutTests/webaudio/Panner/panner-distance-clamping.html |
+++ b/third_party/WebKit/LayoutTests/webaudio/Panner/panner-distance-clamping.html |
@@ -1,193 +1,194 @@ |
-<!doctype html> |
+<!DOCTYPE html> |
<html> |
<head> |
- <title>Test Clamping of Distance for PannerNode</title> |
+ <title> |
+ Test Clamping of Distance for PannerNode |
+ </title> |
<script src="../../resources/testharness.js"></script> |
<script src="../../resources/testharnessreport.js"></script> |
<script src="../resources/audit-util.js"></script> |
<script src="../resources/audit.js"></script> |
</head> |
- |
<body> |
- <script> |
+ <script id="layout-test-code"> |
// Arbitrary sample rate and render length. |
- var sampleRate = 48000; |
- var renderFrames = 128; |
+ let sampleRate = 48000; |
+ let renderFrames = 128; |
- var audit = Audit.createTaskRunner(); |
+ let audit = Audit.createTaskRunner(); |
- audit.define("ref-distance-error", (task, should) => { |
- testDistanceLimits(should, {name: "refDistance", isZeroAllowed: true}); |
+ audit.define('ref-distance-error', (task, should) => { |
+ testDistanceLimits(should, {name: 'refDistance', isZeroAllowed: true}); |
task.done(); |
}); |
- audit.define("max-distance-error", (task, should) => { |
- testDistanceLimits(should, {name: "maxDistance", isZeroAllowed: false}); |
+ audit.define('max-distance-error', (task, should) => { |
+ testDistanceLimits(should, {name: 'maxDistance', isZeroAllowed: false}); |
task.done(); |
}); |
function testDistanceLimits(should, options) { |
// Verify that exceptions are thrown for invalid values of refDistance. |
- var context = new OfflineAudioContext(1, renderFrames, sampleRate); |
+ let context = new OfflineAudioContext(1, renderFrames, sampleRate); |
- var attrName = options.name; |
- var prefix = "new PannerNode(c, {" + attrName + ": "; |
+ let attrName = options.name; |
+ let prefix = 'new PannerNode(c, {' + attrName + ': '; |
- should(function () { |
- var nodeOptions = {}; |
+ should(function() { |
+ let nodeOptions = {}; |
nodeOptions[attrName] = -1; |
new PannerNode(context, nodeOptions); |
- }, prefix + "-1})").throw("RangeError"); |
+ }, prefix + '-1})').throw('RangeError'); |
if (options.isZeroAllowed) { |
- should(function () { |
- var nodeOptions = {}; |
+ should(function() { |
+ let nodeOptions = {}; |
nodeOptions[attrName] = 0; |
new PannerNode(context, nodeOptions); |
- }, prefix + "0})").notThrow(); |
+ }, prefix + '0})').notThrow(); |
} else { |
- should(function () { |
- var nodeOptions = {}; |
+ should(function() { |
+ let nodeOptions = {}; |
nodeOptions[attrName] = 0; |
new PannerNode(context, nodeOptions); |
- }, prefix + "0})").throw("RangeError"); |
+ }, prefix + '0})').throw('RangeError'); |
} |
// The smallest representable positive single float. |
- var leastPositiveDoubleFloat = 4.9406564584124654e-324; |
+ let leastPositiveDoubleFloat = 4.9406564584124654e-324; |
- should( |
- function () { |
- var nodeOptions = {}; |
- nodeOptions[attrName] = leastPositiveDoubleFloat; |
- new PannerNode(context, nodeOptions); |
- }, prefix + leastPositiveDoubleFloat + "})") |
- .notThrow(); |
+ should(function() { |
+ let nodeOptions = {}; |
+ nodeOptions[attrName] = leastPositiveDoubleFloat; |
+ new PannerNode(context, nodeOptions); |
+ }, prefix + leastPositiveDoubleFloat + '})').notThrow(); |
- prefix = "panner." + attrName + " = "; |
+ prefix = 'panner.' + attrName + ' = '; |
panner = new PannerNode(context); |
- should(function () { |
+ should(function() { |
panner[attrName] = -1; |
- }, prefix + "-1").throw("RangeError"); |
+ }, prefix + '-1').throw('RangeError'); |
if (options.isZeroAllowed) { |
- should(function () { |
+ should(function() { |
panner[attrName] = 0; |
- }, prefix + "0").notThrow(); |
+ }, prefix + '0').notThrow(); |
} else { |
- should(function () { |
+ should(function() { |
panner[attrName] = 0; |
- }, prefix + "0").throw("RangeError"); |
+ }, prefix + '0').throw('RangeError'); |
} |
- should(function () { |
+ should(function() { |
panner[attrName] = leastPositiveDoubleFloat; |
}, prefix + leastPositiveDoubleFloat).notThrow(); |
} |
- audit.define("min-distance", (task, should) => { |
+ audit.define('min-distance', (task, should) => { |
// Test clamping of panner distance to refDistance for all of the |
// distance models. The actual distance is arbitrary as long as it's |
// less than refDistance. We test default and non-default values for |
// the panner's refDistance and maxDistance. |
- // correctly. |
- Promise.all([ |
- runTest(should, { |
- distance: 0.01, |
- distanceModel: "linear", |
- }), |
- runTest(should, { |
- distance: 0.01, |
- distanceModel: "exponential", |
- }), |
- runTest(should, { |
- distance: 0.01, |
- distanceModel: "inverse", |
- }), |
- runTest(should, { |
- distance: 2, |
- distanceModel: "linear", |
- maxDistance: 1000, |
- refDistance: 10, |
- }), |
- runTest(should, { |
- distance: 2, |
- distanceModel: "exponential", |
- maxDistance: 1000, |
- refDistance: 10, |
- }), |
- runTest(should, { |
- distance: 2, |
- distanceModel: "inverse", |
- maxDistance: 1000, |
- refDistance: 10, |
- }), |
- ]) |
- .then(() => task.done()); |
+ // correctly. |
+ Promise |
+ .all([ |
+ runTest(should, { |
+ distance: 0.01, |
+ distanceModel: 'linear', |
+ }), |
+ runTest(should, { |
+ distance: 0.01, |
+ distanceModel: 'exponential', |
+ }), |
+ runTest(should, { |
+ distance: 0.01, |
+ distanceModel: 'inverse', |
+ }), |
+ runTest(should, { |
+ distance: 2, |
+ distanceModel: 'linear', |
+ maxDistance: 1000, |
+ refDistance: 10, |
+ }), |
+ runTest(should, { |
+ distance: 2, |
+ distanceModel: 'exponential', |
+ maxDistance: 1000, |
+ refDistance: 10, |
+ }), |
+ runTest(should, { |
+ distance: 2, |
+ distanceModel: 'inverse', |
+ maxDistance: 1000, |
+ refDistance: 10, |
+ }), |
+ ]) |
+ .then(() => task.done()); |
}); |
- audit.define("max-distance", (task, should) => { |
+ audit.define('max-distance', (task, should) => { |
// Like the "min-distance" task, but for clamping to the max |
// distance. The actual distance is again arbitrary as long as it is |
// greater than maxDistance. |
- Promise.all([ |
- runTest(should, { |
- distance: 20000, |
- distanceModel: "linear", |
- }), |
- runTest(should, { |
- distance: 21000, |
- distanceModel: "exponential", |
- }), |
- runTest(should, { |
- distance: 23000, |
- distanceModel: "inverse", |
- }), |
- runTest(should, { |
- distance: 5000, |
- distanceModel: "linear", |
- maxDistance: 1000, |
- refDistance: 10, |
- }), |
- runTest(should, { |
- distance: 5000, |
- distanceModel: "exponential", |
- maxDistance: 1000, |
- refDistance: 10, |
- }), |
- runTest(should, { |
- distance: 5000, |
- distanceModel: "inverse", |
- maxDistance: 1000, |
- refDistance: 10, |
- }), |
- ]) |
- .then(() => task.done()); |
+ Promise |
+ .all([ |
+ runTest(should, { |
+ distance: 20000, |
+ distanceModel: 'linear', |
+ }), |
+ runTest(should, { |
+ distance: 21000, |
+ distanceModel: 'exponential', |
+ }), |
+ runTest(should, { |
+ distance: 23000, |
+ distanceModel: 'inverse', |
+ }), |
+ runTest(should, { |
+ distance: 5000, |
+ distanceModel: 'linear', |
+ maxDistance: 1000, |
+ refDistance: 10, |
+ }), |
+ runTest(should, { |
+ distance: 5000, |
+ distanceModel: 'exponential', |
+ maxDistance: 1000, |
+ refDistance: 10, |
+ }), |
+ runTest(should, { |
+ distance: 5000, |
+ distanceModel: 'inverse', |
+ maxDistance: 1000, |
+ refDistance: 10, |
+ }), |
+ ]) |
+ .then(() => task.done()); |
}); |
function runTest(should, options) { |
- var context = new OfflineAudioContext(2, renderFrames, sampleRate); |
- var src = new OscillatorNode(context, { |
- type: "sawtooth", |
- frequency: 20*440, |
+ let context = new OfflineAudioContext(2, renderFrames, sampleRate); |
+ let src = new OscillatorNode(context, { |
+ type: 'sawtooth', |
+ frequency: 20 * 440, |
}); |
// Set panner options. Use a non-default rolloffFactor so that the |
// various distance models look distinctly different. |
- var pannerOptions = {}; |
+ let pannerOptions = {}; |
Object.assign(pannerOptions, options, {rolloffFactor: 0.5}); |
- var pannerRef = new PannerNode(context, pannerOptions); |
- var pannerTest = new PannerNode(context, pannerOptions); |
+ let pannerRef = new PannerNode(context, pannerOptions); |
+ let pannerTest = new PannerNode(context, pannerOptions); |
// Split the panner output so we can grab just one of the output |
// channels. |
- var splitRef = new ChannelSplitterNode(context, {numberOfOutputs: 2}); |
- var splitTest = new ChannelSplitterNode(context, {numberOfOutputs: 2}); |
+ let splitRef = new ChannelSplitterNode(context, {numberOfOutputs: 2}); |
+ let splitTest = new ChannelSplitterNode(context, {numberOfOutputs: 2}); |
// Merge the panner outputs back into one stereo stream for the |
// destination. |
- var merger = new ChannelMergerNode(context, {numberOfInputs: 2}); |
+ let merger = new ChannelMergerNode(context, {numberOfInputs: 2}); |
src.connect(pannerTest).connect(splitTest).connect(merger, 0, 0); |
src.connect(pannerRef).connect(splitRef).connect(merger, 0, 1); |
@@ -198,30 +199,31 @@ |
// direction. For the reference panner, manually clamp the distance. |
// All models clamp the distance to a minimum of refDistance. Only the |
// linear model also clamps to a maximum of maxDistance. |
- var xRef = Math.max(options.distance, pannerRef.refDistance); |
+ let xRef = Math.max(options.distance, pannerRef.refDistance); |
- if (pannerRef.distanceModel === "linear") { |
+ if (pannerRef.distanceModel === 'linear') { |
xRef = Math.min(xRef, pannerRef.maxDistance); |
} |
- var xTest = options.distance; |
+ let xTest = options.distance; |
pannerRef.positionZ.setValueAtTime(xRef, 0); |
pannerTest.positionZ.setValueAtTime(xTest, 0); |
src.start(); |
- return context.startRendering().then(function (resultBuffer) { |
- var actual = resultBuffer.getChannelData(0); |
- var expected = resultBuffer.getChannelData(1); |
- |
- should(xTest < pannerRef.refDistance || xTest > pannerRef.maxDistance, |
- "Model: " + options.distanceModel + ": Distance (" + xTest + |
- ") is outside the range [" + pannerRef.refDistance + ", " + |
- pannerRef.maxDistance + "]") |
- .beEqualTo(true); |
- should(actual, "Test panner output " + JSON.stringify(options)) |
- .beEqualToArray(expected); |
+ return context.startRendering().then(function(resultBuffer) { |
+ let actual = resultBuffer.getChannelData(0); |
+ let expected = resultBuffer.getChannelData(1); |
+ |
+ should( |
+ xTest < pannerRef.refDistance || xTest > pannerRef.maxDistance, |
+ 'Model: ' + options.distanceModel + ': Distance (' + xTest + |
+ ') is outside the range [' + pannerRef.refDistance + ', ' + |
+ pannerRef.maxDistance + ']') |
+ .beEqualTo(true); |
+ should(actual, 'Test panner output ' + JSON.stringify(options)) |
+ .beEqualToArray(expected); |
}); |
} |