<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
    <head>
        <script src="../../resources/js-test-pre.js"></script>
    </head>
    <body>
        <script>
            var pc;
            var result;
            var desc;
            var candidate;

            description("Test which overloaded RTCPeerConnection function that gets invoked (by return value)");

            shouldNotThrow("pc = new RTCPeerConnection({iceServers:[{urls:'stun:foo.com'}]});");

            // Test createOffer/Answer()
            testCreateOfferOrAnswer("createOffer");
            testCreateOfferOrAnswer("createAnswer");

            function testCreateOfferOrAnswer(functionName) {
                shouldNotThrow("result = pc." + functionName + "()");
                shouldBeType("result", "Promise");

                shouldNotThrow("result = pc." + functionName + "({})");
                shouldBeType("result", "Promise");

                shouldNotThrow("result = pc." + functionName + "(emptyFunc, emptyFunc)");
                shouldBeType("result", "Promise");
                result.then(() => { }, () => { });

                shouldNotThrow("result = pc." + functionName + "(emptyFunc, emptyFunc, {})");
                shouldBeType("result", "Promise");
                result.then(() => { }, () => { });
            }

            // Test setLocal/RemoteDescription()
            shouldNotThrow("desc = new RTCSessionDescription({ type: 'offer', sdp: 'x' });");

            testSetLocalOrRemoteDescription("setLocalDescription")
            testSetLocalOrRemoteDescription("setRemoteDescription")

            function testSetLocalOrRemoteDescription(functionName) {
                shouldNotThrow("result = pc." + functionName + "(desc)");
                shouldBeType("result", "Promise");

                shouldNotThrow("result = pc." + functionName + "(desc, emptyFunc, emptyFunc)");
                shouldBeType("result", "Promise");
            }

            // Test addIceCandidate()
            candidate = new RTCIceCandidate({ "candidate": "foo", "sdpMid": "bar" });

            shouldNotThrow("result = pc.addIceCandidate(candidate)");
            shouldBeType("result", "Promise");

            shouldNotThrow("result = pc.addIceCandidate(candidate, emptyFunc, emptyFunc)");
            shouldBeType("result", "Promise");

            // Test getStats()
            shouldNotThrow("result = pc.getStats()");
            shouldBeType("result", "Promise");

            shouldNotThrow("result = pc.getStats(null)");
            shouldBeType("result", "Promise");

            shouldNotThrow("result = pc.getStats(null, emptyFunc, emptyFunc)");
            shouldBeType("result", "Promise");

            function emptyFunc() { }

            window.successfullyParsed = true;

        </script>
        <script src="../../resources/js-test-post.js"></script>
    </body>
</html>
