Chromium Code Reviews| Index: third_party/WebKit/LayoutTests/fast/peerconnection/RTCPeerConnection-AddRemoveTrack.html |
| diff --git a/third_party/WebKit/LayoutTests/fast/peerconnection/RTCPeerConnection-AddRemoveTrack.html b/third_party/WebKit/LayoutTests/fast/peerconnection/RTCPeerConnection-AddRemoveTrack.html |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..dc3a5eaa6dbf3888a76df677d24965dfcc4609a4 |
| --- /dev/null |
| +++ b/third_party/WebKit/LayoutTests/fast/peerconnection/RTCPeerConnection-AddRemoveTrack.html |
| @@ -0,0 +1,137 @@ |
| +<!DOCTYPE html> |
| +<html> |
| +<head> |
| +<title>RTCPeerConnection.getSenders</title> |
| +<script src="../../resources/testharness.js"></script> |
| +<script src="../../resources/testharnessreport.js"></script> |
| +</head> |
| +<body> |
| +<script> |
| +promise_test(function() { |
| + let pc = new RTCPeerConnection(); |
| + return createStreams({audio:true, video:false}, 1) |
| + .then(function(streams) { |
| + let stream = streams[0]; |
| + let track = stream.getAudioTracks()[0]; |
| + let sender = pc.addTrack(track); |
| + assert_equals(sender.track, track); |
| + assert_array_equals(pc.getLocalStreams(), []); |
| + }); |
| +}, 'addTrack() for a single track.'); |
| + |
| +promise_test(function() { |
| + let pc = new RTCPeerConnection(); |
| + return createStreams({audio:true, video:false}, 1) |
| + .then(function(streams) { |
| + let stream = streams[0]; |
| + let track = stream.getAudioTracks()[0]; |
| + let sender = pc.addTrack(track, stream); |
|
Guido Urdaneta
2017/07/06 09:49:57
why does this test produce the same result as the
hbos_chromium
2017/07/06 12:31:37
The difference can be observed in the SDP, but thi
|
| + assert_equals(sender.track, track); |
| + assert_array_equals(pc.getLocalStreams(), []); |
| + }); |
| +}, 'addTrack() for a single track and its stream.'); |
| + |
| +promise_test(function() { |
| + let pc = new RTCPeerConnection(); |
| + return createStreams({audio:true, video:false}, 2) |
| + .then(function(streams) { |
| + let streamA = streams[0]; |
| + let trackA = streamA.getAudioTracks()[0]; |
| + let streamB = streams[1]; |
| + let sender = pc.addTrack(trackA, streamB); |
|
Guido Urdaneta
2017/07/06 09:49:57
Same here, should passing |streamB| have an observ
hbos_chromium
2017/07/06 12:31:37
Ditto.
|
| + assert_equals(sender.track, trackA); |
| + assert_array_equals(pc.getLocalStreams(), []); |
| + }); |
| +}, 'addTrack() for a single track and a different stream.'); |
| + |
| +promise_test(function() { |
| + let pc = new RTCPeerConnection(); |
| + return createStreams({audio:true, video:false}, 2) |
| + .then(function(streams) { |
| + let streamA = streams[0]; |
| + let streamB = streams[1]; |
| + let track = streamA.getAudioTracks()[0]; |
| + let exception = null; |
| + try { |
| + pc.addTrack(track, streamA, streamB); |
| + } catch (e) { |
| + exception = e; |
| + } |
| + // The spec supports multiple streams per track but our implementation |
|
Guido Urdaneta
2017/07/06 09:49:57
Add a TODO to fix this test with reference to the
hbos_chromium
2017/07/06 12:31:37
Done.
|
| + // doesn't. |
| + assert_true(exception != null); |
| + assert_equals('NotSupportedError', exception.name); |
| + }); |
| +}, 'addTrack() for a single track and two streams throws NotSupportedError.'); |
| + |
| +promise_test(function() { |
| + let pc = new RTCPeerConnection(); |
| + return createStreams({audio:true, video:false}, 1) |
| + .then(function(streams) { |
| + let stream = streams[0]; |
| + let track = stream.getAudioTracks()[0]; |
| + let sender = pc.addTrack(track); |
| + assert_equals(sender.track, track); |
| + let exception = null; |
| + try { |
| + pc.addTrack(track); |
| + } catch (e) { |
| + exception = e; |
| + } |
| + assert_equals('InvalidAccessError', exception.name); |
| + }); |
| +}, 'addTrack() when already added throws InvalidAccessError.'); |
| + |
| +promise_test(function() { |
| + let pc = new RTCPeerConnection(); |
| + return createStreams({audio:true, video:false}, 1) |
| + .then(function(streams) { |
| + let stream = streams[0]; |
| + let track = stream.getAudioTracks()[0]; |
| + pc.addStream(stream); |
| + let exception = null; |
| + try { |
| + pc.addTrack(track); |
| + } catch (e) { |
| + exception = e; |
| + } |
| + assert_true(exception != null); |
| + assert_equals('InvalidAccessError', exception.name); |
| + }); |
| +}, 'addTrack() after addStream() throws InvalidAccessError.'); |
| + |
| +promise_test(function() { |
| + let pc = new RTCPeerConnection(); |
| + return createStreams({audio:true, video:false}, 1) |
| + .then(function(streams) { |
| + let stream = streams[0]; |
| + let track = stream.getAudioTracks()[0]; |
| + let sender = pc.addTrack(track); |
| + assert_equals(sender.track, track); |
| + assert_array_equals(pc.getSenders(), [ sender ]); |
| + assert_array_equals(pc.getLocalStreams(), []); |
| + pc.addStream(stream); |
| + assert_array_equals(pc.getLocalStreams(), [ stream ]); |
| + // The existing sender is reused by |addStream|. |
| + assert_array_equals(pc.getSenders(), [ sender ]); |
| + }); |
| +}, 'addTrack() before addStream() works.'); |
| + |
| +/** |
| + * Helper functions to tests. |
|
Guido Urdaneta
2017/07/06 09:49:57
remove " to tests"
hbos_chromium
2017/07/06 12:31:37
Done.
|
| + */ |
| + |
| +function createStreams(constraints, numStreams, streamsSoFar = []) { |
| + if (numStreams == 0) { |
| + return Promise.resolve(streamsSoFar);; |
| + } |
| + return navigator.mediaDevices.getUserMedia(constraints) |
| + .then(function(stream) { |
| + return createStreams(constraints, |
| + numStreams - 1, |
| + streamsSoFar.concat([stream])); |
| + }); |
| +} |
| +</script> |
| +</body> |
| +</html> |