blob: 6e9b7e9afa2a1a1ef0448307b2e39e7fbc7a358f [file] [log] [blame]
// META: script=/resources/WebIDLParser.js
// META: script=/resources/idlharness.js
// META: script=./RTCPeerConnection-helper.js
'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'],
['mediacapture-streams', 'dom'],
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', { 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();
}
);