mirror of
https://github.com/servo/servo.git
synced 2025-06-25 09:34:32 +01:00
146 lines
4.8 KiB
JavaScript
146 lines
4.8 KiB
JavaScript
// META: script=/resources/WebIDLParser.js
|
|
// META: script=/resources/idlharness.js
|
|
// META: script=./RTCPeerConnection-helper.js
|
|
// META: timeout=long
|
|
|
|
'use strict';
|
|
|
|
// The following helper functions are called from RTCPeerConnection-helper.js:
|
|
// generateAnswer()
|
|
// getNoiseStream()
|
|
|
|
// Put the global IDL test objects under a parent object.
|
|
// This allows easier search for the test cases when
|
|
// viewing the web page
|
|
const idlTestObjects = {};
|
|
|
|
// Helper function to create RTCTrackEvent object
|
|
function initTrackEvent() {
|
|
const pc = new RTCPeerConnection();
|
|
const transceiver = pc.addTransceiver('audio');
|
|
const { sender, receiver } = transceiver;
|
|
const { track } = receiver;
|
|
return new RTCTrackEvent('track', {
|
|
receiver, track, transceiver
|
|
});
|
|
}
|
|
|
|
// List of async test driver functions
|
|
const asyncInitTasks = [
|
|
asyncInitCertificate,
|
|
asyncInitTransports,
|
|
asyncInitMediaStreamTrack,
|
|
];
|
|
|
|
// Asynchronously generate an RTCCertificate
|
|
function asyncInitCertificate() {
|
|
return RTCPeerConnection.generateCertificate({
|
|
name: 'RSASSA-PKCS1-v1_5',
|
|
modulusLength: 2048,
|
|
publicExponent: new Uint8Array([1, 0, 1]),
|
|
hash: 'SHA-256'
|
|
}).then(cert => {
|
|
idlTestObjects.certificate = cert;
|
|
});
|
|
}
|
|
|
|
// Asynchronously generate instances of
|
|
// RTCSctpTransport, RTCDtlsTransport,
|
|
// and RTCIceTransport
|
|
function asyncInitTransports() {
|
|
const pc = new RTCPeerConnection();
|
|
pc.createDataChannel('test');
|
|
|
|
// setting answer description initializes pc.sctp
|
|
return pc.createOffer()
|
|
.then(offer =>
|
|
pc.setLocalDescription(offer)
|
|
.then(() => generateAnswer(offer)))
|
|
.then(answer => pc.setRemoteDescription(answer))
|
|
.then(() => {
|
|
const sctpTransport = pc.sctp;
|
|
assert_true(sctpTransport instanceof RTCSctpTransport,
|
|
'Expect pc.sctp to be instance of RTCSctpTransport');
|
|
idlTestObjects.sctpTransport = sctpTransport;
|
|
|
|
const dtlsTransport = sctpTransport.transport;
|
|
assert_true(dtlsTransport instanceof RTCDtlsTransport,
|
|
'Expect sctpTransport.transport to be instance of RTCDtlsTransport');
|
|
idlTestObjects.dtlsTransport = dtlsTransport;
|
|
|
|
const iceTransport = dtlsTransport.iceTransport;
|
|
assert_true(iceTransport instanceof RTCIceTransport,
|
|
'Expect sctpTransport.transport to be instance of RTCDtlsTransport');
|
|
idlTestObjects.iceTransport = iceTransport;
|
|
});
|
|
}
|
|
|
|
// Asynchoronously generate MediaStreamTrack from getUserMedia
|
|
function asyncInitMediaStreamTrack() {
|
|
return getNoiseStream({ audio: true })
|
|
.then(mediaStream => {
|
|
idlTestObjects.mediaStreamTrack = mediaStream.getTracks()[0];
|
|
});
|
|
}
|
|
|
|
// Run all async test drivers, report and swallow any error
|
|
// thrown/rejected. Proper test for correct initialization
|
|
// of the objects are done in their respective test files.
|
|
function asyncInit() {
|
|
return Promise.all(asyncInitTasks.map(
|
|
task => {
|
|
const t = async_test(`Test driver for ${task.name}`);
|
|
let promise;
|
|
t.step(() => {
|
|
promise = task().then(
|
|
t.step_func_done(),
|
|
t.step_func(err =>
|
|
assert_unreached(`Failed to run ${task.name}: ${err}`)));
|
|
});
|
|
return promise;
|
|
}));
|
|
}
|
|
|
|
idl_test(
|
|
['webrtc'],
|
|
['webidl', 'mediacapture-streams', 'hr-time', 'dom', 'html'],
|
|
async idlArray => {
|
|
idlArray.add_objects({
|
|
RTCPeerConnection: [`new RTCPeerConnection()`],
|
|
RTCSessionDescription: [`new RTCSessionDescription({ type: 'offer' })`],
|
|
RTCIceCandidate: [`new RTCIceCandidate({ sdpMid: 1 })`],
|
|
RTCDataChannel: [`new RTCPeerConnection().createDataChannel('')`],
|
|
RTCRtpTransceiver: [`new RTCPeerConnection().addTransceiver('audio')`],
|
|
RTCRtpSender: [`new RTCPeerConnection().addTransceiver('audio').sender`],
|
|
RTCRtpReceiver: [`new RTCPeerConnection().addTransceiver('audio').receiver`],
|
|
RTCPeerConnectionIceEvent: [`new RTCPeerConnectionIceEvent('ice')`],
|
|
RTCPeerConnectionIceErrorEvent: [
|
|
`new RTCPeerConnectionIceErrorEvent('ice-error', { port: 0, errorCode: 701 });`
|
|
],
|
|
RTCTrackEvent: [`initTrackEvent()`],
|
|
RTCErrorEvent: [`new RTCErrorEvent('error')`],
|
|
RTCDataChannelEvent: [
|
|
`new RTCDataChannelEvent('channel', {
|
|
channel: new RTCPeerConnection().createDataChannel('')
|
|
})`
|
|
],
|
|
// Async initialized objects below
|
|
RTCCertificate: ['idlTestObjects.certificate'],
|
|
RTCSctpTransport: ['idlTestObjects.sctpTransport'],
|
|
RTCDtlsTransport: ['idlTestObjects.dtlsTransport'],
|
|
RTCIceTransport: ['idlTestObjects.iceTransport'],
|
|
MediaStreamTrack: ['idlTestObjects.mediaStreamTrack'],
|
|
});
|
|
/*
|
|
TODO
|
|
RTCRtpContributingSource
|
|
RTCRtpSynchronizationSource
|
|
RTCDTMFSender
|
|
RTCDTMFToneChangeEvent
|
|
RTCIdentityProviderRegistrar
|
|
RTCIdentityAssertion
|
|
*/
|
|
|
|
await asyncInit();
|
|
}
|
|
);
|