/*
 * Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
 * for details. All rights reserved. Use of this source code is governed by a
 * BSD-style license that can be found in the LICENSE file.
 */
/** 
 * @description Ensure correct behavior of canvas with strokeRect using a
 * gradient strokeStyle and a shadow
 */
import "dart:html";
import "dart:math" as Math;
import "../../testcommon.dart";
import "../../../Utils/async_utils.dart";

main() {
  shouldBeAround(a, b) => shouldBeApprox(a, b, 15);

  var canvas = document.createElement('canvas');
  document.body.append(canvas);
  canvas.setAttribute('width', '600');
  canvas.setAttribute('height', '1100');
  var ctx = canvas.getContext('2d');

  var gradient = ctx.createLinearGradient(0, 0, 300, 0);
  gradient.addColorStop(0, 'rgba(0, 0, 255, 0.5)');
  gradient.addColorStop(1, 'rgba(0, 0, 255, 0.5)');

  ctx.save();
  ctx.strokeStyle = gradient;
  ctx.shadowColor = 'rgba(255, 0, 0, 0.5)';
  ctx.shadowOffsetX = 250;
  ctx.lineWidth = 25;

  var side = 200;

  // Alpha shadow.
  ctx.shadowBlur = 0;
  ctx.strokeRect(50, 50, side, side);

  // Blurry shadow.
  ctx.shadowBlur = 10;
  ctx.strokeRect(50, 300, side, side);

  ctx.rotate(Math.PI / 2);

  // Rotated alpha shadow.
  ctx.shadowBlur = 0;
  ctx.strokeRect(550, -250, side, side);

  // Rotated blurry shadow.
  ctx.shadowBlur = 10;
  ctx.strokeRect(800, -250, side, side);

  ctx.restore();

  var imageData, data;
  ctx.fillStyle = 'black';

  test(alphaTestFunction, x, y, r, g, b, a) {
    // Get pixel.
    imageData = ctx.getImageData(x, y, 1, 1);
    data = imageData.data;
    // Test pixel color components.
    shouldBe(data[0], r);
    shouldBe(data[1], g);
    shouldBe(data[2], b);
    alphaTestFunction(data[3], a);
    // Plot test point.
    ctx.fillRect(x, y, 3, 3);
  }

  debug('Verifying alpha shadow...');
  test(shouldBe, 400, 150, 0, 0, 0, 0);

  test(shouldBe, 400, 75,  0, 0, 0, 0);
  test(shouldBe, 400, 225, 0, 0, 0, 0);
  test(shouldBe, 325, 150, 0, 0, 0, 0);
  test(shouldBe, 475, 150, 0, 0, 0, 0);

  test(shouldBeAround, 400,  50, 255, 0, 0, 64);
  test(shouldBeAround, 500, 150, 255, 0, 0, 64);
  test(shouldBeAround, 400, 250, 255, 0, 0, 64);
  test(shouldBeAround, 300, 150, 255, 0, 0, 64);

  test(shouldBe, 400, 25,  0, 0, 0, 0);
  test(shouldBe, 525, 150, 0, 0, 0, 0);
  test(shouldBe, 400, 275, 0, 0, 0, 0);
  test(shouldBe, 275, 150, 0, 0, 0, 0);

  debug(' ');
  debug('Verifying blurry shadow...');
  test(shouldBe, 400, 400, 0, 0, 0, 0);

  test(shouldBe, 400, 325, 0, 0, 0, 0);
  test(shouldBe, 475, 400, 0, 0, 0, 0);
  test(shouldBe, 400, 475, 0, 0, 0, 0);
  test(shouldBe, 325, 400, 0, 0, 0, 0);

  test(shouldBeAround, 400, 300, 255, 0, 0, 64);
  test(shouldBeAround, 400, 500, 255, 0, 0, 64);
  test(shouldBeAround, 300, 400, 255, 0, 0, 64);
  test(shouldBeAround, 500, 400, 255, 0, 0, 64);

  test(shouldBe, 525, 400, 0, 0, 0, 0);
  test(shouldBe, 275, 400, 0, 0, 0, 0);

  debug(' ');
  debug('Verifying rotated alpha shadow...');
  test(shouldBe, 400, 650, 0, 0, 0, 0);

  test(shouldBe, 400, 575, 0, 0, 0, 0);
  test(shouldBe, 400, 725, 0, 0, 0, 0);
  test(shouldBe, 325, 650, 0, 0, 0, 0);
  test(shouldBe, 475, 650, 0, 0, 0, 0);

  test(shouldBeAround, 400, 550, 255, 0, 0, 64);
  test(shouldBeAround, 500, 650, 255, 0, 0, 64);
  test(shouldBeAround, 400, 750, 255, 0, 0, 64);
  test(shouldBeAround, 300, 650, 255, 0, 0, 64);

  test(shouldBe, 400, 525, 0, 0, 0, 0);
  test(shouldBe, 525, 650, 0, 0, 0, 0);
  test(shouldBe, 400, 775, 0, 0, 0, 0);
  test(shouldBe, 275, 650, 0, 0, 0, 0);

  debug(' ');
  debug('Verifying rotated blurry shadow...');
  test(shouldBe, 400, 900, 0, 0, 0, 0);

  test(shouldBe, 400, 825, 0, 0, 0, 0);
  test(shouldBe, 475, 900, 0, 0, 0, 0);
  test(shouldBe, 400, 975, 0, 0, 0, 0);
  test(shouldBe, 325, 900, 0, 0, 0, 0);

  test(shouldBeAround, 400, 800,  255, 0, 0, 64);
  test(shouldBeAround, 400, 1000, 255, 0, 0, 64);
  test(shouldBeAround, 300, 900,  255, 0, 0, 64);
  test(shouldBeAround, 500, 900,  255, 0, 0, 64);

  test(shouldBe, 525, 900,  0, 0, 0, 0);
  test(shouldBe, 275, 900,  0, 0, 0, 0);
  test(shouldBe, 400, 1025, 0, 0, 0, 0);

  debug(' ');
}
