| <!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> |