File tree 3 files changed +50
-19
lines changed
3 files changed +50
-19
lines changed Original file line number Diff line number Diff line change 1
1
/// <reference lib="dom" />
2
2
3
+ import { PeerConnection } from '../lib/index.js' ;
4
+
5
+ export interface _RTCConfiguration extends RTCConfiguration {
6
+ peerConnection ?: PeerConnection ;
7
+ }
8
+
3
9
export default class _RTCPeerConnection extends EventTarget implements RTCPeerConnection {
4
- constructor ( config ?: RTCConfiguration ) ;
10
+ constructor ( config ?: _RTCConfiguration ) ;
5
11
6
12
// events
7
13
onconnectionstatechange : ( ( this : RTCPeerConnection , ev : Event ) => any ) | null ;
Original file line number Diff line number Diff line change @@ -41,23 +41,25 @@ export default class _RTCPeerConnection extends EventTarget {
41
41
this . #dataChannels = new Set ( ) ;
42
42
this . #canTrickleIceCandidates = null ;
43
43
44
- this . #peerConnection = new NodeDataChannel . PeerConnection ( init ?. peerIdentity ?? `peer-${ getRandomString ( 7 ) } ` , {
45
- ...init ,
46
- iceServers :
47
- init ?. iceServers
48
- ?. map ( ( server ) => {
49
- const urls = Array . isArray ( server . urls ) ? server . urls : [ server . urls ] ;
50
-
51
- return urls . map ( ( url ) => {
52
- if ( server . username && server . credential ) {
53
- const [ protocol , rest ] = url . split ( / : ( .* ) / ) ;
54
- return `${ protocol } :${ server . username } :${ server . credential } @${ rest } ` ;
55
- }
56
- return url ;
57
- } ) ;
58
- } )
59
- . flat ( ) ?? [ ] ,
60
- } ) ;
44
+ this . #peerConnection =
45
+ init . peerConnection ??
46
+ new NodeDataChannel . PeerConnection ( init ?. peerIdentity ?? `peer-${ getRandomString ( 7 ) } ` , {
47
+ ...init ,
48
+ iceServers :
49
+ init ?. iceServers
50
+ ?. map ( ( server ) => {
51
+ const urls = Array . isArray ( server . urls ) ? server . urls : [ server . urls ] ;
52
+
53
+ return urls . map ( ( url ) => {
54
+ if ( server . username && server . credential ) {
55
+ const [ protocol , rest ] = url . split ( / : ( .* ) / ) ;
56
+ return `${ protocol } :${ server . username } :${ server . credential } @${ rest } ` ;
57
+ }
58
+ return url ;
59
+ } ) ;
60
+ } )
61
+ . flat ( ) ?? [ ] ,
62
+ } ) ;
61
63
62
64
// forward peerConnection events
63
65
this . #peerConnection. onStateChange ( ( ) => {
Original file line number Diff line number Diff line change 1
- import { expect } from '@jest/globals' ;
1
+ import { expect , jest } from '@jest/globals' ;
2
2
import polyfill from '../../polyfill/index.js' ;
3
+ import { PeerConnection } from '../../lib' ;
3
4
4
5
describe ( 'polyfill' , ( ) => {
5
6
test ( 'generateCertificate should throw' , ( ) => {
6
7
expect ( async ( ) => {
7
8
await polyfill . RTCPeerConnection . generateCertificate ( { } ) ;
8
9
} ) . rejects . toEqual ( new DOMException ( 'Not implemented' ) ) ;
9
10
} ) ;
11
+
12
+ test ( 'it should accept a preconfigured PeerConnection' , ( ) => {
13
+ const peerConnection = new PeerConnection ( 'Peer' , {
14
+ iceServers : [ ] ,
15
+ } ) ;
16
+
17
+ // have to override write-only method in order to spy on it
18
+ const originalFunc = peerConnection . state . bind ( peerConnection ) ;
19
+ Object . defineProperty ( peerConnection , 'state' , {
20
+ value : originalFunc ,
21
+ writable : true ,
22
+ enumerable : true ,
23
+ } ) ;
24
+
25
+ const spy = jest . spyOn ( peerConnection , 'state' ) ;
26
+ const rtcPeerConnection = new polyfill . RTCPeerConnection ( {
27
+ peerConnection,
28
+ } ) ;
29
+ const connectionState = rtcPeerConnection . connectionState ;
30
+ expect ( spy ) . toHaveBeenCalled ( ) ;
31
+ expect ( connectionState ) . toEqual ( originalFunc ( ) ) ;
32
+ } ) ;
10
33
} ) ;
You can’t perform that action at this time.
0 commit comments