Skip to content

Commit 1f3f9de

Browse files
authored
Merge pull request #260 from achingbrain/feat/accept-peer-connection-in-polyfill
feat: accept preconfigured PeerConnection as polyfill arg
2 parents 5eb8107 + 7b79f16 commit 1f3f9de

File tree

2 files changed

+26
-2
lines changed

2 files changed

+26
-2
lines changed

src/polyfill/RTCPeerConnection.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import RTCCertificate from './RTCCertificate';
1212
// extend RTCConfiguration with peerIdentity
1313
interface RTCConfiguration extends globalThis.RTCConfiguration {
1414
peerIdentity?: string;
15+
peerConnection?: PeerConnection;
1516
}
1617

1718
export default class RTCPeerConnection extends EventTarget implements globalThis.RTCPeerConnection {
@@ -121,7 +122,7 @@ export default class RTCPeerConnection extends EventTarget implements globalThis
121122

122123
try {
123124
const peerIdentity = (config as any)?.peerIdentity ?? `peer-${getRandomString(7)}`;
124-
this.#peerConnection = new PeerConnection(peerIdentity,
125+
this.#peerConnection = config.peerConnection ?? new PeerConnection(peerIdentity,
125126
{
126127
...config,
127128
iceServers:

test/jest-tests/polyfill.test.ts

+24-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
import { expect } from '@jest/globals';
1+
import { expect, jest } from '@jest/globals';
22
import { RTCPeerConnection, RTCDataChannel } from '../../src/polyfill/index';
3+
import { PeerConnection } from '../../src/lib/index';
34

45
describe('polyfill', () => {
56
// Default is 5000 ms but we need more
@@ -212,4 +213,26 @@ describe('polyfill', () => {
212213
};
213214
});
214215
});
216+
217+
test('it should accept a preconfigured PeerConnection', () => {
218+
const peerConnection = new PeerConnection('Peer', {
219+
iceServers: [],
220+
});
221+
222+
// have to override write-only method in order to spy on it
223+
const originalFunc = peerConnection.state.bind(peerConnection);
224+
Object.defineProperty(peerConnection, 'state', {
225+
value: originalFunc,
226+
writable: true,
227+
enumerable: true,
228+
});
229+
230+
const spy = jest.spyOn(peerConnection, 'state');
231+
const rtcPeerConnection = new RTCPeerConnection({
232+
peerConnection,
233+
});
234+
const connectionState = rtcPeerConnection.connectionState;
235+
expect(spy).toHaveBeenCalled();
236+
expect(connectionState).toEqual(originalFunc());
237+
});
215238
});

0 commit comments

Comments
 (0)