@webex/internal-media-core 0.0.1-beta → 0.0.4-beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/README.md +2 -78
  2. package/package.json +3 -2
  3. package/dist/transpiled/Logger/index.js +0 -41
  4. package/dist/transpiled/Logger/index.js.map +0 -1
  5. package/dist/transpiled/Media/Device/Device.js +0 -21
  6. package/dist/transpiled/Media/Device/Device.js.map +0 -1
  7. package/dist/transpiled/Media/Device/DeviceMocks.js +0 -65
  8. package/dist/transpiled/Media/Device/DeviceMocks.js.map +0 -1
  9. package/dist/transpiled/Media/Device/index.js +0 -2
  10. package/dist/transpiled/Media/Device/index.js.map +0 -1
  11. package/dist/transpiled/Media/Effects/BNR/Bnr.integration-test.js +0 -47
  12. package/dist/transpiled/Media/Effects/BNR/Bnr.integration-test.js.map +0 -1
  13. package/dist/transpiled/Media/Effects/BNR/Bnr.js +0 -187
  14. package/dist/transpiled/Media/Effects/BNR/Bnr.js.map +0 -1
  15. package/dist/transpiled/Media/Effects/BNR/Bnr.test.js +0 -37
  16. package/dist/transpiled/Media/Effects/BNR/Bnr.test.js.map +0 -1
  17. package/dist/transpiled/Media/Effects/BNR/BnrMock.js +0 -92
  18. package/dist/transpiled/Media/Effects/BNR/BnrMock.js.map +0 -1
  19. package/dist/transpiled/Media/Effects/BNR/index.js +0 -2
  20. package/dist/transpiled/Media/Effects/BNR/index.js.map +0 -1
  21. package/dist/transpiled/Media/Media.integration-test.js +0 -40
  22. package/dist/transpiled/Media/Media.integration-test.js.map +0 -1
  23. package/dist/transpiled/Media/Media.test.js +0 -291
  24. package/dist/transpiled/Media/Media.test.js.map +0 -1
  25. package/dist/transpiled/Media/Track/BufferSourceAudioTrack.js +0 -4
  26. package/dist/transpiled/Media/Track/BufferSourceAudioTrack.js.map +0 -1
  27. package/dist/transpiled/Media/Track/CameraVideoTrack.js +0 -4
  28. package/dist/transpiled/Media/Track/CameraVideoTrack.js.map +0 -1
  29. package/dist/transpiled/Media/Track/LocalAudioTrack.js +0 -4
  30. package/dist/transpiled/Media/Track/LocalAudioTrack.js.map +0 -1
  31. package/dist/transpiled/Media/Track/LocalTrack.js +0 -4
  32. package/dist/transpiled/Media/Track/LocalTrack.js.map +0 -1
  33. package/dist/transpiled/Media/Track/LocalVideoTrack.js +0 -4
  34. package/dist/transpiled/Media/Track/LocalVideoTrack.js.map +0 -1
  35. package/dist/transpiled/Media/Track/MicrophoneAudioTrack.js +0 -4
  36. package/dist/transpiled/Media/Track/MicrophoneAudioTrack.js.map +0 -1
  37. package/dist/transpiled/Media/Track/RemoteAudioTrack.js +0 -4
  38. package/dist/transpiled/Media/Track/RemoteAudioTrack.js.map +0 -1
  39. package/dist/transpiled/Media/Track/RemoteTrack.js +0 -4
  40. package/dist/transpiled/Media/Track/RemoteTrack.js.map +0 -1
  41. package/dist/transpiled/Media/Track/RemoteVideoTrack.js +0 -4
  42. package/dist/transpiled/Media/Track/RemoteVideoTrack.js.map +0 -1
  43. package/dist/transpiled/Media/Track/Track.integration-test.js +0 -118
  44. package/dist/transpiled/Media/Track/Track.integration-test.js.map +0 -1
  45. package/dist/transpiled/Media/Track/Track.js +0 -120
  46. package/dist/transpiled/Media/Track/Track.js.map +0 -1
  47. package/dist/transpiled/Media/Track/Track.test.js +0 -26
  48. package/dist/transpiled/Media/Track/Track.test.js.map +0 -1
  49. package/dist/transpiled/Media/Track/TrackMock.js +0 -109
  50. package/dist/transpiled/Media/Track/TrackMock.js.map +0 -1
  51. package/dist/transpiled/Media/Track/Utils.js +0 -31
  52. package/dist/transpiled/Media/Track/Utils.js.map +0 -1
  53. package/dist/transpiled/Media/Track/index.js +0 -2
  54. package/dist/transpiled/Media/Track/index.js.map +0 -1
  55. package/dist/transpiled/Media/index.js +0 -401
  56. package/dist/transpiled/Media/index.js.map +0 -1
  57. package/dist/transpiled/MediaConnection/EventEmitter.js +0 -4
  58. package/dist/transpiled/MediaConnection/EventEmitter.js.map +0 -1
  59. package/dist/transpiled/MediaConnection/MediaConnection.integration-test.js +0 -218
  60. package/dist/transpiled/MediaConnection/MediaConnection.integration-test.js.map +0 -1
  61. package/dist/transpiled/MediaConnection/MediaConnection.js +0 -357
  62. package/dist/transpiled/MediaConnection/MediaConnection.js.map +0 -1
  63. package/dist/transpiled/MediaConnection/MediaConnection.test.js +0 -427
  64. package/dist/transpiled/MediaConnection/MediaConnection.test.js.map +0 -1
  65. package/dist/transpiled/MediaConnection/RoapMediaConnection.integration-test.js +0 -368
  66. package/dist/transpiled/MediaConnection/RoapMediaConnection.integration-test.js.map +0 -1
  67. package/dist/transpiled/MediaConnection/RoapMediaConnection.js +0 -148
  68. package/dist/transpiled/MediaConnection/RoapMediaConnection.js.map +0 -1
  69. package/dist/transpiled/MediaConnection/RoapMediaConnection.test.js +0 -320
  70. package/dist/transpiled/MediaConnection/RoapMediaConnection.test.js.map +0 -1
  71. package/dist/transpiled/MediaConnection/config.js +0 -2
  72. package/dist/transpiled/MediaConnection/config.js.map +0 -1
  73. package/dist/transpiled/MediaConnection/eventTypes.js +0 -36
  74. package/dist/transpiled/MediaConnection/eventTypes.js.map +0 -1
  75. package/dist/transpiled/MediaConnection/index.js +0 -4
  76. package/dist/transpiled/MediaConnection/index.js.map +0 -1
  77. package/dist/transpiled/MediaConnection/logger.js +0 -22
  78. package/dist/transpiled/MediaConnection/logger.js.map +0 -1
  79. package/dist/transpiled/MediaConnection/roap.js +0 -399
  80. package/dist/transpiled/MediaConnection/roap.js.map +0 -1
  81. package/dist/transpiled/MediaConnection/roap.test.js +0 -873
  82. package/dist/transpiled/MediaConnection/roap.test.js.map +0 -1
  83. package/dist/transpiled/MediaConnection/roap.typegen.js +0 -2
  84. package/dist/transpiled/MediaConnection/roap.typegen.js.map +0 -1
  85. package/dist/transpiled/MediaConnection/testUtils/EventListener.js +0 -102
  86. package/dist/transpiled/MediaConnection/testUtils/EventListener.js.map +0 -1
  87. package/dist/transpiled/MediaConnection/testUtils/RoapListener.js +0 -15
  88. package/dist/transpiled/MediaConnection/testUtils/RoapListener.js.map +0 -1
  89. package/dist/transpiled/MediaConnection/testUtils/index.js +0 -17
  90. package/dist/transpiled/MediaConnection/testUtils/index.js.map +0 -1
  91. package/dist/transpiled/MediaConnection/testUtils/logger.js +0 -31
  92. package/dist/transpiled/MediaConnection/testUtils/logger.js.map +0 -1
  93. package/dist/transpiled/MediaConnection/testUtils.js +0 -14
  94. package/dist/transpiled/MediaConnection/testUtils.js.map +0 -1
  95. package/dist/transpiled/MediaConnection/utils.js +0 -71
  96. package/dist/transpiled/MediaConnection/utils.js.map +0 -1
  97. package/dist/transpiled/MediaConnection/utils.test-fixtures.js +0 -287
  98. package/dist/transpiled/MediaConnection/utils.test-fixtures.js.map +0 -1
  99. package/dist/transpiled/MediaConnection/utils.test.js +0 -20
  100. package/dist/transpiled/MediaConnection/utils.test.js.map +0 -1
  101. package/dist/transpiled/common/peerConnectionMock.js +0 -52
  102. package/dist/transpiled/common/peerConnectionMock.js.map +0 -1
  103. package/dist/transpiled/constants.js +0 -9
  104. package/dist/transpiled/constants.js.map +0 -1
  105. package/dist/transpiled/index.intergation-test.js +0 -14
  106. package/dist/transpiled/index.intergation-test.js.map +0 -1
  107. package/dist/transpiled/index.js +0 -41
  108. package/dist/transpiled/index.js.map +0 -1
@@ -1,427 +0,0 @@
1
- import { setupTestLogger, teardownTestLogger } from './testUtils';
2
- import { ConnectionState } from './index';
3
- import { MediaConnection } from './MediaConnection';
4
- import { Event } from './eventTypes';
5
- describe('MediaConnection', () => {
6
- let previousRTCPeerConnection;
7
- const DEFAULT_CONFIG = {
8
- iceServers: [],
9
- skipInactiveTransceivers: false,
10
- sdpMunging: {},
11
- };
12
- const FAKE_AUDIO_TRACK = {
13
- kind: 'audio',
14
- };
15
- const FAKE_VIDEO_TRACK = {
16
- kind: 'video',
17
- };
18
- const FAKE_SCREENSHARE_TRACK = {
19
- kind: 'video',
20
- };
21
- const FAKE_PC = {
22
- addTrack: jest.fn(),
23
- getTransceivers: jest.fn().mockReturnValue([]),
24
- addTransceiver: jest.fn(),
25
- createOffer: jest.fn().mockResolvedValue({ sdp: '', type: 'offer' }),
26
- setLocalDescription: jest.fn().mockResolvedValue({}),
27
- iceGatheringState: 'complete',
28
- localDescription: { sdp: 'fake' },
29
- getStats: jest.fn(),
30
- close: jest.fn(),
31
- ontrack: null,
32
- };
33
- beforeAll(() => {
34
- setupTestLogger();
35
- });
36
- afterAll(() => {
37
- teardownTestLogger();
38
- });
39
- beforeEach(() => {
40
- previousRTCPeerConnection = window.RTCPeerConnection;
41
- Object.defineProperty(window, 'RTCPeerConnection', {
42
- writable: true,
43
- value: jest.fn().mockImplementation(() => FAKE_PC),
44
- });
45
- });
46
- afterEach(() => {
47
- Object.defineProperty(window, 'RTCPeerConnection', {
48
- writable: true,
49
- value: previousRTCPeerConnection,
50
- });
51
- });
52
- it('initial media connection state is NEW', () => {
53
- const mediaConnection = new MediaConnection(DEFAULT_CONFIG, {
54
- send: {},
55
- receive: {
56
- audio: true,
57
- video: true,
58
- screenShareVideo: true,
59
- },
60
- });
61
- expect(mediaConnection.getConnectionState()).toEqual(ConnectionState.NEW);
62
- });
63
- it('getStats() calls getStats() on the RTCPeerConnection', async () => {
64
- const FAKE_STATS = { anyKey: 'any value' };
65
- FAKE_PC.getStats.mockResolvedValue(FAKE_STATS);
66
- const mediaConnection = new MediaConnection(DEFAULT_CONFIG, {
67
- send: {},
68
- receive: {
69
- audio: true,
70
- video: true,
71
- screenShareVideo: true,
72
- },
73
- });
74
- const stats = await mediaConnection.getStats();
75
- expect(FAKE_PC.getStats).toBeCalledOnceWith();
76
- expect(stats).toEqual(FAKE_STATS);
77
- FAKE_PC.getStats.mockReset();
78
- });
79
- describe('outgoing call/joining a meeting', () => {
80
- let mc;
81
- beforeEach(() => {
82
- mc = new MediaConnection(DEFAULT_CONFIG, {
83
- send: {
84
- audio: FAKE_AUDIO_TRACK,
85
- video: FAKE_VIDEO_TRACK,
86
- screenShareVideo: FAKE_SCREENSHARE_TRACK,
87
- },
88
- receive: {
89
- audio: true,
90
- video: true,
91
- screenShareVideo: true,
92
- },
93
- });
94
- });
95
- it('creates transceivers and does not call addTrack() when initializeTransceivers() is called', async () => {
96
- await mc.initializeTransceivers(false);
97
- expect(FAKE_PC.addTrack).not.toBeCalled();
98
- expect(FAKE_PC.addTransceiver).toBeCalledTimes(3);
99
- expect(FAKE_PC.addTransceiver).nthCalledWith(1, FAKE_AUDIO_TRACK, { direction: 'sendrecv' });
100
- expect(FAKE_PC.addTransceiver).nthCalledWith(2, FAKE_VIDEO_TRACK, { direction: 'sendrecv' });
101
- expect(FAKE_PC.addTransceiver).nthCalledWith(3, FAKE_SCREENSHARE_TRACK, {
102
- direction: 'sendrecv',
103
- });
104
- });
105
- it('fails if any transceiver already exists when initializeTransceivers() is called', () => {
106
- const originalMock = FAKE_PC.getTransceivers;
107
- FAKE_PC.getTransceivers = jest.fn().mockReturnValue([{ id: 'fake_transceiver' }]);
108
- expect(() => mc.initializeTransceivers(false)).toThrow(new Error('SDP negotiation already started'));
109
- expect(() => mc.initializeTransceivers(true)).toThrow(new Error('SDP negotiation already started'));
110
- FAKE_PC.getTransceivers = originalMock;
111
- });
112
- describe('creates transceivers correctly', () => {
113
- [
114
- { localTrack: true, receive: true, expectedDirection: 'sendrecv' },
115
- { localTrack: true, receive: false, expectedDirection: 'sendonly' },
116
- { localTrack: false, receive: false, expectedDirection: 'inactive' },
117
- { localTrack: false, receive: true, expectedDirection: 'recvonly' },
118
- ].forEach(({ localTrack, receive, expectedDirection }) => {
119
- it(`creates AUDIO transceiver with the right direction (${expectedDirection})`, async () => {
120
- const track = localTrack ? FAKE_AUDIO_TRACK : undefined;
121
- mc = new MediaConnection(DEFAULT_CONFIG, {
122
- send: {
123
- audio: track,
124
- },
125
- receive: {
126
- audio: receive,
127
- video: false,
128
- screenShareVideo: false,
129
- },
130
- });
131
- await mc.initializeTransceivers(false);
132
- expect(FAKE_PC.addTransceiver).toBeCalledTimes(3);
133
- expect(FAKE_PC.addTransceiver).nthCalledWith(1, track || 'audio', {
134
- direction: expectedDirection,
135
- });
136
- expect(FAKE_PC.addTransceiver).nthCalledWith(2, 'video', { direction: 'inactive' });
137
- expect(FAKE_PC.addTransceiver).nthCalledWith(3, 'video', { direction: 'inactive' });
138
- });
139
- it(`creates 1st VIDEO transceiver with the right direction (${expectedDirection})`, async () => {
140
- const track = localTrack ? FAKE_VIDEO_TRACK : undefined;
141
- mc = new MediaConnection(DEFAULT_CONFIG, {
142
- send: {
143
- video: track,
144
- },
145
- receive: {
146
- audio: false,
147
- video: receive,
148
- screenShareVideo: false,
149
- },
150
- });
151
- await mc.initializeTransceivers(false);
152
- expect(FAKE_PC.addTransceiver).toBeCalledTimes(3);
153
- expect(FAKE_PC.addTransceiver).nthCalledWith(1, 'audio', { direction: 'inactive' });
154
- expect(FAKE_PC.addTransceiver).nthCalledWith(2, track || 'video', {
155
- direction: expectedDirection,
156
- });
157
- expect(FAKE_PC.addTransceiver).nthCalledWith(3, 'video', { direction: 'inactive' });
158
- });
159
- it(`creates 2nd VIDEO transceiver with the right direction (${expectedDirection})`, async () => {
160
- const track = localTrack ? FAKE_VIDEO_TRACK : undefined;
161
- mc = new MediaConnection(DEFAULT_CONFIG, {
162
- send: {
163
- screenShareVideo: track,
164
- },
165
- receive: {
166
- audio: false,
167
- video: false,
168
- screenShareVideo: receive,
169
- },
170
- });
171
- await mc.initializeTransceivers(false);
172
- expect(FAKE_PC.addTransceiver).toBeCalledTimes(3);
173
- expect(FAKE_PC.addTransceiver).nthCalledWith(1, 'audio', { direction: 'inactive' });
174
- expect(FAKE_PC.addTransceiver).nthCalledWith(2, 'video', { direction: 'inactive' });
175
- expect(FAKE_PC.addTransceiver).nthCalledWith(3, track || 'video', {
176
- direction: expectedDirection,
177
- });
178
- });
179
- });
180
- });
181
- });
182
- describe('incoming call', () => {
183
- it('calls addTrack() for each sent track when initializeTransceivers(true) is called', () => {
184
- const mc = new MediaConnection(DEFAULT_CONFIG, {
185
- send: {
186
- audio: FAKE_AUDIO_TRACK,
187
- video: FAKE_VIDEO_TRACK,
188
- screenShareVideo: FAKE_SCREENSHARE_TRACK,
189
- },
190
- receive: {
191
- audio: false,
192
- video: false,
193
- screenShareVideo: false,
194
- },
195
- });
196
- mc.initializeTransceivers(true);
197
- expect(FAKE_PC.addTrack).toBeCalledTimes(3);
198
- expect(FAKE_PC.addTrack).toBeCalledWith(FAKE_AUDIO_TRACK);
199
- expect(FAKE_PC.addTrack).toBeCalledWith(FAKE_VIDEO_TRACK);
200
- expect(FAKE_PC.addTrack).toBeCalledWith(FAKE_SCREENSHARE_TRACK);
201
- });
202
- });
203
- describe('skipInactiveTransceivers config entry', () => {
204
- const createMediaConnectionWithOnlyAudio = (receiveAudio, sendAudio, config) => {
205
- return new MediaConnection(config, {
206
- send: {
207
- audio: sendAudio ? FAKE_AUDIO_TRACK : undefined,
208
- },
209
- receive: {
210
- audio: receiveAudio,
211
- video: false,
212
- screenShareVideo: false,
213
- },
214
- });
215
- };
216
- [
217
- { direction: 'sendrecv', receiveAudio: true, sendAudio: true },
218
- { direction: 'sendonly', receiveAudio: false, sendAudio: true },
219
- { direction: 'recvonly', receiveAudio: true, sendAudio: false },
220
- ].forEach(({ direction, receiveAudio, sendAudio }) => {
221
- it(`creates only a single transceiver if only audio is used (${direction}) and skipInactiveTransceivers=true`, async () => {
222
- const mediaConnection = createMediaConnectionWithOnlyAudio(receiveAudio, sendAudio, {
223
- iceServers: [],
224
- skipInactiveTransceivers: true,
225
- sdpMunging: {},
226
- });
227
- await mediaConnection.initializeTransceivers(false);
228
- expect(FAKE_PC.addTransceiver).toBeCalledOnceWith(sendAudio ? FAKE_AUDIO_TRACK : 'audio', {
229
- direction,
230
- });
231
- });
232
- });
233
- it('creates 3 transceivers if only audio is used and skipInactiveTransceivers=false', async () => {
234
- const mediaConnection = createMediaConnectionWithOnlyAudio(true, true, {
235
- iceServers: [],
236
- skipInactiveTransceivers: false,
237
- sdpMunging: {},
238
- });
239
- await mediaConnection.initializeTransceivers(false);
240
- expect(FAKE_PC.addTransceiver).toBeCalledTimes(3);
241
- expect(FAKE_PC.addTransceiver).nthCalledWith(1, FAKE_AUDIO_TRACK, {
242
- direction: 'sendrecv',
243
- });
244
- expect(FAKE_PC.addTransceiver).nthCalledWith(2, 'video', {
245
- direction: 'inactive',
246
- });
247
- expect(FAKE_PC.addTransceiver).nthCalledWith(3, 'video', {
248
- direction: 'inactive',
249
- });
250
- });
251
- });
252
- it('close() closes the RTCPeerConnection', () => {
253
- const mediaConnection = new MediaConnection(DEFAULT_CONFIG, {
254
- send: {},
255
- receive: {
256
- audio: true,
257
- video: true,
258
- screenShareVideo: true,
259
- },
260
- });
261
- mediaConnection.close();
262
- expect(FAKE_PC.close).toBeCalledOnceWith();
263
- });
264
- describe('insertDTMF', () => {
265
- beforeEach(() => {
266
- FAKE_PC.addTransceiver.mockReturnValue({});
267
- });
268
- afterEach(() => {
269
- FAKE_PC.addTransceiver.mockReset();
270
- });
271
- it('fails if audio transceivers are not initialised', async () => {
272
- const mc = new MediaConnection(DEFAULT_CONFIG, {
273
- send: { audio: FAKE_AUDIO_TRACK },
274
- receive: {
275
- audio: true,
276
- video: true,
277
- screenShareVideo: true,
278
- },
279
- });
280
- expect(() => mc.insertDTMF('000')).toThrow(new Error('audio transceiver missing'));
281
- });
282
- it('fails if audio transceiver is missing', async () => {
283
- const mc = new MediaConnection({ ...DEFAULT_CONFIG, skipInactiveTransceivers: true }, {
284
- send: {},
285
- receive: {
286
- audio: false,
287
- video: true,
288
- screenShareVideo: true,
289
- },
290
- });
291
- mc.initializeTransceivers(false);
292
- expect(() => mc.insertDTMF('000')).toThrow(new Error('audio transceiver missing'));
293
- });
294
- const setupMediaConnWithFakeAudioTransceiver = (fakeTransceiver) => {
295
- FAKE_PC.addTransceiver.mockImplementation((trackOrKind) => {
296
- if (trackOrKind === 'audio') {
297
- return fakeTransceiver;
298
- }
299
- return { sender: { dtmf: { insertDTMF: jest.fn() } } };
300
- });
301
- const mc = new MediaConnection(DEFAULT_CONFIG, {
302
- send: {},
303
- receive: {
304
- audio: true,
305
- video: true,
306
- screenShareVideo: true,
307
- },
308
- });
309
- return mc;
310
- };
311
- it('fails if audio transceiver is missing sender', async () => {
312
- const mc = setupMediaConnWithFakeAudioTransceiver({ sender: null });
313
- mc.initializeTransceivers(false);
314
- expect(() => mc.insertDTMF('000')).toThrow(new Error('this.transceivers.audio.sender is null'));
315
- });
316
- it('fails if audio transceiver is missing sender.dtmf', async () => {
317
- const mc = setupMediaConnWithFakeAudioTransceiver({ sender: { dtmf: null } });
318
- mc.initializeTransceivers(false);
319
- expect(() => mc.insertDTMF('000')).toThrow(new Error('this.transceivers.audio.sender.dtmf is null'));
320
- });
321
- describe('calls insertDTMF() with the right arguments', () => {
322
- let mc;
323
- const insertDtmfSpy = jest.fn();
324
- beforeEach(() => {
325
- FAKE_PC.addTransceiver.mockImplementation((trackOrKind, { direction }) => {
326
- if (trackOrKind === FAKE_AUDIO_TRACK && direction === 'sendrecv') {
327
- return {
328
- sender: {
329
- dtmf: {
330
- insertDTMF: insertDtmfSpy,
331
- },
332
- },
333
- };
334
- }
335
- return {};
336
- });
337
- mc = new MediaConnection(DEFAULT_CONFIG, {
338
- send: { audio: FAKE_AUDIO_TRACK },
339
- receive: {
340
- audio: true,
341
- video: false,
342
- screenShareVideo: false,
343
- },
344
- });
345
- mc.initializeTransceivers(false);
346
- });
347
- it('without optional parameters', () => {
348
- mc.insertDTMF('123');
349
- expect(insertDtmfSpy).toBeCalledOnceWith('123', undefined, undefined);
350
- });
351
- it('with only the 1st optional parameter', () => {
352
- mc.insertDTMF('ABC', 100);
353
- expect(insertDtmfSpy).toBeCalledOnceWith('ABC', 100, undefined);
354
- });
355
- it('with all parameters', () => {
356
- mc.insertDTMF('#0A*', 200, 500);
357
- expect(insertDtmfSpy).toBeCalledOnceWith('#0A*', 200, 500);
358
- });
359
- it('converts tone to upper case', () => {
360
- mc.insertDTMF('01abcd*,#', 200, 500);
361
- expect(insertDtmfSpy).toBeCalledOnceWith('01ABCD*,#', 200, 500);
362
- });
363
- });
364
- });
365
- describe('DTMF tone change event', () => {
366
- let fakeDtmfSender;
367
- let mc;
368
- beforeEach(() => {
369
- fakeDtmfSender = {
370
- dtmf: {},
371
- };
372
- FAKE_PC.addTransceiver.mockImplementation((trackOrKind) => {
373
- if (trackOrKind === FAKE_AUDIO_TRACK) {
374
- return { sender: fakeDtmfSender };
375
- }
376
- return {};
377
- });
378
- mc = new MediaConnection(DEFAULT_CONFIG, {
379
- send: { audio: FAKE_AUDIO_TRACK },
380
- receive: {
381
- audio: false,
382
- video: false,
383
- screenShareVideo: false,
384
- },
385
- });
386
- });
387
- afterEach(() => {
388
- FAKE_PC.addTransceiver.mockReset();
389
- });
390
- it('listens for it (outgoing call)', () => {
391
- mc.initializeTransceivers(false);
392
- expect(fakeDtmfSender.dtmf.ontonechange).toBeTruthy();
393
- });
394
- it('listens for it (incoming call)', () => {
395
- mc.initializeTransceivers(true);
396
- const oldMock = FAKE_PC.getTransceivers;
397
- FAKE_PC.getTransceivers = jest.fn().mockReturnValue([
398
- {
399
- sender: fakeDtmfSender,
400
- },
401
- ]);
402
- expect(FAKE_PC.ontrack).toBeTruthy();
403
- if (FAKE_PC.ontrack) {
404
- FAKE_PC.ontrack({
405
- track: { id: 'fake' },
406
- });
407
- }
408
- expect(fakeDtmfSender.dtmf.ontonechange).toBeTruthy();
409
- FAKE_PC.getTransceivers = oldMock;
410
- });
411
- it('is forwarded from RTCPeerConnnections dtmf sender', () => {
412
- const FAKE_TONE_EVENT = { tone: '2468#' };
413
- let toneChangeEventFired = false;
414
- mc.on(Event.DTMF_TONE_CHANGED, (data) => {
415
- expect(data).toEqual(FAKE_TONE_EVENT);
416
- toneChangeEventFired = true;
417
- });
418
- mc.initializeTransceivers(false);
419
- expect(fakeDtmfSender.dtmf.ontonechange).toBeTruthy();
420
- if (fakeDtmfSender.dtmf.ontonechange) {
421
- fakeDtmfSender.dtmf.ontonechange(FAKE_TONE_EVENT);
422
- }
423
- expect(toneChangeEventFired).toEqual(true);
424
- });
425
- });
426
- });
427
- //# sourceMappingURL=MediaConnection.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MediaConnection.test.js","sourceRoot":"","sources":["../../../src/MediaConnection/MediaConnection.test.ts"],"names":[],"mappings":"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"}