summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/webrtc/idlharness.https.window.js
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/webrtc/idlharness.https.window.js')
-rw-r--r--testing/web-platform/tests/webrtc/idlharness.https.window.js146
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();
+ }
+);