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..01a4d50d1205f7452575d5c76f5d7cf3b2c31094 |
| --- /dev/null |
| +++ b/third_party/WebKit/LayoutTests/fast/peerconnection/RTCPeerConnection-AddRemoveTrack.html |
| @@ -0,0 +1,143 @@ |
| +<!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); |
| + assert_equals(sender.track, track); |
| + // TODO(hbos): |addTrack| does not add to the set of local streams. When |
| + // |getLocalStreams| is updated to return the streams of all senders this |
| + // would have an observable effect here. https://crbug.com/738918 |
| + 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); |
| + assert_equals(sender.track, trackA); |
| + // TODO(hbos): |addTrack| does not add to the set of local streams. When |
| + // |getLocalStreams| is updated to return the streams of all senders this |
| + // would have an observable effect here. https://crbug.com/738918 |
| + 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 |
| + // doesn't. Fix test when resolving https://crbug.com/webrtc/7932. |
| + 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.'); |
|
Taylor_Brandstetter
2017/07/06 22:45:14
May be helpful to call out the fact that the inter
hbos_chromium
2017/07/07 12:07:48
Done.
|
| + |
| +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. |
| + */ |
| + |
| +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> |