<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <script src="resources/audio-testing.js"></script>
    <script src="../resources/js-test-pre.js"></script>
    <script src="resources/distance-model-testing.js"></script>
  </head>

  <body>
    <div id="description"></div>
    <div id="console"></div>

    <script>
      description("Test linear distance model of AudioPannerNode.");

      function runTest() {
          if (window.testRunner) {
              testRunner.dumpAsText();
              testRunner.waitUntilDone();
          }

          window.jsTestIsAsync = true;

          // Create offline audio context.
          context = new webkitOfflineAudioContext(2, sampleRate * renderLengthSeconds, sampleRate);

          // Create temp panner to get LINEAR_DISTANCE value for testing.
          var pannerModel = context.createPanner();
          createTestAndRun(context, pannerModel.LINEAR_DISTANCE, 0);
      }

      runTest();
      successfullyParsed = true;

    </script>

<script src="../resources/js-test-post.js"></script>
  </body>
</html>
