<!DOCTYPE html>
<html>
<head>
    <script src="../../resources/js-test-pre.js"></script>
    <script src="../../media/media-file.js"></script>
    <script src="../../resources/platform-helper.js"></script>
</head>
<body>
<script>
    description("Test the behavior of 2d canvas createPattern as a video is loaded");

    var buffer;
    var expectedResults = [
        // Each entry is formatted as [x, y, r, g, b].
        [40, 165, 200, 200, 0], // Represents yellow north west tile.
        [355, 165, 200, 200, 0], // Represents yellow north east tile.
        [40, 403, 200, 200, 0], // Represents yellow south west tile.
        [355, 403, 200, 200, 0], // Represents yellow south east tile.

        [56, 165, 57, 202, 203], // Represents blue/cyan north west tile.
        [371, 165, 57, 202, 203], // Represents blue/cyan north east tile.
        [56, 403, 57, 202, 203], // Represents blue/cyan south west tile.
        [371, 403, 57, 202, 203], // Represents blue/cyan south east tile.

        [73, 165, 53, 203, 9], // Represents green north west tile.
        [388, 165, 53, 203, 9], // Represents green north east tile.
        [73, 403, 53, 203, 9], // Represents green south west tile.
        [388, 403, 53, 203, 9], // Represents green south east tile.
    ];

    var canvases = document.createElement("div");
    document.body.appendChild(canvases);

    var video = document.createElement("video");
    video.addEventListener("loadeddata", loadeddata);
    video.addEventListener("playing", playing);

    shouldBeNull("document.createElement('canvas').getContext('2d').createPattern(video, 'repeat')");

    video.src = findMediaFile("video", "../../media/content/test");

    function checkPixels(context, x, y, r, g, b, tolerance)
    {
        buffer = context.getImageData(x, y, 1, 1).data;
        shouldBeCloseTo("buffer[0]", r, tolerance);
        shouldBeCloseTo("buffer[1]", g, tolerance);
        shouldBeCloseTo("buffer[2]", b, tolerance);
    }

    function drawImageToCanvasAndCheckPixels()
    {
        var canvas = document.createElement("canvas");
        canvas.width = 2.5 * video.videoWidth;
        canvas.height = 2.5 * video.videoHeight;
        var context = canvas.getContext("2d");
        document.body.appendChild(canvas);

        context.fillStyle = context.createPattern(video, "repeat");
        context.fillRect(0, 0, canvas.width, canvas.height);

        expectedResults.forEach(function(element) {
            checkPixels(context, element[0], element[1], element[2], element[3], element[4], videoCanvasPixelComparisonTolerance());
        });
    }

    function loadeddata()
    {
        drawImageToCanvasAndCheckPixels();

        video.currentTime = 1;
        video.play();
    }

    function playing()
    {
        video.pause();

        drawImageToCanvasAndCheckPixels();

        finishJSTest();
    }

    window.jsTestIsAsync = true;
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>
