<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Testing createOffer/createAnswer</title>
        <script src="../resources/testharness.js"></script>
        <script src="../resources/testharnessreport.js"></script>
    </head>
    <body>
        <script>

var pc1 = new RTCPeerConnection();
var pc1Offer;
promise_test((test) => {
    pc1.addTransceiver("video");

    return pc1.createOffer().then((offer) => {
        pc1Offer = offer;
        assert_false(offer instanceof RTCSessionDescription);
    });
}, "Ensuring that offer is a RTCSessionDescriptionInit");


promise_test((test) => {
    var pc2 = new RTCPeerConnection();
    pc2.addTransceiver("video");

    return pc2.setRemoteDescription(pc1Offer).then(() => {
        return pc2.createAnswer();
    }).then((answer) => {
        assert_false(pc1Offer instanceof RTCSessionDescription);
        pc1Offer.sdp = "";
        answer.sdp = "";
    });
}, "Ensuring that answer is a RTCSessionDescriptionInit");

promise_test((test) => {
    var pc3 = new RTCPeerConnection();
    pc3.addTransceiver("video", {"direction": "recvonly"});

    return pc3.createOffer().then((offer) => {
        var lines = offer.sdp.split(/\r?\n/g);
        var msidLine = "";
        for (var i = 0; i < lines.length; i++) {
            if (lines[i].match("a=msid:")) {
                msidLine = lines[i];
                break;
            }
        }
        assert_true(msidLine === "");
    });
}, "SDP offer for recvonly transceiver should not contain a msid attribute");
        </script>
    </body>
</html>
