blob: 0c15dc42cb4fc64cd955b5915b75f41b485164af [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
<script>
description("Tests RTCIceCandidate.");
var initializer = {candidate:"foo", sdpMid:"bar", sdpMLineIndex:6};
var candidate;
shouldNotThrow('candidate = new RTCIceCandidate(initializer);');
shouldBe('candidate.candidate', '"foo"');
shouldBe('candidate.sdpMid', '"bar"');
shouldBe('candidate.sdpMLineIndex', '6');
shouldBeDefined('RTCIceCandidate.prototype.toJSON');
shouldBeTrue('Object.getOwnPropertyDescriptor(RTCIceCandidate.prototype, "toJSON").enumerable');
shouldBeTrue('Object.getOwnPropertyDescriptor(RTCIceCandidate.prototype, "toJSON").writable');
shouldBeTrue('Object.getOwnPropertyDescriptor(RTCIceCandidate.prototype, "toJSON").configurable');
shouldBe('RTCIceCandidate.prototype.toJSON.length', '0');
shouldBe('RTCIceCandidate.prototype.toJSON.name', '"toJSON"');
var jsonMap = candidate.toJSON();
shouldBeTrue('Object.getOwnPropertyDescriptor(jsonMap, "candidate").enumerable');
shouldBeTrue('Object.getOwnPropertyDescriptor(jsonMap, "candidate").writable');
shouldBeTrue('Object.getOwnPropertyDescriptor(jsonMap, "candidate").configurable');
var childRTCIceCandidate = function() {};
childRTCIceCandidate.prototype = Object.create(RTCIceCandidate.prototype);
var childCandidate = new childRTCIceCandidate();
shouldThrow('childCandidate.toJSON();');
shouldBeEqualToString('JSON.stringify(candidate.toJSON())', '{"candidate":"foo","sdpMid":"bar","sdpMLineIndex":6}');
candidate.newAttribute = "new value";
shouldBeEqualToString('JSON.stringify(candidate.toJSON())', '{"candidate":"foo","sdpMid":"bar","sdpMLineIndex":6}');
candidate.sdpMLineIndex = "not a number";
shouldBeEqualToString('JSON.stringify(candidate.toJSON())', '{"candidate":"foo","sdpMid":"bar","sdpMLineIndex":6}');
candidate.sdpMid = 7;
shouldBeEqualToString('JSON.stringify(candidate.toJSON())', '{"candidate":"foo","sdpMid":"bar","sdpMLineIndex":6}');
candidate.sdpMid = null;
shouldBeEqualToString('JSON.stringify(candidate.toJSON())', '{"candidate":"foo","sdpMid":"bar","sdpMLineIndex":6}');
debug("");
debug("Attributes are readonly");
evalAndLog('candidate.candidate = "foo-updated"');
shouldBe('candidate.candidate', '"foo"');
evalAndLog('candidate.sdpMid = "bar-updated"');
shouldBe('candidate.sdpMid', '"bar"');
evalAndLog('candidate.sdpMLineIndex = 7');
shouldBe('candidate.sdpMLineIndex', '6');
debug("");
debug("Dictionary argument is mandatory.");
shouldThrow('new RTCIceCandidate();');
debug("One of the 'sdpMid' or 'sdpMLineIndex' members must be present (and not null or undefined).");
shouldThrow('new RTCIceCandidate({candidate:"foo"});');
shouldThrow('new RTCIceCandidate({candidate:"foo", sdpMid: null});');
shouldThrow('new RTCIceCandidate({candidate:"foo", sdpMid: undefined});');
shouldThrow('new RTCIceCandidate({candidate:"foo", sdpMLineIndex: null});');
shouldThrow('new RTCIceCandidate({candidate:"foo", sdpMLineIndex: undefined});');
shouldThrow('new RTCIceCandidate({candidate:"foo", sdpMid: null, sdpMLineIndex: null});');
shouldThrow('new RTCIceCandidate({candidate:"foo", sdpMid: undefined, sdpMLineIndex: undefined});');
debug("");
debug("Test that sdpMid or sdpMLineIndex explicitly set to null or undefined, results in a null value.");
shouldNotThrow('candidate = new RTCIceCandidate({candidate:"foo", sdpMid: null, sdpMLineIndex: 1});');
shouldBeNull("candidate.sdpMid");
shouldBe("candidate.sdpMLineIndex", "1");
shouldNotThrow('candidate = new RTCIceCandidate({candidate:"foo", sdpMid: undefined, sdpMLineIndex: 1});');
shouldBeNull("candidate.sdpMid");
shouldBe("candidate.sdpMLineIndex", "1");
shouldNotThrow('candidate = new RTCIceCandidate({candidate:"foo", sdpMid: "foo", sdpMLineIndex: null});');
shouldBe("candidate.sdpMid", "'foo'");
shouldBeNull("candidate.sdpMLineIndex");
shouldNotThrow('candidate = new RTCIceCandidate({candidate:"foo", sdpMid: "foo", sdpMLineIndex: undefined});');
shouldBe("candidate.sdpMid", "'foo'");
shouldBeNull("candidate.sdpMLineIndex");
debug("");
debug("When one of the 'sdpMid' or 'sdpMLineIndex' members is set, the other must be null.");
shouldNotThrow('candidate = new RTCIceCandidate({candidate:"foo", sdpMid:"bar"});');
shouldBe('candidate.sdpMid', '"bar"');
shouldBe('candidate.sdpMLineIndex', 'null');
shouldNotThrow('candidate = new RTCIceCandidate({candidate:"foo", sdpMLineIndex:6});');
shouldBe('candidate.sdpMid', 'null');
shouldBe('candidate.sdpMLineIndex', '6');
debug("");
debug("Conversion of sdpMLineIndex to unsigned short, following WebIDL rules without [Clamp] or [EnforceRange]");
shouldBe('(new RTCIceCandidate({candidate:"foo", sdpMLineIndex:"a"})).sdpMLineIndex', '0');
shouldBe('(new RTCIceCandidate({candidate:"foo", sdpMLineIndex:-1})).sdpMLineIndex', '65535');
shouldBe('(new RTCIceCandidate({candidate:"foo", sdpMLineIndex:65536})).sdpMLineIndex', '0');
shouldBe('(new RTCIceCandidate({candidate:"foo", sdpMLineIndex:65537})).sdpMLineIndex', '1');
debug("");
debug("Some bad input");
shouldThrow('new RTCIceCandidate(5);');
shouldThrow('new RTCIceCandidate("foobar");');
shouldThrow('new RTCIceCandidate(candidate:"");');
window.successfullyParsed = true;
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>