<!DOCTYPE html>
<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
<title>Canvas test: toDataURL.jpeg.quality.basic</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/html/canvas/resources/canvas-tests.js"></script>
<link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css">
<body class="show_output">

<h1>toDataURL.jpeg.quality.basic</h1>
<p class="desc">toDataURL with JPEG uses the quality parameter</p>


<p class="output">Actual output:</p>
<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas>
<p class="output expectedtext">Expected output:<p><img src="toDataURL.jpeg.quality.basic.png" class="output expected" id="expected" alt="">
<ul id="d"></ul>
<script>
var t = async_test("toDataURL with JPEG uses the quality parameter");
_addTest(function(canvas, ctx) {

ctx.fillStyle = '#00f';
ctx.fillRect(0, 0, 100, 50);
ctx.fillStyle = '#0ff';
ctx.fillRect(0, 3, 100, 1);
// Check for JPEG support first
var data = canvas.toDataURL('image/jpeg');
if (!data.match(/^data:image\/jpeg[;,]/)) {
  _assert(true, "true");
} else {
  var data_hi = canvas.toDataURL('image/jpeg', 0.99);
  var data_lo = canvas.toDataURL('image/jpeg', 0.01);
  ctx.fillStyle = '#f00';
  ctx.fillRect(0, 0, 100, 50);
  deferTest();
  var img_hi = new Image();
  img_hi.onload = function ()
  {
      var img_lo = new Image();
      img_lo.onload = t.step_func_done(function ()
      {
          ctx.drawImage(img_hi, 0, 0, 50, 50, 0, 0, 50, 50);
          ctx.drawImage(img_lo, 0, 0, 50, 50, 50, 0, 50, 50);
          _assert(data_hi.length > data_lo.length, "data_hi.length > data_lo.length");
          _assertPixelApprox(canvas, 25,25, 0,0,255,255, "25,25", "0,0,255,255", 8);
          _assertPixelApprox(canvas, 75,25, 0,0,255,255, "75,25", "0,0,255,255", 32);
      });
      img_lo.src = data_lo;
  };
  img_hi.src = data_hi;
}


});
</script>

