94 lines
3.2 KiB
HTML
94 lines
3.2 KiB
HTML
<!doctype html>
|
|
<meta charset=utf-8>
|
|
<title>RTCRtpTransceiver.prototype.direction</title>
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
<script src="RTCPeerConnection-helper.js"></script>
|
|
<script>
|
|
'use strict';
|
|
|
|
// Test is based on the following editor draft:
|
|
// https://rawgit.com/w3c/webrtc-pc/8495678808d126d8bc764bf944996f32981fa6fd/webrtc.html
|
|
|
|
// The following helper functions are called from RTCPeerConnection-helper.js:
|
|
// generateAnswer
|
|
|
|
/*
|
|
5.4. RTCRtpTransceiver Interface
|
|
interface RTCRtpTransceiver {
|
|
attribute RTCRtpTransceiverDirection direction;
|
|
readonly attribute RTCRtpTransceiverDirection? currentDirection;
|
|
...
|
|
};
|
|
*/
|
|
|
|
/*
|
|
5.4. direction
|
|
7. Set transceiver's [[Direction]] slot to newDirection.
|
|
*/
|
|
test(t => {
|
|
const pc = new RTCPeerConnection();
|
|
const transceiver = pc.addTransceiver('audio');
|
|
assert_equals(transceiver.direction, 'sendrecv');
|
|
assert_equals(transceiver.currentDirection, null);
|
|
|
|
transceiver.direction = 'recvonly';
|
|
assert_equals(transceiver.direction, 'recvonly');
|
|
assert_equals(transceiver.currentDirection, null,
|
|
'Expect transceiver.currentDirection to not change');
|
|
|
|
}, 'setting direction should change transceiver.direction');
|
|
|
|
/*
|
|
5.4. direction
|
|
3. If newDirection is equal to transceiver's [[Direction]] slot, abort
|
|
these steps.
|
|
*/
|
|
test(t => {
|
|
const pc = new RTCPeerConnection();
|
|
const transceiver = pc.addTransceiver('audio', { direction: 'sendonly' });
|
|
assert_equals(transceiver.direction, 'sendonly');
|
|
transceiver.direction = 'sendonly';
|
|
assert_equals(transceiver.direction, 'sendonly');
|
|
|
|
}, 'setting direction with same direction should have no effect');
|
|
|
|
promise_test(t => {
|
|
const pc = new RTCPeerConnection();
|
|
t.add_cleanup(() => pc.close());
|
|
const transceiver = pc.addTransceiver('audio', { direction: 'recvonly' });
|
|
assert_equals(transceiver.direction, 'recvonly');
|
|
assert_equals(transceiver.currentDirection, null);
|
|
|
|
return pc.createOffer()
|
|
.then(offer =>
|
|
pc.setLocalDescription(offer)
|
|
.then(() => generateAnswer(offer)))
|
|
.then(answer => pc.setRemoteDescription(answer))
|
|
.then(() => {
|
|
assert_equals(transceiver.currentDirection, 'inactive');
|
|
transceiver.direction = 'sendrecv';
|
|
assert_equals(transceiver.direction, 'sendrecv');
|
|
assert_equals(transceiver.currentDirection, 'inactive');
|
|
});
|
|
}, 'setting direction should change transceiver.direction independent of transceiver.currentDirection');
|
|
|
|
/*
|
|
TODO
|
|
An update of directionality does not take effect immediately. Instead, future calls
|
|
to createOffer and createAnswer mark the corresponding media description as
|
|
sendrecv, sendonly, recvonly or inactive as defined in [JSEP] (section 5.2.2.
|
|
and section 5.3.2.).
|
|
|
|
Tested in RTCPeerConnection-onnegotiationneeded.html
|
|
5.4. direction
|
|
6. Update the negotiation-needed flag for connection.
|
|
|
|
Coverage Report
|
|
Tested 6
|
|
Not Tested 1
|
|
Untestable 0
|
|
Total 7
|
|
*/
|
|
|
|
</script>
|