diff --git a/rtcrtptransceiver.js b/rtcrtptransceiver.js new file mode 100644 index 0000000..9001ca9 --- /dev/null +++ b/rtcrtptransceiver.js @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2018 Philipp Hancke. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node */ +'use strict'; + +/* + * a wrapper around the internal transceiver that exposes a + * spec RTCRtpTransceiver. + */ +module.exports = function() { + var RTCRtpTransceiver = function(peerConnectionTransceiver) { + this.peerConnectionTransceiver = peerConnectionTransceiver; + }; + Object.defineProperty(RTCRtpTransceiver.prototype, 'mid', { + get: function() { + return this.peerConnectionTransceiver.mid; + } + }); + + Object.defineProperty(RTCRtpTransceiver.prototype, 'sender', { + get: function() { + return this.peerConnectionTransceiver.rtpSender; + } + }); + + Object.defineProperty(RTCRtpTransceiver.prototype, 'receiver', { + get: function() { + return this.peerConnectionTransceiver.rtpReceiver; + } + }); + + Object.defineProperty(RTCRtpTransceiver.prototype, 'direction', { + get: function() { + return this.peerConnectionTransceiver.direction || 'sendrecv'; + }, + set: function(newDirection) { + return this.peerConnectionTransceiver.direction = newDirection; + } + }); + return RTCRtpTransceiver; +}; diff --git a/test/rtcrtptransceiver.js b/test/rtcrtptransceiver.js new file mode 100644 index 0000000..f582ae1 --- /dev/null +++ b/test/rtcrtptransceiver.js @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2018 Philipp Hancke. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. + */ +/* eslint-env node */ +'use strict'; + +const chai = require('chai'); +const expect = chai.expect; + +const shimRTCRtpTransceiver = require('../rtcrtptransceiver'); +const RTCTransceiver = shimRTCRtpTransceiver(); + +function mockTransceiver() { + return { + mid: 'mock mid', + rtpSender: 'mock sender', + rtpReceiver: 'mock receiver', + direction: 'mock direction' + }; +} + +describe('RTCRtpTransceiver', () => { + let transceiver; + beforeEach(() => { + transceiver = new RTCTransceiver(mockTransceiver()); + }); + + it('returns the transceiver mid', () => { + expect(transceiver.mid).to.equal('mock mid'); + }); + + it('returns the transceiver sender', () => { + expect(transceiver.sender).to.equal('mock sender'); + }); + + it('returns the transceiver receiver', () => { + expect(transceiver.receiver).to.equal('mock receiver'); + }); + + it('returns the transceiver direction', () => { + expect(transceiver.direction).to.equal('mock direction'); + }); + + it('returns the transceiver default sendrecv direction', () => { + transceiver = new RTCTransceiver({}); + expect(transceiver.direction).to.equal('sendrecv'); + }); + + it('sets the internal direction', () => { + const internalTransceiver = {direction: 'something'}; + transceiver = new RTCTransceiver(internalTransceiver); + transceiver.direction = 'sendrecv'; + expect(internalTransceiver.direction).to.equal('sendrecv'); + }); +});