diff options
Diffstat (limited to 'testing/web-platform/tests/webrtc/idlharness.https.window.js')
-rw-r--r-- | testing/web-platform/tests/webrtc/idlharness.https.window.js | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/testing/web-platform/tests/webrtc/idlharness.https.window.js b/testing/web-platform/tests/webrtc/idlharness.https.window.js new file mode 100644 index 0000000000..98685f1cd1 --- /dev/null +++ b/testing/web-platform/tests/webrtc/idlharness.https.window.js @@ -0,0 +1,146 @@ +// 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(); + } +); |