@microsoft/live-share-media 2.0.0-internal.7 → 2.0.0-internal.9
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.
- package/bin/cjs/LiveMediaSession.d.ts +2 -2
- package/bin/cjs/LiveMediaSession.d.ts.map +1 -1
- package/bin/cjs/LiveMediaSession.js +6 -6
- package/bin/cjs/LiveMediaSession.js.map +1 -1
- package/bin/cjs/LiveMediaSessionCoordinator.d.ts +38 -7
- package/bin/cjs/LiveMediaSessionCoordinator.d.ts.map +1 -1
- package/bin/cjs/LiveMediaSessionCoordinator.js +90 -9
- package/bin/cjs/LiveMediaSessionCoordinator.js.map +1 -1
- package/bin/cjs/internals/GroupCoordinatorState.d.ts +2 -1
- package/bin/cjs/internals/GroupCoordinatorState.d.ts.map +1 -1
- package/bin/cjs/internals/GroupCoordinatorState.js.map +1 -1
- package/bin/cjs/internals/GroupPlaybackPosition.d.ts +2 -2
- package/bin/cjs/internals/GroupPlaybackPosition.d.ts.map +1 -1
- package/bin/cjs/internals/GroupPlaybackPosition.js +1 -1
- package/bin/cjs/internals/GroupPlaybackPosition.js.map +1 -1
- package/bin/esm/LiveMediaSession.d.ts +2 -2
- package/bin/esm/LiveMediaSession.d.ts.map +1 -1
- package/bin/esm/LiveMediaSession.js +2 -2
- package/bin/esm/LiveMediaSession.js.map +1 -1
- package/bin/esm/LiveMediaSessionCoordinator.d.ts +38 -7
- package/bin/esm/LiveMediaSessionCoordinator.d.ts.map +1 -1
- package/bin/esm/LiveMediaSessionCoordinator.js +91 -10
- package/bin/esm/LiveMediaSessionCoordinator.js.map +1 -1
- package/bin/esm/internals/GroupCoordinatorState.d.ts +2 -1
- package/bin/esm/internals/GroupCoordinatorState.d.ts.map +1 -1
- package/bin/esm/internals/GroupCoordinatorState.js.map +1 -1
- package/bin/esm/internals/GroupPlaybackPosition.d.ts +2 -2
- package/bin/esm/internals/GroupPlaybackPosition.d.ts.map +1 -1
- package/bin/esm/internals/GroupPlaybackPosition.js +1 -1
- package/bin/esm/internals/GroupPlaybackPosition.js.map +1 -1
- package/package.json +3 -3
- package/src/LiveMediaSession.ts +2 -5
- package/src/LiveMediaSessionCoordinator.ts +96 -10
- package/src/internals/GroupCoordinatorState.ts +2 -1
- package/src/internals/GroupPlaybackPosition.ts +4 -4
- package/src/internals/PriorityTimeInterval.ts +76 -0
- package/.mocharc.cjs +0 -12
- package/.nycrc.json +0 -11
- package/bin/test/IMediaPlayer.d.ts +0 -21
- package/bin/test/IMediaPlayer.d.ts.map +0 -1
- package/bin/test/IMediaPlayer.js +0 -7
- package/bin/test/IMediaPlayer.js.map +0 -1
- package/bin/test/LiveMediaSession.d.ts +0 -97
- package/bin/test/LiveMediaSession.d.ts.map +0 -1
- package/bin/test/LiveMediaSession.js +0 -261
- package/bin/test/LiveMediaSession.js.map +0 -1
- package/bin/test/LiveMediaSessionCoordinator.d.ts +0 -296
- package/bin/test/LiveMediaSessionCoordinator.d.ts.map +0 -1
- package/bin/test/LiveMediaSessionCoordinator.js +0 -552
- package/bin/test/LiveMediaSessionCoordinator.js.map +0 -1
- package/bin/test/LiveMediaSessionCoordinatorSuspension.d.ts +0 -20
- package/bin/test/LiveMediaSessionCoordinatorSuspension.d.ts.map +0 -1
- package/bin/test/LiveMediaSessionCoordinatorSuspension.js +0 -28
- package/bin/test/LiveMediaSessionCoordinatorSuspension.js.map +0 -1
- package/bin/test/MediaPlayerSynchronizer.d.ts +0 -204
- package/bin/test/MediaPlayerSynchronizer.d.ts.map +0 -1
- package/bin/test/MediaPlayerSynchronizer.js +0 -574
- package/bin/test/MediaPlayerSynchronizer.js.map +0 -1
- package/bin/test/MediaSessionActionThrottler.d.ts +0 -12
- package/bin/test/MediaSessionActionThrottler.d.ts.map +0 -1
- package/bin/test/MediaSessionActionThrottler.js +0 -14
- package/bin/test/MediaSessionActionThrottler.js.map +0 -1
- package/bin/test/MediaSessionExtensions.d.ts +0 -177
- package/bin/test/MediaSessionExtensions.d.ts.map +0 -1
- package/bin/test/MediaSessionExtensions.js +0 -26
- package/bin/test/MediaSessionExtensions.js.map +0 -1
- package/bin/test/RepeatedActionThrottler.d.ts +0 -20
- package/bin/test/RepeatedActionThrottler.d.ts.map +0 -1
- package/bin/test/RepeatedActionThrottler.js +0 -63
- package/bin/test/RepeatedActionThrottler.js.map +0 -1
- package/bin/test/VolumeManager.d.ts +0 -84
- package/bin/test/VolumeManager.d.ts.map +0 -1
- package/bin/test/VolumeManager.js +0 -175
- package/bin/test/VolumeManager.js.map +0 -1
- package/bin/test/index.d.ts +0 -14
- package/bin/test/index.d.ts.map +0 -1
- package/bin/test/index.js +0 -30
- package/bin/test/index.js.map +0 -1
- package/bin/test/internals/GroupCoordinatorState.d.ts +0 -110
- package/bin/test/internals/GroupCoordinatorState.d.ts.map +0 -1
- package/bin/test/internals/GroupCoordinatorState.js +0 -516
- package/bin/test/internals/GroupCoordinatorState.js.map +0 -1
- package/bin/test/internals/GroupPlaybackPosition.d.ts +0 -71
- package/bin/test/internals/GroupPlaybackPosition.d.ts.map +0 -1
- package/bin/test/internals/GroupPlaybackPosition.js +0 -170
- package/bin/test/internals/GroupPlaybackPosition.js.map +0 -1
- package/bin/test/internals/GroupPlaybackRate.d.ts +0 -38
- package/bin/test/internals/GroupPlaybackRate.d.ts.map +0 -1
- package/bin/test/internals/GroupPlaybackRate.js +0 -59
- package/bin/test/internals/GroupPlaybackRate.js.map +0 -1
- package/bin/test/internals/GroupPlaybackTrack.d.ts +0 -45
- package/bin/test/internals/GroupPlaybackTrack.d.ts.map +0 -1
- package/bin/test/internals/GroupPlaybackTrack.js +0 -122
- package/bin/test/internals/GroupPlaybackTrack.js.map +0 -1
- package/bin/test/internals/GroupPlaybackTrackData.d.ts +0 -40
- package/bin/test/internals/GroupPlaybackTrackData.d.ts.map +0 -1
- package/bin/test/internals/GroupPlaybackTrackData.js +0 -70
- package/bin/test/internals/GroupPlaybackTrackData.js.map +0 -1
- package/bin/test/internals/GroupTransportState.d.ts +0 -52
- package/bin/test/internals/GroupTransportState.d.ts.map +0 -1
- package/bin/test/internals/GroupTransportState.js +0 -120
- package/bin/test/internals/GroupTransportState.js.map +0 -1
- package/bin/test/internals/PriorityTimeInterval.d.ts +0 -33
- package/bin/test/internals/PriorityTimeInterval.d.ts.map +0 -1
- package/bin/test/internals/PriorityTimeInterval.js +0 -45
- package/bin/test/internals/PriorityTimeInterval.js.map +0 -1
- package/bin/test/internals/consts.d.ts +0 -83
- package/bin/test/internals/consts.d.ts.map +0 -1
- package/bin/test/internals/consts.js +0 -92
- package/bin/test/internals/consts.js.map +0 -1
- package/bin/test/internals/errors.d.ts +0 -17
- package/bin/test/internals/errors.d.ts.map +0 -1
- package/bin/test/internals/errors.js +0 -34
- package/bin/test/internals/errors.js.map +0 -1
- package/bin/test/internals/interfaces.d.ts +0 -23
- package/bin/test/internals/interfaces.d.ts.map +0 -1
- package/bin/test/internals/interfaces.js +0 -3
- package/bin/test/internals/interfaces.js.map +0 -1
- package/bin/test/package.json +0 -1
- package/bin/test/test/GroupPlaybackPosition.spec.d.ts +0 -6
- package/bin/test/test/GroupPlaybackPosition.spec.d.ts.map +0 -1
- package/bin/test/test/GroupPlaybackPosition.spec.js +0 -315
- package/bin/test/test/GroupPlaybackPosition.spec.js.map +0 -1
- package/bin/test/test/GroupPlaybackRate.spec.d.ts +0 -6
- package/bin/test/test/GroupPlaybackRate.spec.d.ts.map +0 -1
- package/bin/test/test/GroupPlaybackRate.spec.js +0 -47
- package/bin/test/test/GroupPlaybackRate.spec.js.map +0 -1
- package/bin/test/test/GroupPlaybackTrack.spec.d.ts +0 -6
- package/bin/test/test/GroupPlaybackTrack.spec.d.ts.map +0 -1
- package/bin/test/test/GroupPlaybackTrack.spec.js +0 -171
- package/bin/test/test/GroupPlaybackTrack.spec.js.map +0 -1
- package/bin/test/test/GroupPlaybackTrackData.spec.d.ts +0 -6
- package/bin/test/test/GroupPlaybackTrackData.spec.d.ts.map +0 -1
- package/bin/test/test/GroupPlaybackTrackData.spec.js +0 -63
- package/bin/test/test/GroupPlaybackTrackData.spec.js.map +0 -1
- package/bin/test/test/LiveMediaSession_ManualActionHandler.spec.d.ts +0 -6
- package/bin/test/test/LiveMediaSession_ManualActionHandler.spec.d.ts.map +0 -1
- package/bin/test/test/LiveMediaSession_ManualActionHandler.spec.js +0 -324
- package/bin/test/test/LiveMediaSession_ManualActionHandler.spec.js.map +0 -1
- package/bin/test/test/LiveMediaSession_Synchronizer.spec.d.ts +0 -6
- package/bin/test/test/LiveMediaSession_Synchronizer.spec.d.ts.map +0 -1
- package/bin/test/test/LiveMediaSession_Synchronizer.spec.js +0 -669
- package/bin/test/test/LiveMediaSession_Synchronizer.spec.js.map +0 -1
- package/bin/test/test/PriorityTimeInterval.spec.d.ts +0 -6
- package/bin/test/test/PriorityTimeInterval.spec.d.ts.map +0 -1
- package/bin/test/test/PriorityTimeInterval.spec.js +0 -67
- package/bin/test/test/PriorityTimeInterval.spec.js.map +0 -1
- package/bin/test/test/TestUtils.d.ts +0 -44
- package/bin/test/test/TestUtils.d.ts.map +0 -1
- package/bin/test/test/TestUtils.js +0 -116
- package/bin/test/test/TestUtils.js.map +0 -1
- package/bin/test/test/VolumeManager.spec.d.ts +0 -2
- package/bin/test/test/VolumeManager.spec.d.ts.map +0 -1
- package/bin/test/test/VolumeManager.spec.js +0 -163
- package/bin/test/test/VolumeManager.spec.js.map +0 -1
- package/nyc/junit-report.json +0 -930
- package/nyc/junit-report.xml +0 -59
- package/tsconfig.test.json +0 -9
- package/typedoc.json +0 -10
|
@@ -1,669 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
4
|
-
* Licensed under the Microsoft Live Share SDK License.
|
|
5
|
-
*/
|
|
6
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
7
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
8
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
9
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
10
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
11
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
12
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
13
|
-
});
|
|
14
|
-
};
|
|
15
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
-
const TestUtils_1 = require("./TestUtils");
|
|
17
|
-
const assert_1 = require("assert");
|
|
18
|
-
const internal_1 = require("@fluidframework/test-utils/internal");
|
|
19
|
-
const live_share_1 = require("@microsoft/live-share");
|
|
20
|
-
const internal_2 = require("@microsoft/live-share/internal");
|
|
21
|
-
const MediaPlayerSynchronizer_1 = require("../MediaPlayerSynchronizer");
|
|
22
|
-
const test_utils_1 = require("@live-share-private/test-utils");
|
|
23
|
-
function getObjects(getTestObjectProvider_1) {
|
|
24
|
-
return __awaiter(this, arguments, void 0, function* (getTestObjectProvider, updateInterval = 10000, timestampProvider = new live_share_1.LocalTimestampProvider()) {
|
|
25
|
-
const host = live_share_1.TestLiveShareHost.create();
|
|
26
|
-
let liveRuntime1 = new internal_2.MockLiveShareRuntime(false, updateInterval, host, timestampProvider);
|
|
27
|
-
let liveRuntime2 = new internal_2.MockLiveShareRuntime(false, updateInterval, host, timestampProvider);
|
|
28
|
-
let ObjectProxy1 = (0, internal_2.getLiveDataObjectKind)(TestUtils_1.TestLiveMediaSession, liveRuntime1);
|
|
29
|
-
let ObjectProxy2 = (0, internal_2.getLiveDataObjectKind)(TestUtils_1.TestLiveMediaSession, liveRuntime2);
|
|
30
|
-
yield liveRuntime1.start();
|
|
31
|
-
yield liveRuntime2.start();
|
|
32
|
-
let provider = getTestObjectProvider();
|
|
33
|
-
let container1 = yield provider.createContainer(ObjectProxy1.factory);
|
|
34
|
-
let object1 = yield (0, internal_1.getContainerEntryPointBackCompat)(container1);
|
|
35
|
-
object1.coordinator.positionUpdateInterval = 0.02;
|
|
36
|
-
let container2 = yield provider.loadContainer(ObjectProxy2.factory);
|
|
37
|
-
let object2 = yield (0, internal_1.getContainerEntryPointBackCompat)(container2);
|
|
38
|
-
object2.coordinator.positionUpdateInterval = 0.02;
|
|
39
|
-
// need to be connected to send signals
|
|
40
|
-
if (!container1.connect) {
|
|
41
|
-
yield new Promise((resolve) => container1.once("connected", resolve));
|
|
42
|
-
}
|
|
43
|
-
if (!container2.connect) {
|
|
44
|
-
yield new Promise((resolve) => container2.once("connected", resolve));
|
|
45
|
-
}
|
|
46
|
-
const setObjectRoles = (clientId, roles) => __awaiter(this, void 0, void 0, function* () {
|
|
47
|
-
host.addClient(clientId, roles);
|
|
48
|
-
});
|
|
49
|
-
const dispose = () => {
|
|
50
|
-
var _a, _b;
|
|
51
|
-
object1.dispose();
|
|
52
|
-
object2.dispose();
|
|
53
|
-
(_a = container1.disconnect) === null || _a === void 0 ? void 0 : _a.call(container1);
|
|
54
|
-
(_b = container2.disconnect) === null || _b === void 0 ? void 0 : _b.call(container2);
|
|
55
|
-
liveRuntime1.stop();
|
|
56
|
-
liveRuntime2.stop();
|
|
57
|
-
};
|
|
58
|
-
return {
|
|
59
|
-
object1,
|
|
60
|
-
object2,
|
|
61
|
-
dispose,
|
|
62
|
-
setObjectRoles,
|
|
63
|
-
};
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
(0, test_utils_1.describeCompat)("LiveMediaSession Using MediaPlayerSynchronizer", (getTestObjectProvider) => {
|
|
67
|
-
it("should play and pause on both", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
68
|
-
const { object1, object2, dispose } = yield getObjects(getTestObjectProvider);
|
|
69
|
-
const testMediaPlayer1 = new TestUtils_1.TestMediaPlayer();
|
|
70
|
-
const testMediaPlayer2 = new TestUtils_1.TestMediaPlayer();
|
|
71
|
-
yield object1.initialize();
|
|
72
|
-
yield object2.initialize();
|
|
73
|
-
const expectedEventOrder = [
|
|
74
|
-
{
|
|
75
|
-
action: "play",
|
|
76
|
-
clientId: yield object1.clientId(),
|
|
77
|
-
local: false,
|
|
78
|
-
source: "user",
|
|
79
|
-
},
|
|
80
|
-
{
|
|
81
|
-
action: "pause",
|
|
82
|
-
clientId: yield object2.clientId(),
|
|
83
|
-
local: true,
|
|
84
|
-
source: "user",
|
|
85
|
-
},
|
|
86
|
-
];
|
|
87
|
-
const sync1 = object1.synchronize(testMediaPlayer1);
|
|
88
|
-
const sync2 = object2.synchronize(testMediaPlayer2);
|
|
89
|
-
const eventAssertPromise = assertExpectedEvents(sync2, expectedEventOrder);
|
|
90
|
-
yield sync1.play();
|
|
91
|
-
yield assertActionOccurred([testMediaPlayer1, testMediaPlayer2], "play");
|
|
92
|
-
yield (0, internal_2.waitForDelay)(100);
|
|
93
|
-
yield sync2.pause();
|
|
94
|
-
yield assertActionOccurred([testMediaPlayer1, testMediaPlayer2], "pause");
|
|
95
|
-
(0, assert_1.strict)(isSynced(testMediaPlayer1, testMediaPlayer2, 0.1));
|
|
96
|
-
yield eventAssertPromise;
|
|
97
|
-
dispose();
|
|
98
|
-
}));
|
|
99
|
-
it("should seek forward and play then pause", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
100
|
-
const { object1, object2, dispose } = yield getObjects(getTestObjectProvider);
|
|
101
|
-
const testMediaPlayer1 = new TestUtils_1.TestMediaPlayer();
|
|
102
|
-
const testMediaPlayer2 = new TestUtils_1.TestMediaPlayer();
|
|
103
|
-
yield object1.initialize();
|
|
104
|
-
yield object2.initialize();
|
|
105
|
-
const expectedEventOrder = [
|
|
106
|
-
{
|
|
107
|
-
action: "seekto",
|
|
108
|
-
clientId: yield object1.clientId(),
|
|
109
|
-
local: false,
|
|
110
|
-
source: "user",
|
|
111
|
-
},
|
|
112
|
-
{
|
|
113
|
-
action: "play",
|
|
114
|
-
clientId: yield object1.clientId(),
|
|
115
|
-
local: false,
|
|
116
|
-
source: "user",
|
|
117
|
-
},
|
|
118
|
-
{
|
|
119
|
-
action: "pause",
|
|
120
|
-
clientId: yield object2.clientId(),
|
|
121
|
-
local: true,
|
|
122
|
-
source: "user",
|
|
123
|
-
},
|
|
124
|
-
];
|
|
125
|
-
const sync1 = object1.synchronize(testMediaPlayer1);
|
|
126
|
-
const sync2 = object2.synchronize(testMediaPlayer2);
|
|
127
|
-
const eventAssertPromise = assertExpectedEvents(sync2, expectedEventOrder);
|
|
128
|
-
yield sync1.seekTo(2);
|
|
129
|
-
yield sync1.play();
|
|
130
|
-
yield assertActionOccurred([testMediaPlayer1, testMediaPlayer2], "play");
|
|
131
|
-
yield (0, internal_2.waitForDelay)(100);
|
|
132
|
-
yield sync2.pause();
|
|
133
|
-
yield assertActionOccurred([testMediaPlayer1, testMediaPlayer2], "pause");
|
|
134
|
-
(0, assert_1.strict)(isSynced(testMediaPlayer1, testMediaPlayer2, 2.1));
|
|
135
|
-
yield eventAssertPromise;
|
|
136
|
-
dispose();
|
|
137
|
-
}));
|
|
138
|
-
it("should play then seek forward then pause", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
139
|
-
const { object1, object2, dispose } = yield getObjects(getTestObjectProvider);
|
|
140
|
-
const testMediaPlayer1 = new TestUtils_1.TestMediaPlayer();
|
|
141
|
-
const testMediaPlayer2 = new TestUtils_1.TestMediaPlayer();
|
|
142
|
-
yield object1.initialize();
|
|
143
|
-
yield object2.initialize();
|
|
144
|
-
const expectedEventOrder = [
|
|
145
|
-
{
|
|
146
|
-
action: "play",
|
|
147
|
-
clientId: yield object1.clientId(),
|
|
148
|
-
local: false,
|
|
149
|
-
source: "user",
|
|
150
|
-
},
|
|
151
|
-
{
|
|
152
|
-
action: "seekto",
|
|
153
|
-
clientId: yield object1.clientId(),
|
|
154
|
-
local: false,
|
|
155
|
-
source: "user",
|
|
156
|
-
},
|
|
157
|
-
{
|
|
158
|
-
action: "pause",
|
|
159
|
-
clientId: yield object2.clientId(),
|
|
160
|
-
local: true,
|
|
161
|
-
source: "user",
|
|
162
|
-
},
|
|
163
|
-
];
|
|
164
|
-
const sync1 = object1.synchronize(testMediaPlayer1);
|
|
165
|
-
const sync2 = object2.synchronize(testMediaPlayer2);
|
|
166
|
-
const eventAssertPromise = assertExpectedEvents(sync2, expectedEventOrder);
|
|
167
|
-
yield sync1.play();
|
|
168
|
-
yield assertActionOccurred([testMediaPlayer1, testMediaPlayer2], "play");
|
|
169
|
-
yield (0, internal_2.waitForDelay)(100);
|
|
170
|
-
yield sync1.seekTo(2);
|
|
171
|
-
yield (0, internal_2.waitForDelay)(100);
|
|
172
|
-
yield sync2.pause();
|
|
173
|
-
yield assertActionOccurred([testMediaPlayer1, testMediaPlayer2], "pause");
|
|
174
|
-
(0, assert_1.strict)(isSynced(testMediaPlayer1, testMediaPlayer2, 2.1));
|
|
175
|
-
yield eventAssertPromise;
|
|
176
|
-
dispose();
|
|
177
|
-
}));
|
|
178
|
-
it("should play then seek backwards then keep playing", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
179
|
-
const { object1, object2, dispose } = yield getObjects(getTestObjectProvider);
|
|
180
|
-
const testMediaPlayer1 = new TestUtils_1.TestMediaPlayer();
|
|
181
|
-
const testMediaPlayer2 = new TestUtils_1.TestMediaPlayer();
|
|
182
|
-
yield object1.initialize();
|
|
183
|
-
yield object2.initialize();
|
|
184
|
-
const sync1 = object1.synchronize(testMediaPlayer1);
|
|
185
|
-
const sync2 = object2.synchronize(testMediaPlayer2);
|
|
186
|
-
yield sync1.play();
|
|
187
|
-
yield assertActionOccurred([testMediaPlayer1, testMediaPlayer2], "play");
|
|
188
|
-
yield (0, internal_2.waitForDelay)(200);
|
|
189
|
-
yield sync2.seekTo(0.05);
|
|
190
|
-
yield (0, internal_2.waitForDelay)(100);
|
|
191
|
-
(0, assert_1.strict)(isSynced(testMediaPlayer1, testMediaPlayer2, 0.15));
|
|
192
|
-
dispose();
|
|
193
|
-
}));
|
|
194
|
-
it("should change playback rate", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
195
|
-
const { object1, object2, dispose } = yield getObjects(getTestObjectProvider);
|
|
196
|
-
const testMediaPlayer1 = new TestUtils_1.TestMediaPlayer();
|
|
197
|
-
const testMediaPlayer2 = new TestUtils_1.TestMediaPlayer();
|
|
198
|
-
yield object1.initialize();
|
|
199
|
-
yield object2.initialize();
|
|
200
|
-
const expectedEventOrder = [
|
|
201
|
-
{
|
|
202
|
-
action: "play",
|
|
203
|
-
clientId: yield object1.clientId(),
|
|
204
|
-
local: false,
|
|
205
|
-
source: "user",
|
|
206
|
-
},
|
|
207
|
-
{
|
|
208
|
-
action: "ratechange",
|
|
209
|
-
clientId: yield object2.clientId(),
|
|
210
|
-
local: true,
|
|
211
|
-
source: "user",
|
|
212
|
-
},
|
|
213
|
-
];
|
|
214
|
-
const sync1 = object1.synchronize(testMediaPlayer1);
|
|
215
|
-
const sync2 = object2.synchronize(testMediaPlayer2);
|
|
216
|
-
const eventAssertPromise = assertExpectedEvents(sync2, expectedEventOrder);
|
|
217
|
-
yield sync1.play();
|
|
218
|
-
yield assertActionOccurred([testMediaPlayer1, testMediaPlayer2], "play");
|
|
219
|
-
yield sync2.setPlaybackRate(2);
|
|
220
|
-
yield assertActionOccurred([testMediaPlayer1, testMediaPlayer2], "ratechange");
|
|
221
|
-
yield (0, internal_2.waitForDelay)(100);
|
|
222
|
-
(0, assert_1.strict)(isSynced(testMediaPlayer1, testMediaPlayer2, 0.2));
|
|
223
|
-
yield eventAssertPromise;
|
|
224
|
-
dispose();
|
|
225
|
-
}));
|
|
226
|
-
it("should only let organizer play, pause, seek", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
227
|
-
const { object1, object2, dispose, setObjectRoles } = yield getObjects(getTestObjectProvider);
|
|
228
|
-
setObjectRoles(yield object1.clientId(), [
|
|
229
|
-
live_share_1.UserMeetingRole.organizer,
|
|
230
|
-
]);
|
|
231
|
-
setObjectRoles(yield object2.clientId(), [
|
|
232
|
-
live_share_1.UserMeetingRole.attendee,
|
|
233
|
-
]);
|
|
234
|
-
const testMediaPlayer1 = new TestUtils_1.TestMediaPlayer();
|
|
235
|
-
const testMediaPlayer2 = new TestUtils_1.TestMediaPlayer();
|
|
236
|
-
yield object1.initialize([live_share_1.UserMeetingRole.organizer]);
|
|
237
|
-
yield object2.initialize([live_share_1.UserMeetingRole.organizer]);
|
|
238
|
-
const sync1 = object1.synchronize(testMediaPlayer1);
|
|
239
|
-
const sync2 = object2.synchronize(testMediaPlayer2);
|
|
240
|
-
yield assertRoleError(() => sync2.play());
|
|
241
|
-
yield assertRoleError(() => sync2.seekTo(100));
|
|
242
|
-
yield assertRoleError(() => sync2.pause());
|
|
243
|
-
yield sync1.play();
|
|
244
|
-
yield assertActionOccurred([testMediaPlayer1, testMediaPlayer2], "play");
|
|
245
|
-
yield sync1.pause();
|
|
246
|
-
yield assertActionOccurred([testMediaPlayer1, testMediaPlayer2], "pause");
|
|
247
|
-
yield sync1.seekTo(100);
|
|
248
|
-
// wait till the next event loop
|
|
249
|
-
yield (0, internal_2.waitForDelay)(1);
|
|
250
|
-
(0, assert_1.strict)(isSynced(testMediaPlayer1, testMediaPlayer2, 100));
|
|
251
|
-
dispose();
|
|
252
|
-
}));
|
|
253
|
-
it("should setTrack", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
254
|
-
const { object1, object2, dispose } = yield getObjects(getTestObjectProvider);
|
|
255
|
-
const testMediaPlayer1 = new TestUtils_1.TestMediaPlayer();
|
|
256
|
-
const testMediaPlayer2 = new TestUtils_1.TestMediaPlayer();
|
|
257
|
-
yield object1.initialize([live_share_1.UserMeetingRole.organizer]);
|
|
258
|
-
yield object2.initialize([live_share_1.UserMeetingRole.organizer]);
|
|
259
|
-
const expectedEventOrder = [
|
|
260
|
-
{
|
|
261
|
-
action: "play",
|
|
262
|
-
clientId: yield object1.clientId(),
|
|
263
|
-
local: false,
|
|
264
|
-
source: "user",
|
|
265
|
-
},
|
|
266
|
-
{
|
|
267
|
-
action: "settrack",
|
|
268
|
-
clientId: yield object1.clientId(),
|
|
269
|
-
local: false,
|
|
270
|
-
source: "user",
|
|
271
|
-
},
|
|
272
|
-
];
|
|
273
|
-
const sync1 = object1.synchronize(testMediaPlayer1);
|
|
274
|
-
const sync2 = object2.synchronize(testMediaPlayer2);
|
|
275
|
-
const eventAssertPromise = assertExpectedEvents(sync2, expectedEventOrder);
|
|
276
|
-
yield sync1.play();
|
|
277
|
-
yield assertActionOccurred([testMediaPlayer1, testMediaPlayer2], "play");
|
|
278
|
-
yield (0, internal_2.waitForDelay)(100);
|
|
279
|
-
(0, assert_1.strict)(isSynced(testMediaPlayer1, testMediaPlayer2, 0.1));
|
|
280
|
-
const metadata = {
|
|
281
|
-
trackIdentifier: "testTrackId",
|
|
282
|
-
liveStream: false,
|
|
283
|
-
album: "",
|
|
284
|
-
artist: "",
|
|
285
|
-
artwork: [],
|
|
286
|
-
title: "",
|
|
287
|
-
};
|
|
288
|
-
yield sync1.setTrack(metadata);
|
|
289
|
-
yield assertActionOccurred([testMediaPlayer1, testMediaPlayer2], "load");
|
|
290
|
-
yield eventAssertPromise;
|
|
291
|
-
dispose();
|
|
292
|
-
}));
|
|
293
|
-
it("should beginSeek and suspend till endSeek", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
294
|
-
const { object1, object2, dispose } = yield getObjects(getTestObjectProvider);
|
|
295
|
-
const testMediaPlayer1 = new TestUtils_1.TestMediaPlayer();
|
|
296
|
-
const testMediaPlayer2 = new TestUtils_1.TestMediaPlayer();
|
|
297
|
-
yield object1.initialize([live_share_1.UserMeetingRole.organizer]);
|
|
298
|
-
yield object2.initialize([live_share_1.UserMeetingRole.organizer]);
|
|
299
|
-
const object1ExpectedEventOrder = [
|
|
300
|
-
{
|
|
301
|
-
action: "play",
|
|
302
|
-
clientId: yield object2.clientId(),
|
|
303
|
-
local: false,
|
|
304
|
-
source: "user",
|
|
305
|
-
ignoreReason: "localusersuspended", // emitted by group action, but ignored with reason "localusersuspended".
|
|
306
|
-
},
|
|
307
|
-
{
|
|
308
|
-
action: "seekto",
|
|
309
|
-
clientId: yield object1.clientId(),
|
|
310
|
-
local: true,
|
|
311
|
-
source: "user",
|
|
312
|
-
},
|
|
313
|
-
];
|
|
314
|
-
const object2ExpectedEventOrder = [
|
|
315
|
-
{
|
|
316
|
-
action: "play",
|
|
317
|
-
clientId: yield object2.clientId(),
|
|
318
|
-
local: true,
|
|
319
|
-
source: "user",
|
|
320
|
-
},
|
|
321
|
-
{
|
|
322
|
-
action: "seekto",
|
|
323
|
-
clientId: yield object1.clientId(),
|
|
324
|
-
local: false,
|
|
325
|
-
source: "user",
|
|
326
|
-
},
|
|
327
|
-
];
|
|
328
|
-
const sync1 = object1.synchronize(testMediaPlayer1);
|
|
329
|
-
const sync2 = object2.synchronize(testMediaPlayer2);
|
|
330
|
-
const eventAssertPromise1 = assertExpectedEvents(sync1, object1ExpectedEventOrder);
|
|
331
|
-
const eventAssertPromise2 = assertExpectedEvents(sync2, object2ExpectedEventOrder);
|
|
332
|
-
yield sync1.beginSeek();
|
|
333
|
-
yield sync2.play();
|
|
334
|
-
yield assertActionOccurred([testMediaPlayer2], "play");
|
|
335
|
-
yield (0, internal_2.waitForDelay)(100);
|
|
336
|
-
// should not be synced
|
|
337
|
-
isAtExpectedTime(testMediaPlayer1, 0);
|
|
338
|
-
isAtExpectedTime(testMediaPlayer2, 0.1);
|
|
339
|
-
yield sync1.endSeek(0.4);
|
|
340
|
-
// wait till the next event loop
|
|
341
|
-
yield (0, internal_2.waitForDelay)(1);
|
|
342
|
-
(0, assert_1.strict)(isSynced(testMediaPlayer1, testMediaPlayer2, 0.4));
|
|
343
|
-
yield eventAssertPromise1;
|
|
344
|
-
yield eventAssertPromise2;
|
|
345
|
-
dispose();
|
|
346
|
-
}));
|
|
347
|
-
it("should not load twice", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
348
|
-
const { object1, object2, dispose } = yield getObjects(getTestObjectProvider);
|
|
349
|
-
const testMediaPlayer1 = new TestUtils_1.TestMediaPlayer();
|
|
350
|
-
yield object1.initialize([live_share_1.UserMeetingRole.organizer]);
|
|
351
|
-
const expectedEventOrder = [
|
|
352
|
-
{
|
|
353
|
-
action: "settrack",
|
|
354
|
-
clientId: yield object1.clientId(),
|
|
355
|
-
local: true,
|
|
356
|
-
source: "user",
|
|
357
|
-
},
|
|
358
|
-
{
|
|
359
|
-
action: "play",
|
|
360
|
-
clientId: yield object1.clientId(),
|
|
361
|
-
local: true,
|
|
362
|
-
source: "user",
|
|
363
|
-
},
|
|
364
|
-
];
|
|
365
|
-
const sync1 = object1.synchronize(testMediaPlayer1);
|
|
366
|
-
const eventAssertPromise = assertExpectedEvents(sync1, expectedEventOrder);
|
|
367
|
-
const metadata = {
|
|
368
|
-
trackIdentifier: "testTrackId",
|
|
369
|
-
liveStream: false,
|
|
370
|
-
album: "",
|
|
371
|
-
artist: "",
|
|
372
|
-
artwork: [],
|
|
373
|
-
title: "",
|
|
374
|
-
};
|
|
375
|
-
yield sync1.setTrack(metadata, [{ position: 1000 }]);
|
|
376
|
-
yield assertActionOccurred([testMediaPlayer1], "load");
|
|
377
|
-
yield sync1.play();
|
|
378
|
-
yield assertActionOccurred([testMediaPlayer1], "play");
|
|
379
|
-
yield eventAssertPromise;
|
|
380
|
-
dispose();
|
|
381
|
-
}));
|
|
382
|
-
it("should suspend at waitpoint with DIFFERENT player for ad", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
383
|
-
const { object1, object2, dispose } = yield getObjects(getTestObjectProvider);
|
|
384
|
-
const testMediaPlayer1 = new TestUtils_1.TestMediaPlayer();
|
|
385
|
-
const testAdPlayer1 = new TestUtils_1.TestMediaPlayer();
|
|
386
|
-
const testMediaPlayer2 = new TestUtils_1.TestMediaPlayer();
|
|
387
|
-
const testAdPlayer2 = new TestUtils_1.TestMediaPlayer();
|
|
388
|
-
yield object1.initialize([live_share_1.UserMeetingRole.organizer]);
|
|
389
|
-
yield object2.initialize([live_share_1.UserMeetingRole.organizer]);
|
|
390
|
-
const sync1 = object1.synchronize(testMediaPlayer1);
|
|
391
|
-
object2.synchronize(testMediaPlayer2);
|
|
392
|
-
const waitPoints = [{ position: 0.7 }];
|
|
393
|
-
const metadata = {
|
|
394
|
-
trackIdentifier: "testTrackId",
|
|
395
|
-
liveStream: false,
|
|
396
|
-
album: "",
|
|
397
|
-
artist: "",
|
|
398
|
-
artwork: [],
|
|
399
|
-
title: "",
|
|
400
|
-
};
|
|
401
|
-
const adFinished1 = new internal_2.Deferred();
|
|
402
|
-
const adFinished2 = new internal_2.Deferred();
|
|
403
|
-
object1.setActionHandler("wait", (details) => __awaiter(void 0, void 0, void 0, function* () {
|
|
404
|
-
// pause content
|
|
405
|
-
testMediaPlayer1.pause();
|
|
406
|
-
testAdPlayer1.src = "testAdId";
|
|
407
|
-
// load ad
|
|
408
|
-
testAdPlayer1.load();
|
|
409
|
-
yield assertActionOccurred([testAdPlayer1], "load");
|
|
410
|
-
// play ad
|
|
411
|
-
testAdPlayer1.play();
|
|
412
|
-
yield assertActionOccurred([testAdPlayer1], "play");
|
|
413
|
-
yield (0, internal_2.waitForDelay)(500);
|
|
414
|
-
(0, assert_1.strict)(isAtExpectedTime(testAdPlayer1, 0.5));
|
|
415
|
-
adFinished1.resolve();
|
|
416
|
-
details.suspension.end();
|
|
417
|
-
}));
|
|
418
|
-
object2.setActionHandler("wait", (details) => __awaiter(void 0, void 0, void 0, function* () {
|
|
419
|
-
// pause content
|
|
420
|
-
testMediaPlayer2.pause();
|
|
421
|
-
testAdPlayer2.src = "testAdId";
|
|
422
|
-
// load ad
|
|
423
|
-
testAdPlayer2.load();
|
|
424
|
-
yield assertActionOccurred([testAdPlayer2], "load");
|
|
425
|
-
// play ad
|
|
426
|
-
testAdPlayer2.play();
|
|
427
|
-
yield assertActionOccurred([testAdPlayer2], "play");
|
|
428
|
-
yield (0, internal_2.waitForDelay)(500);
|
|
429
|
-
(0, assert_1.strict)(isAtExpectedTime(testAdPlayer2, 0.5));
|
|
430
|
-
adFinished2.resolve();
|
|
431
|
-
details.suspension.end();
|
|
432
|
-
}));
|
|
433
|
-
yield sync1.setTrack(metadata, waitPoints);
|
|
434
|
-
yield assertActionOccurred([testMediaPlayer1, testMediaPlayer2], "load");
|
|
435
|
-
yield sync1.play();
|
|
436
|
-
yield assertActionOccurred([testMediaPlayer1, testMediaPlayer2], "play");
|
|
437
|
-
// expect pause from waitpoint actionHandler
|
|
438
|
-
yield assertActionOccurred([testMediaPlayer1, testMediaPlayer2], "pause");
|
|
439
|
-
// wait for ad to play
|
|
440
|
-
yield Promise.all([adFinished1.promise, adFinished2.promise]);
|
|
441
|
-
(0, assert_1.strict)(testMediaPlayer1.src === metadata.trackIdentifier);
|
|
442
|
-
(0, assert_1.strict)(testMediaPlayer2.src === metadata.trackIdentifier);
|
|
443
|
-
(0, assert_1.strict)(testMediaPlayer1.paused === true);
|
|
444
|
-
(0, assert_1.strict)(testMediaPlayer2.paused === true);
|
|
445
|
-
// sdk checks for waitpoints ever 500ms
|
|
446
|
-
const waitPointVariance = 0.5;
|
|
447
|
-
(0, assert_1.strict)(isSynced(testMediaPlayer1, testMediaPlayer2, 0.7, waitPointVariance));
|
|
448
|
-
dispose();
|
|
449
|
-
}));
|
|
450
|
-
it("should suspend at waitpoint with SAME player for ad", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
451
|
-
// Using the same player for an ad is not recommended
|
|
452
|
-
// see unit test titled "should suspend at waitpoint with DIFFERENT player for ad" for recommended approach
|
|
453
|
-
// it can still be done with the same player, described below
|
|
454
|
-
const { object1, object2, dispose } = yield getObjects(getTestObjectProvider);
|
|
455
|
-
const testMediaPlayer1 = new TestUtils_1.TestMediaPlayer();
|
|
456
|
-
const testMediaPlayer2 = new TestUtils_1.TestMediaPlayer();
|
|
457
|
-
yield object1.initialize([live_share_1.UserMeetingRole.organizer]);
|
|
458
|
-
yield object2.initialize([live_share_1.UserMeetingRole.organizer]);
|
|
459
|
-
const sync1 = object1.synchronize(testMediaPlayer1);
|
|
460
|
-
object2.synchronize(testMediaPlayer2);
|
|
461
|
-
const waitPoints = [{ position: 0.7 }];
|
|
462
|
-
const metadata = {
|
|
463
|
-
trackIdentifier: "testTrackId",
|
|
464
|
-
liveStream: false,
|
|
465
|
-
album: "",
|
|
466
|
-
artist: "",
|
|
467
|
-
artwork: [],
|
|
468
|
-
title: "",
|
|
469
|
-
};
|
|
470
|
-
const adFinished1 = new internal_2.Deferred();
|
|
471
|
-
const adFinished2 = new internal_2.Deferred();
|
|
472
|
-
object1.setActionHandler("wait", (details) => __awaiter(void 0, void 0, void 0, function* () {
|
|
473
|
-
testMediaPlayer1.src = "testAdId";
|
|
474
|
-
// load ad
|
|
475
|
-
testMediaPlayer1.load();
|
|
476
|
-
yield assertActionOccurred([testMediaPlayer1], "load");
|
|
477
|
-
// play ad
|
|
478
|
-
testMediaPlayer1.play();
|
|
479
|
-
yield assertActionOccurred([testMediaPlayer1], "play");
|
|
480
|
-
yield (0, internal_2.waitForDelay)(500);
|
|
481
|
-
(0, assert_1.strict)(isAtExpectedTime(testMediaPlayer1, 0.5));
|
|
482
|
-
adFinished1.resolve();
|
|
483
|
-
// MUST reset src and currentTime if using the same mediaPlayer before ending the suspension
|
|
484
|
-
testMediaPlayer1.src = metadata.trackIdentifier;
|
|
485
|
-
testMediaPlayer1.load(); // will put in paused state in test implementation
|
|
486
|
-
testMediaPlayer1.currentTime =
|
|
487
|
-
details.suspension.waitPoint.position;
|
|
488
|
-
details.suspension.end();
|
|
489
|
-
}));
|
|
490
|
-
object2.setActionHandler("wait", (details) => __awaiter(void 0, void 0, void 0, function* () {
|
|
491
|
-
testMediaPlayer2.src = "testAdId";
|
|
492
|
-
// load ad
|
|
493
|
-
testMediaPlayer2.load();
|
|
494
|
-
yield assertActionOccurred([testMediaPlayer2], "load");
|
|
495
|
-
// play ad
|
|
496
|
-
testMediaPlayer2.play();
|
|
497
|
-
yield assertActionOccurred([testMediaPlayer2], "play");
|
|
498
|
-
yield (0, internal_2.waitForDelay)(500);
|
|
499
|
-
(0, assert_1.strict)(isAtExpectedTime(testMediaPlayer2, 0.5));
|
|
500
|
-
adFinished2.resolve();
|
|
501
|
-
// MUST reset src and currentTime if using the same mediaPlayer before ending the suspension
|
|
502
|
-
testMediaPlayer2.src = metadata.trackIdentifier;
|
|
503
|
-
testMediaPlayer2.load(); // will put in paused state in test implementation
|
|
504
|
-
testMediaPlayer2.currentTime =
|
|
505
|
-
details.suspension.waitPoint.position;
|
|
506
|
-
details.suspension.end();
|
|
507
|
-
}));
|
|
508
|
-
yield sync1.setTrack(metadata, waitPoints);
|
|
509
|
-
yield assertActionOccurred([testMediaPlayer1, testMediaPlayer2], "load");
|
|
510
|
-
yield sync1.play();
|
|
511
|
-
yield assertActionOccurred([testMediaPlayer1, testMediaPlayer2], "play");
|
|
512
|
-
// wait for ad to play
|
|
513
|
-
yield Promise.all([adFinished1.promise, adFinished2.promise]);
|
|
514
|
-
// check original src was loaded again
|
|
515
|
-
yield assertActionOccurred([testMediaPlayer1, testMediaPlayer2], "load");
|
|
516
|
-
(0, assert_1.strict)(testMediaPlayer1.src === metadata.trackIdentifier);
|
|
517
|
-
(0, assert_1.strict)(testMediaPlayer2.src === metadata.trackIdentifier);
|
|
518
|
-
// checked should be paused at waitpoint
|
|
519
|
-
(0, assert_1.strict)(testMediaPlayer1.paused === true);
|
|
520
|
-
(0, assert_1.strict)(testMediaPlayer2.paused === true);
|
|
521
|
-
// sdk checks for waitpoints ever 500ms, but not specifying the variance here,
|
|
522
|
-
// because video will roll back to waitpoint position (rewinding up to 500ms)
|
|
523
|
-
(0, assert_1.strict)(isSynced(testMediaPlayer1, testMediaPlayer2, 0.7));
|
|
524
|
-
dispose();
|
|
525
|
-
}));
|
|
526
|
-
it("client should catchup to leader", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
527
|
-
const { object1, object2, dispose } = yield getObjects(getTestObjectProvider, 10000, new TestUtils_1.TestMediaTimeStampProvider());
|
|
528
|
-
const catchupTriggered = new internal_2.Deferred();
|
|
529
|
-
const metadata = {
|
|
530
|
-
trackIdentifier: "testTrackId",
|
|
531
|
-
liveStream: false,
|
|
532
|
-
album: "",
|
|
533
|
-
artist: "",
|
|
534
|
-
artwork: [],
|
|
535
|
-
title: "",
|
|
536
|
-
};
|
|
537
|
-
const testMediaPlayer1 = new TestUtils_1.TestMediaPlayer();
|
|
538
|
-
const testMediaPlayer2 = new TestUtils_1.TestMediaPlayer((currentTime) => {
|
|
539
|
-
console.log("currentTime", currentTime);
|
|
540
|
-
if (isSynced(testMediaPlayer1, testMediaPlayer2, testMediaPlayer1.currentTime) &&
|
|
541
|
-
currentTime >= 1) {
|
|
542
|
-
catchupTriggered.resolve();
|
|
543
|
-
}
|
|
544
|
-
});
|
|
545
|
-
yield object1.initialize();
|
|
546
|
-
yield object2.initialize();
|
|
547
|
-
const object1ExpectedEventOrder = [
|
|
548
|
-
{
|
|
549
|
-
action: "settrack",
|
|
550
|
-
clientId: yield object1.clientId(),
|
|
551
|
-
local: true,
|
|
552
|
-
source: "user",
|
|
553
|
-
},
|
|
554
|
-
{
|
|
555
|
-
action: "play",
|
|
556
|
-
clientId: yield object1.clientId(),
|
|
557
|
-
local: true,
|
|
558
|
-
source: "user",
|
|
559
|
-
},
|
|
560
|
-
];
|
|
561
|
-
const object2ExpectedEventOrder = [
|
|
562
|
-
{
|
|
563
|
-
action: "settrack",
|
|
564
|
-
clientId: yield object1.clientId(),
|
|
565
|
-
local: false,
|
|
566
|
-
source: "user",
|
|
567
|
-
},
|
|
568
|
-
{
|
|
569
|
-
action: "play",
|
|
570
|
-
clientId: yield object1.clientId(),
|
|
571
|
-
local: false,
|
|
572
|
-
source: "user",
|
|
573
|
-
},
|
|
574
|
-
{
|
|
575
|
-
action: "catchup",
|
|
576
|
-
clientId: yield object2.clientId(),
|
|
577
|
-
local: true,
|
|
578
|
-
source: "system",
|
|
579
|
-
},
|
|
580
|
-
{
|
|
581
|
-
action: "play",
|
|
582
|
-
clientId: yield object1.clientId(),
|
|
583
|
-
local: false,
|
|
584
|
-
source: "system",
|
|
585
|
-
},
|
|
586
|
-
];
|
|
587
|
-
const sync1 = object1.synchronize(testMediaPlayer1);
|
|
588
|
-
const sync2 = object2.synchronize(testMediaPlayer2);
|
|
589
|
-
const eventAssertPromise1 = assertExpectedEvents(sync1, object1ExpectedEventOrder);
|
|
590
|
-
const eventAssertPromise2 = assertExpectedEvents(sync2, object2ExpectedEventOrder);
|
|
591
|
-
yield sync1.setTrack(metadata);
|
|
592
|
-
yield assertActionOccurred([testMediaPlayer1, testMediaPlayer2], "load");
|
|
593
|
-
yield sync1.play();
|
|
594
|
-
// simulate testMediaPlayer2 getting behind
|
|
595
|
-
setInterval(() => {
|
|
596
|
-
testMediaPlayer2.pause();
|
|
597
|
-
}, 100);
|
|
598
|
-
yield catchupTriggered.promise;
|
|
599
|
-
yield eventAssertPromise1;
|
|
600
|
-
yield eventAssertPromise2;
|
|
601
|
-
dispose();
|
|
602
|
-
}));
|
|
603
|
-
});
|
|
604
|
-
function isSynced(player1, player2, expectedTime, maxVariance = 10) {
|
|
605
|
-
console.log(player1.currentTime, player2.currentTime);
|
|
606
|
-
return (isAtExpectedTime(player1, expectedTime, maxVariance) &&
|
|
607
|
-
isAtExpectedTime(player2, expectedTime, maxVariance));
|
|
608
|
-
}
|
|
609
|
-
function isAtExpectedTime(player, expectedTime, maxVariance = 10) {
|
|
610
|
-
return Math.abs(player.currentTime - expectedTime) <= maxVariance;
|
|
611
|
-
}
|
|
612
|
-
function assertRoleError(command) {
|
|
613
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
614
|
-
try {
|
|
615
|
-
yield command();
|
|
616
|
-
(0, assert_1.strict)(false);
|
|
617
|
-
}
|
|
618
|
-
catch (e) {
|
|
619
|
-
if ((0, internal_2.isErrorLike)(e)) {
|
|
620
|
-
console.log(e);
|
|
621
|
-
(0, assert_1.strict)(e.message.includes('The local user doesn\'t have a role of ["Organizer"]'));
|
|
622
|
-
}
|
|
623
|
-
else {
|
|
624
|
-
(0, assert_1.strict)(false);
|
|
625
|
-
}
|
|
626
|
-
}
|
|
627
|
-
});
|
|
628
|
-
}
|
|
629
|
-
function assertActionOccurred(players, expectedAction) {
|
|
630
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
631
|
-
const actions = yield Promise.all(players.map((player) => player.waitForAction()));
|
|
632
|
-
actions.forEach((action) => {
|
|
633
|
-
(0, assert_1.strict)(action === expectedAction);
|
|
634
|
-
});
|
|
635
|
-
});
|
|
636
|
-
}
|
|
637
|
-
function assertExpectedEvents(synchronizer, expectedEventOrder) {
|
|
638
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
639
|
-
let deferred = new internal_2.Deferred();
|
|
640
|
-
let eventCount = 0;
|
|
641
|
-
let timeout;
|
|
642
|
-
synchronizer.addEventListener(MediaPlayerSynchronizer_1.MediaPlayerSynchronizerEvents.groupaction, (evt) => {
|
|
643
|
-
try {
|
|
644
|
-
const details = evt.details;
|
|
645
|
-
(0, assert_1.strict)(evt.error === undefined, evt.error);
|
|
646
|
-
const expectedEvent = expectedEventOrder[eventCount];
|
|
647
|
-
(0, assert_1.strict)(details.action === expectedEvent.action, `unexpected action: should be ${expectedEvent.action}, instead is ${details.action}`);
|
|
648
|
-
(0, assert_1.strict)(details.clientId ===
|
|
649
|
-
expectedEventOrder[eventCount].clientId, `unexpected sender clientId: should be ${expectedEvent.clientId}, instead is ${details.clientId}`);
|
|
650
|
-
(0, assert_1.strict)(details.local === expectedEventOrder[eventCount].local, `unexpected locality: should be ${expectedEvent.local}, instead is ${details.local}`);
|
|
651
|
-
(0, assert_1.strict)(details.source === expectedEventOrder[eventCount].source, `unexpected source: should be ${expectedEvent.source}, instead is ${details.source}`);
|
|
652
|
-
eventCount += 1;
|
|
653
|
-
}
|
|
654
|
-
catch (error) {
|
|
655
|
-
deferred.reject(new Error(`error for event: ${JSON.stringify(evt)}, eventCount ${eventCount}, ${error}`));
|
|
656
|
-
}
|
|
657
|
-
if (eventCount === expectedEventOrder.length) {
|
|
658
|
-
timeout = setTimeout(() => {
|
|
659
|
-
deferred.resolve();
|
|
660
|
-
}, 200);
|
|
661
|
-
}
|
|
662
|
-
else if (eventCount > expectedEventOrder.length) {
|
|
663
|
-
deferred.reject(new Error(`more events than expected, ${evt}`));
|
|
664
|
-
}
|
|
665
|
-
});
|
|
666
|
-
return deferred.promise;
|
|
667
|
-
});
|
|
668
|
-
}
|
|
669
|
-
//# sourceMappingURL=LiveMediaSession_Synchronizer.spec.js.map
|