<!DOCTYPE html>
<html>
    <head>
        <script src="../../resources/js-test-pre.js"></script>
        <script src="resources/apply-constraints-utils.js"></script>
        <script>

            let tests = [
                {
                    message: "set width, height, and frame rate to valid values.",
                    constraint: { width: 640, height: 480, frameRate: 30 }, 
                    expected: { width: 640, height: 480, frameRate: 30 }, 
                },
                {
                    message: "change width and height, frame rate should remain unchanged.",
                    constraint: { width: 320, height: 240 }, 
                    expected: { width: 320, height: 240, frameRate: 30 }, 
                },
                {
                    message: "the 'exact' constraint can't be satisfied, promise should reject and no settings should change.",
                    constraint: { width: { exact: 2000 } }, 
                    expected: { width: 320, height: 240, frameRate: 30 },
                    error: "width",
                },
                {
                    message: "the 'min' constraint can't be satisfied, promise should reject and no settings should change.",
                    constraint: { width: 640, height: {min: 3000}, }, 
                    expected: { width: 320, height: 240, frameRate: 30 },
                    error: "height",
                },
                {
                    message: "the 'max' constraint can't be satisfied, promise should reject and no settings should change.",
                    constraint: { frameRate: {max: 8}, }, 
                    expected: { frameRate: 30 },
                    error: "frameRate",
                },
                {
                    message: "the 'exact' constraint can be satisfied.",
                    constraint: { width: { exact: 640 } },
                    expected: { width: 640, height: 480 },
                },
                {
                    message: "the 'ideal' constraint can't be satisfied but the 'min' can, maximum value should be chosen.",
                    constraint: { width: {min: 300, ideal: 5000} }, 
                    expected: { width: 1280, height: 720 },
                },
                {
                    message: "'ideal' and 'min' constraints can be satisfied, 'ideal' should be chosen.",
                    constraint: { width: {min: 320, ideal: 640}, height: {min: 480, ideal: 720}, }, 
                    expected: { width: 640, height: 720 },
                },
                {
                    message: "ideal width is greater than track capability, should be clamped to the maximum value.",
                    constraint: { width: 5000 },
                    expected: { width: 1280},
                },
                {
                    message: "frameRate value is less than track capabilities, should be clamped to the minimum values.",
                    constraint: { width: 100, height: 100, frameRate: 4 },
                    expected: { width: 100, height: 100, frameRate: 5 },
                },
                {
                    message: "set frame rate, width and height should remain unchanged",
                    constraint: { frameRate: 20 },
                    expected: { width: 100, height: 100, frameRate: 20 },
                },
                {
                    message: "illegal facing mode value should be ignored, height should change.",
                    constraint: { facingMode: "xnvironment", height: 720 },
                    expected: { facingMode: "user", width: 1280, height: 720 },
                },
                {
                    message: "unknown constraint should be ignored, frame rate should change.",
                    constraint: { WITDH: 400, frameRate: 30 }, 
                    expected: { width: 1280, frameRate: 30 },
                },
            ];

            let tester = new ConstraintsTest({ video: true }, tests, "Tests applyConstraints on a video stream track.")
                .onStreamReady((s) => {
                    stream = s;
                    shouldBe('stream.getVideoTracks().length', '1');
                    shouldBe('stream.getAudioTracks().length', '0');
                    tester.setStreamTrack(stream.getVideoTracks()[0]);
                })
                .onVideoReady((v) => {
                    video = v;
                    shouldBe('video.videoTracks.length', '1');
                    shouldBe('video.audioTracks.length', '0');
                })
                .start();

        </script>
        <script src="../../resources/js-test-post.js"></script>
    </head>
    <body>
        <video controls id="video"</video>
        <br>
        <div id="div"></div>

    </body>
</html>

