<!DOCTYPE html>
<html>
<head>
    <title>video-orientation-canvas</title>
    <script src="video-test.js"></script>
    <script>
        let redColor = new Uint8ClampedArray([208, 30, 0, 255]);
        var context;

        function arraysAreApproximatelyEqual(arrayString, expected, tolerance) {
            try {
                var observed = eval(arrayString);
            } catch (ex) {
                consoleWrite(ex);
                return;
            }

            if (observed.length != expected.length) {
                logResult(Failed, `EXPECTED (<em>${ arrayString }.length</em> == <em>${ expected.length }</em>, OBSERVED '<em>${ observed.length }</em>'`);
                return;
            }

            for (var index in observed) {
                if (Math.abs(observed[index] - expected[index]) <= tolerance)
                    continue;
                logResult(Failed, `EXPECTED (<em>${ arrayString }</em> == <em>[${ expected }]</em>
                    with tolerance <em>${ tolerance }</em>, OBSERVED '<em>[${ observed }]</em>'`);
                return;
            }

            logResult(true, `EXPECTED (<em>${ arrayString }</em> == <em>[${ expected }]</em> with tolerance <em>${ tolerance }</em>`)
        }

        window.addEventListener('load', async event => {
            video1 = document.createElement('video');
            video1.src = 'content/rotation-90.mp4';
            await waitFor(video1, 'canplay', true);

            let canvas1 = document.querySelector('#canvas1');
            canvas1.width = video1.videoWidth;
            canvas1.height = video1.videoHeight;
            context = canvas1.getContext('2d');
            context.drawImage(video1, 0, 0);
            arraysAreApproximatelyEqual('context.getImageData(88, 115, 1, 1).data', redColor, 5);

            video2 = document.createElement('video');
            video2.src = 'content/rotation-180.mp4';
            await waitFor(video2, 'canplay', true);

            let canvas2 = document.querySelector('#canvas2');
            canvas2.width = video2.videoWidth;
            canvas2.height = video2.videoHeight;
            context = canvas2.getContext('2d');
            context.drawImage(video2, 0, 0);
            arraysAreApproximatelyEqual('context.getImageData(237, 88, 1, 1).data', redColor, 5);

            video3 = document.createElement('video');
            video3.src = 'content/rotation-270.mp4';
            await waitFor(video3, 'canplay', true);

            let canvas3 = document.querySelector('#canvas3');
            canvas3.width = video3.videoWidth;
            canvas3.height = video3.videoHeight;
            context = canvas3.getContext('2d');
            context.drawImage(video3, 0, 0);
            arraysAreApproximatelyEqual('context.getImageData(200, 237, 1, 1).data', redColor, 5);

            endTest();
        });
    </script>
</head>
<body>
    <canvas id=canvas1></canvas>
    <canvas id=canvas2></canvas>
    <canvas id=canvas3></canvas>
</body>
</html>
