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