mirror of
https://github.com/servo/servo.git
synced 2025-08-15 10:25:32 +01:00
Update web-platform-tests to revision 04cd5eb8e5c47e4fe341f2fb541d39fa2346f464
This commit is contained in:
parent
0ab2c3f8a3
commit
1d0624b343
226 changed files with 4495 additions and 903 deletions
|
@ -3,6 +3,7 @@
|
|||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="RTCConfiguration-helper.js"></script>
|
||||
<script src="RTCPeerConnection-helper.js"></script>
|
||||
<script>
|
||||
'use strict';
|
||||
|
||||
|
@ -188,8 +189,8 @@
|
|||
const pc = new RTCPeerConnection({rtcpMuxPolicy: 'require'});
|
||||
t.add_cleanup(() => pc.close());
|
||||
|
||||
await pc.createOffer({offerToReceiveAudio: true})
|
||||
.then(offer => pc.setLocalDescription(offer));
|
||||
const offer = await generateAudioReceiveOnlyOffer(pc);
|
||||
await pc.setLocalDescription(offer);
|
||||
return promise_rejects(t, 'InvalidAccessError', pc.setRemoteDescription({type: 'answer', sdp}));
|
||||
}, 'setRemoteDescription throws InvalidAccessError when called with an answer without rtcp-mux and rtcpMuxPolicy is set to require');
|
||||
</script>
|
||||
|
|
|
@ -61,9 +61,9 @@ a=rtcp-rsize
|
|||
const sessionDesc = { type: 'offer', sdp };
|
||||
|
||||
// valid candidate attributes
|
||||
const sdpMid = 'a1';
|
||||
const sdpMLineIndex = 0;
|
||||
const usernameFragment = 'ETEn';
|
||||
const sdpMid1 = 'a1';
|
||||
const sdpMLineIndex1 = 0;
|
||||
const usernameFragment1 = 'ETEn';
|
||||
|
||||
const sdpMid2 = 'v1';
|
||||
const sdpMLineIndex2 = 1;
|
||||
|
@ -138,7 +138,9 @@ a=rtcp-rsize
|
|||
return promise_rejects(t, 'InvalidStateError',
|
||||
pc.addIceCandidate({
|
||||
candidate: candidateStr1,
|
||||
sdpMid, sdpMLineIndex, usernameFragment
|
||||
sdpMid: sdpMid1,
|
||||
sdpMLineIndex: sdpMLineIndex1,
|
||||
usernameFragment: usernameFragment1
|
||||
}));
|
||||
}, 'Add ICE candidate before setting remote description should reject with InvalidStateError');
|
||||
|
||||
|
@ -153,7 +155,9 @@ a=rtcp-rsize
|
|||
return pc.setRemoteDescription(sessionDesc)
|
||||
.then(() => pc.addIceCandidate({
|
||||
candidate: candidateStr1,
|
||||
sdpMid, sdpMLineIndex, usernameFragment
|
||||
sdpMid: sdpMid1,
|
||||
sdpMLineIndex: sdpMLineIndex1,
|
||||
usernameFragement: usernameFragment1
|
||||
}));
|
||||
}, 'Add ICE candidate after setting remote description should succeed');
|
||||
|
||||
|
@ -165,7 +169,9 @@ a=rtcp-rsize
|
|||
return pc.setRemoteDescription(sessionDesc)
|
||||
.then(() => pc.addIceCandidate(new RTCIceCandidate({
|
||||
candidate: candidateStr1,
|
||||
sdpMid, sdpMLineIndex, usernameFragment
|
||||
sdpMid: sdpMid1,
|
||||
sdpMLineIndex: sdpMLineIndex1,
|
||||
usernameFragement: usernameFragment1
|
||||
})));
|
||||
}, 'Add ICE candidate with RTCIceCandidate should succeed');
|
||||
|
||||
|
@ -175,7 +181,9 @@ a=rtcp-rsize
|
|||
t.add_cleanup(() => pc.close());
|
||||
|
||||
return pc.setRemoteDescription(sessionDesc)
|
||||
.then(() => pc.addIceCandidate({ sdpMid }));
|
||||
.then(() => pc.addIceCandidate({
|
||||
candidate: candidateStr1,
|
||||
sdpMid: sdpMid1 }));
|
||||
}, 'Add candidate with only valid sdpMid should succeed');
|
||||
|
||||
promise_test(t => {
|
||||
|
@ -184,7 +192,9 @@ a=rtcp-rsize
|
|||
t.add_cleanup(() => pc.close());
|
||||
|
||||
return pc.setRemoteDescription(sessionDesc)
|
||||
.then(() => pc.addIceCandidate({ sdpMLineIndex }));
|
||||
.then(() => pc.addIceCandidate({
|
||||
candidate: candidateStr1,
|
||||
sdpMLineIndex: sdpMLineIndex1 }));
|
||||
}, 'Add candidate with only valid sdpMLineIndex should succeed');
|
||||
|
||||
/*
|
||||
|
@ -206,7 +216,9 @@ a=rtcp-rsize
|
|||
return pc.setRemoteDescription(sessionDesc)
|
||||
.then(() => pc.addIceCandidate({
|
||||
candidate: candidateStr1,
|
||||
sdpMid, sdpMLineIndex, usernameFragment
|
||||
sdpMid: sdpMid1,
|
||||
sdpMLineIndex: sdpMLineIndex1,
|
||||
usernameFragement: usernameFragment1
|
||||
}))
|
||||
.then(() => {
|
||||
assert_candidate_line_between(pc.remoteDescription.sdp,
|
||||
|
@ -240,8 +252,9 @@ a=rtcp-rsize
|
|||
return pc.setRemoteDescription(sessionDesc)
|
||||
.then(() => pc.addIceCandidate({
|
||||
candidate: candidateStr1,
|
||||
sdpMid, sdpMLineIndex,
|
||||
usernameFragment: null
|
||||
sdpMid: sdpMid1,
|
||||
sdpMLineIndex: sdpMLineIndex1,
|
||||
ufrag: null
|
||||
}))
|
||||
.then(() => {
|
||||
assert_candidate_line_between(pc.remoteDescription.sdp,
|
||||
|
@ -257,7 +270,9 @@ a=rtcp-rsize
|
|||
return pc.setRemoteDescription(sessionDesc)
|
||||
.then(() => pc.addIceCandidate({
|
||||
candidate: candidateStr1,
|
||||
sdpMid, sdpMLineIndex, usernameFragment
|
||||
sdpMid: sdpMid1,
|
||||
sdpMLineIndex: sdpMLineIndex1,
|
||||
usernameFragement: usernameFragment1
|
||||
}))
|
||||
.then(() => pc.addIceCandidate({
|
||||
candidate: candidateStr2,
|
||||
|
@ -296,12 +311,15 @@ a=rtcp-rsize
|
|||
return pc.setRemoteDescription(sessionDesc)
|
||||
.then(() => pc.addIceCandidate({
|
||||
candidate: candidateStr1,
|
||||
sdpMid, sdpMLineIndex, usernameFragment
|
||||
sdpMid: sdpMid1,
|
||||
sdpMLineIndex: sdpMLineIndex1,
|
||||
usernameFragement: usernameFragment1
|
||||
}))
|
||||
.then(() => pc.addIceCandidate({
|
||||
candidate: '',
|
||||
sdpMid, sdpMLineIndex,
|
||||
usernameFragment
|
||||
sdpMid: sdpMid1,
|
||||
sdpMLineIndex: sdpMLineIndex1,
|
||||
usernameFragement: usernameFragment1
|
||||
}))
|
||||
.then(() => {
|
||||
assert_candidate_line_between(pc.remoteDescription.sdp,
|
||||
|
@ -404,7 +422,9 @@ a=rtcp-rsize
|
|||
promise_rejects(t, 'OperationError',
|
||||
pc.addIceCandidate({
|
||||
candidate: candidateStr1,
|
||||
sdpMid: 'invalid', sdpMLineIndex, usernameFragment
|
||||
sdpMid: 'invalid',
|
||||
sdpMLineIndex: sdpMLineIndex1,
|
||||
usernameFragement: usernameFragment1
|
||||
})));
|
||||
}, 'Add candidate with invalid sdpMid should reject with OperationError');
|
||||
|
||||
|
@ -427,7 +447,7 @@ a=rtcp-rsize
|
|||
pc.addIceCandidate({
|
||||
candidate: candidateStr1,
|
||||
sdpMLineIndex: 2,
|
||||
usernameFragment
|
||||
usernameFragement: usernameFragment1
|
||||
})));
|
||||
}, 'Add candidate with invalid sdpMLineIndex should reject with OperationError');
|
||||
|
||||
|
@ -441,9 +461,9 @@ a=rtcp-rsize
|
|||
return pc.setRemoteDescription(sessionDesc)
|
||||
.then(() => pc.addIceCandidate({
|
||||
candidate: candidateStr1,
|
||||
sdpMid,
|
||||
sdpMid: sdpMid1,
|
||||
sdpMLineIndex: 2,
|
||||
usernameFragment
|
||||
usernameFragement: usernameFragment1
|
||||
}));
|
||||
}, 'Invalid sdpMLineIndex should be ignored if valid sdpMid is provided');
|
||||
|
||||
|
@ -482,8 +502,9 @@ a=rtcp-rsize
|
|||
promise_rejects(t, 'OperationError',
|
||||
pc.addIceCandidate({
|
||||
candidate: candidateStr1,
|
||||
sdpMid, sdpMLineIndex,
|
||||
usernameFragment: 'invalid'
|
||||
sdpMid: sdpMid1,
|
||||
sdpMLineIndex: sdpMLineIndex1,
|
||||
ufrag: 'invalid'
|
||||
})));
|
||||
}, 'Add candidate with invalid usernameFragment should reject with OperationError');
|
||||
|
||||
|
@ -504,7 +525,9 @@ a=rtcp-rsize
|
|||
promise_rejects(t, 'OperationError',
|
||||
pc.addIceCandidate({
|
||||
candidate: invalidCandidateStr,
|
||||
sdpMid, sdpMLineIndex, usernameFragment
|
||||
sdpMid: sdpMid1,
|
||||
sdpMLineIndex: sdpMLineIndex1,
|
||||
usernameFragement: usernameFragment1
|
||||
})));
|
||||
}, 'Add candidate with invalid candidate string should reject with OperationError');
|
||||
|
||||
|
@ -520,7 +543,7 @@ a=rtcp-rsize
|
|||
candidate: candidateStr2,
|
||||
sdpMid: sdpMid2,
|
||||
sdpMLineIndex: sdpMLineIndex2,
|
||||
usernameFragment
|
||||
usernameFragement: usernameFragment1
|
||||
})));
|
||||
}, 'Add candidate with sdpMid belonging to different usernameFragment should reject with OperationError');
|
||||
|
||||
|
|
|
@ -11,8 +11,9 @@
|
|||
// https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html
|
||||
|
||||
// The following helper functions are called from RTCPeerConnection-helper.js:
|
||||
// exchangeIceCandidates
|
||||
// doSignalingHandshake
|
||||
// exchangeIceCandidates
|
||||
// generateAudioReceiveOnlyOffer
|
||||
|
||||
/*
|
||||
4.3.2. Interface Definition
|
||||
|
@ -72,7 +73,7 @@
|
|||
|
||||
pc.addEventListener('icegatheringstatechange', onIceGatheringStateChange);
|
||||
|
||||
pc.createOffer({ offerToReceiveAudio: true })
|
||||
generateAudioReceiveOnlyOffer(pc)
|
||||
.then(offer => pc.setLocalDescription(offer))
|
||||
.then(err => t.step_func(err =>
|
||||
assert_unreached(`Unhandled rejection ${err.name}: ${err.message}`)));
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
|
||||
// The following helper functions are called from RTCPeerConnection-helper.js:
|
||||
// generateAnswer
|
||||
// generateAudioReceiveOnlyOffer
|
||||
// test_never_resolve
|
||||
|
||||
// Listen to the negotiationneeded event on a peer connection
|
||||
|
@ -165,7 +166,7 @@
|
|||
const pc = new RTCPeerConnection();
|
||||
const negotiated = awaitNegotiation(pc);
|
||||
|
||||
return pc.createOffer({ offerToReceiveAudio: true })
|
||||
return generateAudioReceiveOnlyOffer(pc)
|
||||
.then(offer => pc.setLocalDescription(offer))
|
||||
.then(() => negotiated)
|
||||
.then(({nextPromise}) => {
|
||||
|
@ -190,7 +191,7 @@
|
|||
|
||||
return assert_first_promise_fulfill_after_second(
|
||||
awaitNegotiation(pc),
|
||||
pc.createOffer({ offerToReceiveAudio: true })
|
||||
generateAudioReceiveOnlyOffer(pc)
|
||||
.then(offer =>
|
||||
pc.setLocalDescription(offer)
|
||||
.then(() => {
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
|
||||
// The following helper functions are called from RTCPeerConnection-helper.js:
|
||||
// assert_session_desc_similar
|
||||
// generateAudioReceiveOnlyOffer
|
||||
|
||||
/*
|
||||
4.3.2. Interface Definition
|
||||
|
@ -105,7 +106,7 @@
|
|||
promise_test(t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
return pc.createOffer({ offerToReceiveAudio: true })
|
||||
return generateAudioReceiveOnlyOffer(pc)
|
||||
.then(offer =>
|
||||
pc.setRemoteDescription(offer)
|
||||
.then(() => pc.createAnswer()))
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
|
||||
// The following helper functions are called from RTCPeerConnection-helper.js:
|
||||
// assert_session_desc_similar()
|
||||
// generateAudioReceiveOnlyOffer
|
||||
|
||||
/*
|
||||
4.3.2. Interface Definition
|
||||
|
@ -115,7 +116,7 @@
|
|||
.then(offer1 => {
|
||||
return pc1.setLocalDescription(offer1)
|
||||
.then(()=> {
|
||||
return pc1.createOffer({ offerToReceiveAudio: true })
|
||||
return generateAudioReceiveOnlyOffer(pc1)
|
||||
.then(offer2 => {
|
||||
assert_session_desc_not_similar(offer1, offer2);
|
||||
|
||||
|
|
|
@ -11,8 +11,9 @@
|
|||
// https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html
|
||||
|
||||
// The following helper functions are called from RTCPeerConnection-helper.js:
|
||||
// generateDataChannelOffer
|
||||
// assert_session_desc_similar
|
||||
// generateAudioReceiveOnlyOffer
|
||||
// generateDataChannelOffer
|
||||
|
||||
/*
|
||||
4.3.2. Interface Definition
|
||||
|
@ -105,7 +106,7 @@
|
|||
promise_test(t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
return pc.createOffer({ offerToReceiveAudio: true })
|
||||
return generateAudioReceiveOnlyOffer(pc)
|
||||
.then(offer => pc.setRemoteDescription(offer))
|
||||
.then(() => pc.setRemoteDescription({
|
||||
type: 'rollback',
|
||||
|
|
|
@ -55,10 +55,8 @@ promise_test(async t => {
|
|||
promise_test(async t => {
|
||||
const [ localQuicTransport, remoteQuicTransport ] =
|
||||
await makeTwoConnectedQuicTransports(t);
|
||||
const firstLocalStream = localQuicTransport.createStream();
|
||||
firstLocalStream.finish();
|
||||
const secondLocalStream = localQuicTransport.createStream();
|
||||
secondLocalStream.finish();
|
||||
localQuicTransport.createStream().finish();
|
||||
localQuicTransport.createStream().finish();
|
||||
const remoteWatcher =
|
||||
new EventWatcher(t, remoteQuicTransport, [ 'quicstream', 'statechange' ]);
|
||||
const { stream: firstRemoteStream } =
|
||||
|
@ -105,20 +103,6 @@ promise_test(async t => {
|
|||
assert_equals(localStream.state, 'closed');
|
||||
}, `reset() following finish() changes state to 'closed'.`);
|
||||
|
||||
promise_test(async t => {
|
||||
const [ localQuicTransport, remoteQuicTransport ] =
|
||||
await makeTwoConnectedQuicTransports(t);
|
||||
const localStream = localQuicTransport.createStream();
|
||||
localStream.finish();
|
||||
const remoteWatcher = new EventWatcher(t, remoteQuicTransport, 'quicstream');
|
||||
const { stream: remoteStream } = await remoteWatcher.wait_for('quicstream');
|
||||
assert_equals(remoteStream.state, 'open');
|
||||
const remoteStreamWatcher = new EventWatcher(t, remoteStream, 'statechange');
|
||||
await remoteStreamWatcher.wait_for('statechange');
|
||||
assert_equals(remoteStream.state, 'closing');
|
||||
}, 'createStream() followed by finish() fires a quicstream event followed by ' +
|
||||
`a statechange event to 'closing' on the remote side.`);
|
||||
|
||||
promise_test(async t => {
|
||||
const [ localQuicTransport, remoteQuicTransport ] =
|
||||
await makeTwoConnectedQuicTransports(t);
|
||||
|
@ -133,33 +117,6 @@ promise_test(async t => {
|
|||
}, 'createStream() followed by reset() fires a quicstream event followed ' +
|
||||
`by a statechange event to 'closed' on the remote side.`);
|
||||
|
||||
promise_test(async t => {
|
||||
const [ localQuicTransport, remoteQuicTransport ] =
|
||||
await makeTwoConnectedQuicTransports(t);
|
||||
remoteQuicTransport.onquicstream = ({ stream }) => stream.reset();
|
||||
const localStream = localQuicTransport.createStream();
|
||||
localStream.finish();
|
||||
const localWatcher = new EventWatcher(t, localStream, 'statechange');
|
||||
await localWatcher.wait_for('statechange');
|
||||
assert_equals(localStream.state, 'closed');
|
||||
}, 'finish() on a remote stream that has already finished fires a ' +
|
||||
`statechange event to 'closed' on the remote side.`);
|
||||
|
||||
promise_test(async t => {
|
||||
const [ localQuicTransport, remoteQuicTransport ] =
|
||||
await makeTwoConnectedQuicTransports(t);
|
||||
const localStream = localQuicTransport.createStream();
|
||||
localStream.finish();
|
||||
localStream.reset();
|
||||
const remoteWatcher = new EventWatcher(t, remoteQuicTransport, 'quicstream');
|
||||
const { stream: remoteStream } = await remoteWatcher.wait_for('quicstream');
|
||||
const remoteStreamWatcher = new EventWatcher(t, remoteStream, 'statechange');
|
||||
await remoteStreamWatcher.wait_for('statechange');
|
||||
assert_equals(remoteStream.state, 'closing');
|
||||
await remoteStreamWatcher.wait_for('statechange');
|
||||
assert_equals(remoteStream.state, 'closed');
|
||||
}, 'finish() then reset() fires two statechange events on the remote side.');
|
||||
|
||||
promise_test(async t => {
|
||||
const [ localQuicTransport, remoteQuicTransport ] =
|
||||
await makeTwoConnectedQuicTransports(t);
|
||||
|
@ -213,6 +170,24 @@ promise_test(async t => {
|
|||
}, 'write() throws if total write buffered amount would be greater than ' +
|
||||
'maxWriteBufferedAmount.');
|
||||
|
||||
promise_test(async t => {
|
||||
const [ localQuicTransport, remoteQuicTransport ] =
|
||||
await makeTwoConnectedQuicTransports(t);
|
||||
const localStream = localQuicTransport.createStream();
|
||||
localStream.write(new Uint8Array(10));
|
||||
const remoteWatcher = new EventWatcher(t, remoteQuicTransport, 'quicstream');
|
||||
await remoteWatcher.wait_for('quicstream');
|
||||
}, 'write() causes quicstream event to fire on the remote transport.');
|
||||
|
||||
promise_test(async t => {
|
||||
const [ localQuicTransport, remoteQuicTransport ] =
|
||||
await makeTwoConnectedQuicTransports(t);
|
||||
const localStream = localQuicTransport.createStream();
|
||||
localStream.finish();
|
||||
const remoteWatcher = new EventWatcher(t, remoteQuicTransport, 'quicstream');
|
||||
await remoteWatcher.wait_for('quicstream');
|
||||
}, 'finish() causes quicstream event to fire on the remote transport.');
|
||||
|
||||
promise_test(async t => {
|
||||
const [ localQuicTransport, remoteQuicTransport ] =
|
||||
await makeTwoConnectedQuicTransports(t);
|
||||
|
@ -253,4 +228,66 @@ promise_test(async t => {
|
|||
assert_equals(localStream.writeBufferedAmount, 10);
|
||||
}, 'writeBufferedAmount maintained after finish() has been called.');
|
||||
|
||||
promise_test(async t => {
|
||||
const [ localQuicTransport, remoteQuicTransport ] =
|
||||
await makeTwoConnectedQuicTransports(t);
|
||||
const localStream = localQuicTransport.createStream();
|
||||
await localStream.waitForWriteBufferedAmountBelow(0);
|
||||
}, 'waitForWriteBufferedAmountBelow(0) resolves immediately.');
|
||||
|
||||
promise_test(async t => {
|
||||
const [ localQuicTransport, remoteQuicTransport ] =
|
||||
await makeTwoConnectedQuicTransports(t);
|
||||
const localStream = localQuicTransport.createStream();
|
||||
await localStream.waitForWriteBufferedAmountBelow(
|
||||
localStream.maxWriteBufferedAmount);
|
||||
}, 'waitForWriteBufferedAmountBelow(maxWriteBufferedAmount) resolves ' +
|
||||
'immediately.');
|
||||
|
||||
promise_test(async t => {
|
||||
const [ localQuicTransport, remoteQuicTransport ] =
|
||||
await makeTwoConnectedQuicTransports(t);
|
||||
const localStream = localQuicTransport.createStream();
|
||||
localStream.write(new Uint8Array(localStream.maxWriteBufferedAmount));
|
||||
const promise1 = localStream.waitForWriteBufferedAmountBelow(0);
|
||||
const promise2 = localStream.waitForWriteBufferedAmountBelow(0);
|
||||
localStream.finish();
|
||||
await Promise.all([
|
||||
promise_rejects(t, 'InvalidStateError', promise1),
|
||||
promise_rejects(t, 'InvalidStateError', promise2)]);
|
||||
}, 'Pending waitForWriteBufferedAmountBelow() promises rejected after ' +
|
||||
'finish().');
|
||||
|
||||
promise_test(async t => {
|
||||
const [ localQuicTransport, remoteQuicTransport ] =
|
||||
await makeTwoConnectedQuicTransports(t);
|
||||
const localStream = localQuicTransport.createStream();
|
||||
localStream.write(new Uint8Array(localStream.maxWriteBufferedAmount));
|
||||
const promise1 = localStream.waitForWriteBufferedAmountBelow(0);
|
||||
const promise2 = localStream.waitForWriteBufferedAmountBelow(0);
|
||||
localStream.reset();
|
||||
await Promise.all([
|
||||
promise_rejects(t, 'InvalidStateError', promise1),
|
||||
promise_rejects(t, 'InvalidStateError', promise2)]);
|
||||
}, 'Pending waitForWriteBufferedAmountBelow() promises rejected after ' +
|
||||
'reset().');
|
||||
|
||||
closed_stream_test(async (t, stream) => {
|
||||
await promise_rejects(t, 'InvalidStateError',
|
||||
stream.waitForWriteBufferedAmountBelow(0));
|
||||
}, 'waitForWriteBufferedBelow() rejects with InvalidStateError.');
|
||||
|
||||
promise_test(async t => {
|
||||
const [ localQuicTransport, remoteQuicTransport ] =
|
||||
await makeTwoConnectedQuicTransports(t);
|
||||
const localStream = localQuicTransport.createStream();
|
||||
assert_object_equals(
|
||||
localStream.readInto(new Uint8Array(10)),
|
||||
{ amount: 0, finished: false });
|
||||
}, 'readInto() on new local stream returns amount 0.');
|
||||
|
||||
closed_stream_test(async (t, stream) => {
|
||||
assert_throws('InvalidStateError', () => stream.readInto(new Uint8Array(1)));
|
||||
}, 'readInto() throws InvalidStateError.');
|
||||
|
||||
</script>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue