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

On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".


PASS pc = new RTCPeerConnection({iceServers:[{urls:'stun:foo.com'}]}); did not throw exception.
PASS result = pc.createOffer() did not throw exception.
PASS result is an instance of Promise
PASS result = pc.createOffer({}) did not throw exception.
PASS result is an instance of Promise
PASS result = pc.createOffer(emptyFunc, emptyFunc) did not throw exception.
PASS result is an instance of Promise
PASS result = pc.createOffer(emptyFunc, emptyFunc, {}) did not throw exception.
PASS result is an instance of Promise
PASS result = pc.createAnswer() did not throw exception.
PASS result is an instance of Promise
PASS result = pc.createAnswer({}) did not throw exception.
PASS result is an instance of Promise
PASS result = pc.createAnswer(emptyFunc, emptyFunc) did not throw exception.
PASS result is an instance of Promise
PASS result = pc.createAnswer(emptyFunc, emptyFunc, {}) did not throw exception.
PASS result is an instance of Promise
PASS desc = new RTCSessionDescription({ type: 'offer', sdp: 'x' }); did not throw exception.
PASS result = pc.setLocalDescription(desc) did not throw exception.
PASS result is an instance of Promise
PASS result = pc.setLocalDescription(desc, emptyFunc, emptyFunc) did not throw exception.
PASS result is an instance of Promise
PASS result = pc.setRemoteDescription(desc) did not throw exception.
PASS result is an instance of Promise
PASS result = pc.setRemoteDescription(desc, emptyFunc, emptyFunc) did not throw exception.
PASS result is an instance of Promise
PASS result = pc.addIceCandidate(candidate) did not throw exception.
PASS result is an instance of Promise
PASS result = pc.addIceCandidate(candidate, emptyFunc, emptyFunc) did not throw exception.
PASS result is an instance of Promise
PASS result = pc.getStats() did not throw exception.
PASS result is an instance of Promise
PASS result = pc.getStats(null) did not throw exception.
PASS result is an instance of Promise
PASS result = pc.getStats(null, emptyFunc, emptyFunc) did not throw exception.
PASS result is an instance of Promise
PASS successfullyParsed is true

TEST COMPLETE

