Bug 1523562 [wpt PR 14417] - Update RTCPeerConnection-helper.js, a=testonly

Automatic update from web-platform-tests
Update RTCPeerConnection-helper.js (#14417)

* Update RTCPeerConnection-helper.js according changes proposed in https://github.com/web-platform-tests/wpt/pull/13499
* Modernize doSignalingHandshake
--

wpt-commits: b75b876e7d5843582f21e5b52c54d509dffb6da0
wpt-pr: 14417
This commit is contained in:
youennf 2019-01-31 12:14:28 +00:00 committed by James Graham
parent 590c261eef
commit a1682c0a6f
3 changed files with 103 additions and 43 deletions

View File

@ -14,7 +14,7 @@
// createDataChannelPair
// awaitMessage
// blobToArrayBuffer
// assert_equals_array_buffer
// assert_equals_typed_array
/*
6.2. RTCDataChannel
@ -140,7 +140,7 @@
assert_true(messageBuffer instanceof ArrayBuffer,
'Expect messageBuffer to be an ArrayBuffer');
assert_equals_array_buffer(messageBuffer, helloBuffer.buffer);
assert_equals_typed_array(messageBuffer, helloBuffer.buffer);
});
}, 'Data channel should be able to send Uint8Array message and receive as ArrayBuffer');
@ -162,7 +162,7 @@
assert_true(messageBuffer instanceof ArrayBuffer,
'Expect messageBuffer to be an ArrayBuffer');
assert_equals_array_buffer(messageBuffer, helloBuffer.buffer);
assert_equals_typed_array(messageBuffer, helloBuffer.buffer);
});
}, 'Data channel should be able to send ArrayBuffer message and receive as ArrayBuffer');
@ -183,7 +183,7 @@
assert_true(messageBuffer instanceof ArrayBuffer,
'Expect messageBuffer to be an ArrayBuffer');
assert_equals_array_buffer(messageBuffer, helloBuffer.buffer);
assert_equals_typed_array(messageBuffer, helloBuffer.buffer);
});
}, 'Data channel should be able to send Blob message and receive as ArrayBuffer');
@ -210,7 +210,7 @@
assert_true(messageBuffer instanceof ArrayBuffer,
'Expect messageBuffer to be an ArrayBuffer');
assert_equals_array_buffer(messageBuffer, helloBuffer.buffer);
assert_equals_typed_array(messageBuffer, helloBuffer.buffer);
});
}, 'Data channel should be able to send ArrayBuffer message and receive as Blob');
@ -240,7 +240,7 @@
assert_true(messageBuffer instanceof ArrayBuffer,
'Expect messageBuffer to be an ArrayBuffer');
assert_equals_array_buffer(messageBuffer, helloBuffer.buffer);
assert_equals_typed_array(messageBuffer, helloBuffer.buffer);
});
}, 'Data channel binaryType should receive message as Blob by default');
@ -253,9 +253,9 @@
receivedMessages.push(data);
if(receivedMessages.length === 3) {
assert_equals_array_buffer(receivedMessages[0], helloBuffer.buffer);
assert_equals_typed_array(receivedMessages[0], helloBuffer.buffer);
assert_equals(receivedMessages[1], unicodeString);
assert_equals_array_buffer(receivedMessages[2], helloBuffer.buffer);
assert_equals_typed_array(receivedMessages[2], helloBuffer.buffer);
t.done();
}

View File

@ -182,16 +182,27 @@ function exchangeIceCandidates(pc1, pc2) {
}
// Helper function for doing one round of offer/answer exchange
// betweeen two local peer connections
function doSignalingHandshake(localPc, remotePc) {
return localPc.createOffer()
.then(offer => Promise.all([
localPc.setLocalDescription(offer),
remotePc.setRemoteDescription(offer)]))
.then(() => remotePc.createAnswer())
.then(answer => Promise.all([
remotePc.setLocalDescription(answer),
localPc.setRemoteDescription(answer)]))
// between two local peer connections
async function doSignalingHandshake(localPc, remotePc, options={}) {
let offer = await localPc.createOffer();
// Modify offer if callback has been provided
if (options.modifyOffer) {
offer = await options.modifyOffer(offer);
}
// Apply offer
await localPc.setLocalDescription(offer);
await remotePc.setRemoteDescription(offer);
let answer = await remotePc.createAnswer();
// Modify answer if callback has been provided
if (options.modifyAnswer) {
answer = await options.modifyAnswer(answer);
}
// Apply answer
await remotePc.setLocalDescription(answer);
await localPc.setRemoteDescription(answer);
}
// Helper function to create a pair of connected data channel.
@ -295,23 +306,25 @@ function blobToArrayBuffer(blob) {
});
}
// Assert that two ArrayBuffer objects have the same byte values
function assert_equals_array_buffer(buffer1, buffer2) {
assert_true(buffer1 instanceof ArrayBuffer,
'Expect buffer to be instance of ArrayBuffer');
// Assert that two TypedArray or ArrayBuffer objects have the same byte values
function assert_equals_typed_array(array1, array2) {
const [view1, view2] = [array1, array2].map((array) => {
if (array instanceof ArrayBuffer) {
return new DataView(array);
} else {
assert_true(array.buffer instanceof ArrayBuffer,
'Expect buffer to be instance of ArrayBuffer');
return new DataView(array.buffer, array.byteOffset, array.byteLength);
}
});
assert_true(buffer2 instanceof ArrayBuffer,
'Expect buffer to be instance of ArrayBuffer');
assert_equals(view1.byteLength, view2.byteLength,
'Expect both arrays to be of the same byte length');
assert_equals(buffer1.byteLength, buffer2.byteLength,
'Expect both array buffers to be of the same byte length');
const byteLength = view1.byteLength;
const byteLength = buffer1.byteLength;
const byteArray1 = new Uint8Array(buffer1);
const byteArray2 = new Uint8Array(buffer2);
for(let i=0; i<byteLength; i++) {
assert_equals(byteArray1[i], byteArray2[i],
for (let i = 0; i < byteLength; ++i) {
assert_equals(view1.getUint8(i), view2.getUint8(i),
`Expect byte at buffer position ${i} to be equal`);
}
}
@ -478,18 +491,45 @@ async function exchangeOfferAndListenToOntrack(t, caller, callee) {
return ontrackPromise;
}
// The resolver has a |promise| that can be resolved or rejected using |resolve|
// The resolver extends a |promise| that can be resolved or rejected using |resolve|
// or |reject|.
class Resolver {
constructor() {
let promiseResolve;
let promiseReject;
this.promise = new Promise(function(resolve, reject) {
promiseResolve = resolve;
promiseReject = reject;
class Resolver extends Promise {
constructor(executor) {
let resolve, reject;
super((resolve_, reject_) => {
resolve = resolve_;
reject = reject_;
if (executor) {
return executor(resolve_, reject_);
}
});
this.resolve = promiseResolve;
this.reject = promiseReject;
this._done = false;
this._resolve = resolve;
this._reject = reject;
}
/**
* Return whether the promise is done (resolved or rejected).
*/
get done() {
return this._done;
}
/**
* Resolve the promise.
*/
resolve(...args) {
this._done = true;
return this._resolve(...args);
}
/**
* Reject the promise.
*/
reject(...args) {
this._done = true;
return this._reject(...args);
}
}
@ -526,3 +566,23 @@ function findTransceiverForSender(pc, sender) {
}
return null;
}
// Contains a set of values and will yell at you if you try to add a value twice.
class UniqueSet extends Set {
constructor(items) {
super();
if (items !== undefined) {
for (const item of items) {
this.add(item);
}
}
}
add(value, message) {
if (message === undefined) {
message = `Value '${value}' needs to be unique but it is already in the set`;
}
assert_true(!this.has(value), message);
super.add(value);
}
}

View File

@ -105,7 +105,7 @@ module.exports = {
createDataChannelPair: true,
awaitMessage: true,
blobToArrayBuffer: true,
assert_equals_array_buffer: true,
assert_equals_typed_array: true,
generateMediaStreamTrack: true,
getTrackFromUserMedia: true,
getUserMediaTracksAndStreams: true,