@neurodevs/node-lsl 9.0.0 → 10.0.0
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/build/__tests__/behavioral/LslOutlet.test.d.ts +4 -2
- package/build/__tests__/behavioral/LslOutlet.test.js +66 -46
- package/build/__tests__/behavioral/LslOutlet.test.js.map +1 -1
- package/build/__tests__/behavioral/TimeMarkerOutlet.test.js +8 -8
- package/build/__tests__/behavioral/TimeMarkerOutlet.test.js.map +1 -1
- package/build/implementations/LslOutlet.d.ts +3 -1
- package/build/implementations/LslOutlet.js +8 -2
- package/build/implementations/LslOutlet.js.map +1 -1
- package/build/implementations/TimeMarkerOutlet.d.ts +1 -1
- package/build/implementations/TimeMarkerOutlet.js +1 -1
- package/build/implementations/TimeMarkerOutlet.js.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/behavioral/LslOutlet.test.ts +81 -53
- package/src/__tests__/behavioral/TimeMarkerOutlet.test.ts +10 -8
- package/src/implementations/LslOutlet.ts +10 -2
- package/src/implementations/TimeMarkerOutlet.ts +1 -1
|
@@ -5,8 +5,9 @@ export default class LslOutletTest extends AbstractSpruceTest {
|
|
|
5
5
|
private static randomOutletOptions;
|
|
6
6
|
private static channelFormatIdx;
|
|
7
7
|
protected static beforeEach(): Promise<void>;
|
|
8
|
-
protected static
|
|
8
|
+
protected static throwsWithMissingRequiredParams(): Promise<void>;
|
|
9
9
|
protected static throwsWithInvalidChannelNames(): Promise<void>;
|
|
10
|
+
protected static allowsZeroSampleRate(): Promise<void>;
|
|
10
11
|
protected static throwsWithInvalidSampleRate(): Promise<void>;
|
|
11
12
|
protected static throwsWithInvalidChannelFormat(): Promise<void>;
|
|
12
13
|
protected static throwsWithInvalidChunkSize(): Promise<void>;
|
|
@@ -21,12 +22,13 @@ export default class LslOutletTest extends AbstractSpruceTest {
|
|
|
21
22
|
protected static appendsChannelsBasedOnCount(labels: string[]): Promise<void>;
|
|
22
23
|
protected static canDestroyOutlet(): Promise<void>;
|
|
23
24
|
protected static pushSampleShouldNotCreateMultipleOutlets(): Promise<void>;
|
|
25
|
+
protected static waitsForTenMsAfterConstructionBeforeReturning(): Promise<void>;
|
|
24
26
|
private static assertThrowsInvalidMaxBuffered;
|
|
25
27
|
private static assertThrowsInvalidChunkSize;
|
|
26
28
|
private static assertThrowsInvalidSampleRate;
|
|
27
29
|
private static assertThrowsInvalidChannelNames;
|
|
28
30
|
private static assertDoesThrowInvalidParameters;
|
|
29
|
-
private static Outlet;
|
|
30
31
|
private static StringOutlet;
|
|
31
32
|
private static FloatOutlet;
|
|
33
|
+
private static Outlet;
|
|
32
34
|
}
|
|
@@ -48,9 +48,10 @@ class LslOutletTest extends test_utils_1.default {
|
|
|
48
48
|
this.fakeLiblsl = new FakeLiblsl_1.default();
|
|
49
49
|
Liblsl_1.default.setInstance(this.fakeLiblsl);
|
|
50
50
|
}
|
|
51
|
-
static async
|
|
51
|
+
static async throwsWithMissingRequiredParams() {
|
|
52
|
+
const err = await test_utils_1.assert.doesThrowAsync(
|
|
52
53
|
//@ts-ignore
|
|
53
|
-
|
|
54
|
+
async () => await LslOutlet_1.default.Create());
|
|
54
55
|
test_utils_1.errorAssert.assertError(err, 'MISSING_PARAMETERS', {
|
|
55
56
|
parameters: [
|
|
56
57
|
'name',
|
|
@@ -67,44 +68,45 @@ class LslOutletTest extends test_utils_1.default {
|
|
|
67
68
|
});
|
|
68
69
|
}
|
|
69
70
|
static async throwsWithInvalidChannelNames() {
|
|
70
|
-
this.assertThrowsInvalidChannelNames(0);
|
|
71
|
+
await this.assertThrowsInvalidChannelNames(0);
|
|
72
|
+
}
|
|
73
|
+
static async allowsZeroSampleRate() {
|
|
74
|
+
await this.Outlet({ sampleRate: 0 });
|
|
71
75
|
}
|
|
72
76
|
static async throwsWithInvalidSampleRate() {
|
|
73
|
-
this.
|
|
74
|
-
this.assertThrowsInvalidSampleRate(-1);
|
|
75
|
-
this.assertThrowsInvalidSampleRate(-1.5);
|
|
77
|
+
await this.assertThrowsInvalidSampleRate(-1);
|
|
78
|
+
await this.assertThrowsInvalidSampleRate(-1.5);
|
|
76
79
|
}
|
|
77
80
|
static async throwsWithInvalidChannelFormat() {
|
|
81
|
+
await this.assertDoesThrowInvalidParameters(
|
|
78
82
|
//@ts-ignore
|
|
79
|
-
|
|
80
|
-
'channelFormat',
|
|
81
|
-
]);
|
|
83
|
+
{ channelFormat: (0, test_utils_1.generateId)() }, ['channelFormat']);
|
|
82
84
|
}
|
|
83
85
|
static async throwsWithInvalidChunkSize() {
|
|
84
|
-
this.Outlet({ chunkSize: 0 });
|
|
85
|
-
this.assertThrowsInvalidChunkSize(-1);
|
|
86
|
-
this.assertThrowsInvalidChunkSize(-1.5);
|
|
87
|
-
this.assertThrowsInvalidChunkSize(1.5);
|
|
86
|
+
await this.Outlet({ chunkSize: 0 });
|
|
87
|
+
await this.assertThrowsInvalidChunkSize(-1);
|
|
88
|
+
await this.assertThrowsInvalidChunkSize(-1.5);
|
|
89
|
+
await this.assertThrowsInvalidChunkSize(1.5);
|
|
88
90
|
}
|
|
89
91
|
static async throwsWithInvalidMaxBuffered() {
|
|
90
|
-
this.Outlet({ maxBuffered: 0 });
|
|
91
|
-
this.assertThrowsInvalidMaxBuffered(-1);
|
|
92
|
-
this.assertThrowsInvalidMaxBuffered(-1.5);
|
|
93
|
-
this.assertThrowsInvalidMaxBuffered(1.5);
|
|
92
|
+
await this.Outlet({ maxBuffered: 0 });
|
|
93
|
+
await this.assertThrowsInvalidMaxBuffered(-1);
|
|
94
|
+
await this.assertThrowsInvalidMaxBuffered(-1.5);
|
|
95
|
+
await this.assertThrowsInvalidMaxBuffered(1.5);
|
|
94
96
|
}
|
|
95
97
|
static async throwsWithUnsupportedType() {
|
|
96
98
|
for (let unsupportedType of consts_1.TEST_UNSUPPORTED_CHANNEL_FORMATS) {
|
|
97
|
-
test_utils_1.assert.
|
|
99
|
+
await test_utils_1.assert.doesThrowAsync(async () => await this.Outlet({ channelFormat: unsupportedType }), `This method currently does not support the ${unsupportedType} type! Please implement it.`);
|
|
98
100
|
}
|
|
99
101
|
}
|
|
100
102
|
static async supportsAllKnownChannelFormats() {
|
|
101
103
|
for (const format of consts_1.TEST_SUPPORTED_CHANNEL_FORMATS) {
|
|
102
|
-
this.Outlet({ channelFormat: format });
|
|
104
|
+
await this.Outlet({ channelFormat: format });
|
|
103
105
|
}
|
|
104
106
|
}
|
|
105
107
|
static async canPushFloatSampleToLsl(sample) {
|
|
106
108
|
var _a, _b, _c;
|
|
107
|
-
const outlet = this.FloatOutlet();
|
|
109
|
+
const outlet = await this.FloatOutlet();
|
|
108
110
|
outlet.pushSample(sample);
|
|
109
111
|
test_utils_1.assert.isEqual((_a = this.fakeLiblsl.lastPushSampleFloatTimestampOptions) === null || _a === void 0 ? void 0 : _a.outlet, this.fakeLiblsl.outlet);
|
|
110
112
|
test_utils_1.assert.isEqualDeep((_b = this.fakeLiblsl.lastPushSampleFloatTimestampOptions) === null || _b === void 0 ? void 0 : _b.sample, sample);
|
|
@@ -118,7 +120,7 @@ class LslOutletTest extends test_utils_1.default {
|
|
|
118
120
|
static async canPushStringSampleToLsl() {
|
|
119
121
|
var _a, _b, _c;
|
|
120
122
|
const sample = [(0, test_utils_1.generateId)()];
|
|
121
|
-
const outlet = this.StringOutlet();
|
|
123
|
+
const outlet = await this.StringOutlet();
|
|
122
124
|
outlet.pushSample(sample);
|
|
123
125
|
test_utils_1.assert.isEqual((_a = this.fakeLiblsl.lastPushSampleStringTimestampOptions) === null || _a === void 0 ? void 0 : _a.outlet, this.fakeLiblsl.outlet);
|
|
124
126
|
test_utils_1.assert.isEqualDeep((_b = this.fakeLiblsl.lastPushSampleStringTimestampOptions) === null || _b === void 0 ? void 0 : _b.sample, sample);
|
|
@@ -126,7 +128,7 @@ class LslOutletTest extends test_utils_1.default {
|
|
|
126
128
|
}
|
|
127
129
|
static async pushingStringTwiceGivesDifferentTimestamps() {
|
|
128
130
|
var _a, _b;
|
|
129
|
-
const outlet = this.StringOutlet();
|
|
131
|
+
const outlet = await this.StringOutlet();
|
|
130
132
|
const sample = [(0, test_utils_1.generateId)()];
|
|
131
133
|
outlet.pushSample(sample);
|
|
132
134
|
const t1 = (_a = this.fakeLiblsl.lastPushSampleStringTimestampOptions) === null || _a === void 0 ? void 0 : _a.timestamp;
|
|
@@ -137,7 +139,7 @@ class LslOutletTest extends test_utils_1.default {
|
|
|
137
139
|
test_utils_1.assert.isEqual(this.fakeLiblsl.localClockHitCount, 2);
|
|
138
140
|
}
|
|
139
141
|
static async constructionCreatesStreamInfo() {
|
|
140
|
-
this.Outlet();
|
|
142
|
+
await this.Outlet();
|
|
141
143
|
const { ...options } = this.randomOutletOptions;
|
|
142
144
|
options.channelCount = options.channelNames.length;
|
|
143
145
|
delete options.manufacturer;
|
|
@@ -152,13 +154,13 @@ class LslOutletTest extends test_utils_1.default {
|
|
|
152
154
|
}
|
|
153
155
|
static async canOverrideClassInstantiatedInFactory() {
|
|
154
156
|
LslOutlet_1.default.Class = CheckingOutlet;
|
|
155
|
-
const instance = this.Outlet();
|
|
157
|
+
const instance = await this.Outlet();
|
|
156
158
|
test_utils_1.assert.isInstanceOf(instance, CheckingOutlet);
|
|
157
159
|
}
|
|
158
160
|
static async appendsChannelsBasedOnCount(labels) {
|
|
159
161
|
const type = (0, test_utils_1.generateId)();
|
|
160
162
|
const unit = (0, test_utils_1.generateId)();
|
|
161
|
-
this.Outlet({ channelNames: labels, type, unit });
|
|
163
|
+
await this.Outlet({ channelNames: labels, type, unit });
|
|
162
164
|
test_utils_1.assert.isEqualDeep(this.fakeLiblsl.lastAppendChannelsToStreamInfoOptions, {
|
|
163
165
|
info: this.fakeLiblsl.streamInfo,
|
|
164
166
|
channels: labels.map((label) => ({
|
|
@@ -169,55 +171,70 @@ class LslOutletTest extends test_utils_1.default {
|
|
|
169
171
|
});
|
|
170
172
|
}
|
|
171
173
|
static async canDestroyOutlet() {
|
|
172
|
-
const outlet = this.Outlet();
|
|
174
|
+
const outlet = await this.Outlet();
|
|
173
175
|
outlet.destroy();
|
|
174
176
|
test_utils_1.assert.isEqual(this.fakeLiblsl.destroyOutletHitCount, 1);
|
|
175
177
|
}
|
|
176
178
|
static async pushSampleShouldNotCreateMultipleOutlets() {
|
|
177
|
-
const outlet = this.FloatOutlet();
|
|
179
|
+
const outlet = await this.FloatOutlet();
|
|
178
180
|
outlet.pushSample([1.0]);
|
|
179
181
|
outlet.pushSample([2.0]);
|
|
180
182
|
outlet.pushSample([3.0]);
|
|
181
183
|
test_utils_1.assert.isEqual(this.fakeLiblsl.createStreamInfoHitCount, 1);
|
|
182
184
|
}
|
|
183
|
-
static
|
|
184
|
-
|
|
185
|
+
static async waitsForTenMsAfterConstructionBeforeReturning() {
|
|
186
|
+
const startMs = Date.now();
|
|
187
|
+
await this.Outlet({ waitAfterConstructionMs: 10 });
|
|
188
|
+
const endMs = Date.now();
|
|
189
|
+
test_utils_1.assert.isAbove(endMs - startMs, 10);
|
|
185
190
|
}
|
|
186
|
-
static
|
|
187
|
-
this.assertDoesThrowInvalidParameters({
|
|
191
|
+
static async assertThrowsInvalidMaxBuffered(maxBuffered) {
|
|
192
|
+
await this.assertDoesThrowInvalidParameters({ maxBuffered }, [
|
|
193
|
+
'maxBuffered',
|
|
194
|
+
]);
|
|
188
195
|
}
|
|
189
|
-
static
|
|
190
|
-
this.assertDoesThrowInvalidParameters({
|
|
196
|
+
static async assertThrowsInvalidChunkSize(chunkSize) {
|
|
197
|
+
await this.assertDoesThrowInvalidParameters({ chunkSize }, [
|
|
198
|
+
'chunkSize',
|
|
199
|
+
]);
|
|
191
200
|
}
|
|
192
|
-
static
|
|
193
|
-
this.assertDoesThrowInvalidParameters({
|
|
201
|
+
static async assertThrowsInvalidSampleRate(sampleRate) {
|
|
202
|
+
await this.assertDoesThrowInvalidParameters({ sampleRate }, [
|
|
203
|
+
'sampleRate',
|
|
204
|
+
]);
|
|
205
|
+
}
|
|
206
|
+
static async assertThrowsInvalidChannelNames(count) {
|
|
207
|
+
await this.assertDoesThrowInvalidParameters({ channelNames: new Array(count).fill((0, test_utils_1.generateId)()) }, ['channelNames']);
|
|
194
208
|
}
|
|
195
|
-
static assertDoesThrowInvalidParameters(options, parameters) {
|
|
196
|
-
const err = test_utils_1.assert.
|
|
209
|
+
static async assertDoesThrowInvalidParameters(options, parameters) {
|
|
210
|
+
const err = await test_utils_1.assert.doesThrowAsync(async () => await this.Outlet(options));
|
|
197
211
|
test_utils_1.errorAssert.assertError(err, 'INVALID_PARAMETERS', {
|
|
198
212
|
parameters,
|
|
199
213
|
});
|
|
200
214
|
}
|
|
201
|
-
static
|
|
202
|
-
return
|
|
215
|
+
static async StringOutlet() {
|
|
216
|
+
return await this.Outlet({ channelFormat: 'string' });
|
|
217
|
+
}
|
|
218
|
+
static async FloatOutlet() {
|
|
219
|
+
return await this.Outlet({ channelFormat: 'float32' });
|
|
220
|
+
}
|
|
221
|
+
static async Outlet(options) {
|
|
222
|
+
return await LslOutlet_1.default.Create({
|
|
203
223
|
...this.randomOutletOptions,
|
|
204
224
|
...options,
|
|
205
225
|
});
|
|
206
226
|
}
|
|
207
|
-
static StringOutlet() {
|
|
208
|
-
return this.Outlet({ channelFormat: 'string' });
|
|
209
|
-
}
|
|
210
|
-
static FloatOutlet() {
|
|
211
|
-
return this.Outlet({ channelFormat: 'float32' });
|
|
212
|
-
}
|
|
213
227
|
}
|
|
214
228
|
exports.default = LslOutletTest;
|
|
215
229
|
__decorate([
|
|
216
230
|
(0, test_utils_1.test)()
|
|
217
|
-
], LslOutletTest, "
|
|
231
|
+
], LslOutletTest, "throwsWithMissingRequiredParams", null);
|
|
218
232
|
__decorate([
|
|
219
233
|
(0, test_utils_1.test)()
|
|
220
234
|
], LslOutletTest, "throwsWithInvalidChannelNames", null);
|
|
235
|
+
__decorate([
|
|
236
|
+
(0, test_utils_1.test)()
|
|
237
|
+
], LslOutletTest, "allowsZeroSampleRate", null);
|
|
221
238
|
__decorate([
|
|
222
239
|
(0, test_utils_1.test)()
|
|
223
240
|
], LslOutletTest, "throwsWithInvalidSampleRate", null);
|
|
@@ -262,6 +279,9 @@ __decorate([
|
|
|
262
279
|
__decorate([
|
|
263
280
|
(0, test_utils_1.test)()
|
|
264
281
|
], LslOutletTest, "pushSampleShouldNotCreateMultipleOutlets", null);
|
|
282
|
+
__decorate([
|
|
283
|
+
(0, test_utils_1.test)()
|
|
284
|
+
], LslOutletTest, "waitsForTenMsAfterConstructionBeforeReturning", null);
|
|
265
285
|
class CheckingOutlet extends LslOutlet_1.default {
|
|
266
286
|
constructor(options) {
|
|
267
287
|
super(options);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LslOutlet.test.js","sourceRoot":"","sources":["../../../src/__tests__/behavioral/LslOutlet.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qEAK+B;AAC/B,0EAAqD;AACrD,
|
|
1
|
+
{"version":3,"file":"LslOutlet.test.js","sourceRoot":"","sources":["../../../src/__tests__/behavioral/LslOutlet.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -45,7 +45,7 @@ class TimeMarkerOutletTest extends test_utils_1.default {
|
|
|
45
45
|
TimeMarkerOutlet_1.default.Class = SpyTimeMarkerOutlet_1.default;
|
|
46
46
|
this.fakeLiblsl = new FakeLiblsl_1.default();
|
|
47
47
|
Liblsl_1.default.setInstance(this.fakeLiblsl);
|
|
48
|
-
this.outlet = this.Outlet();
|
|
48
|
+
this.outlet = await this.Outlet();
|
|
49
49
|
}
|
|
50
50
|
static async loadsWithTimeMarkerSpecificOptions() {
|
|
51
51
|
test_utils_1.assert.isEqualDeep(this.outlet.passedOptions, {
|
|
@@ -63,7 +63,7 @@ class TimeMarkerOutletTest extends test_utils_1.default {
|
|
|
63
63
|
}
|
|
64
64
|
static async canOverrideDefaultOptions() {
|
|
65
65
|
const options = (0, generateRandomOutletOptions_1.default)();
|
|
66
|
-
const outlet = this.Outlet(options);
|
|
66
|
+
const outlet = await this.Outlet(options);
|
|
67
67
|
test_utils_1.assert.isEqualDeep(outlet.passedOptions, options);
|
|
68
68
|
}
|
|
69
69
|
static async pushingSingleMarkerIncrementsHitCountAndWaitTime() {
|
|
@@ -98,7 +98,7 @@ class TimeMarkerOutletTest extends test_utils_1.default {
|
|
|
98
98
|
test_utils_1.assert.isEqual(hitCount, 10);
|
|
99
99
|
}
|
|
100
100
|
static async doesNotWaitIfStopped() {
|
|
101
|
-
this.setupTimeMarkerImpl();
|
|
101
|
+
await this.setupTimeMarkerImpl();
|
|
102
102
|
const startMs = Date.now();
|
|
103
103
|
const promise = this.pushTotalMarkers(2, 1000);
|
|
104
104
|
this.outlet.stop();
|
|
@@ -107,16 +107,16 @@ class TimeMarkerOutletTest extends test_utils_1.default {
|
|
|
107
107
|
test_utils_1.assert.isBelow(endMs - startMs, 10);
|
|
108
108
|
}
|
|
109
109
|
static async clearsTheTimeoutOnStop() {
|
|
110
|
-
this.setupTimeMarkerImpl();
|
|
110
|
+
await this.setupTimeMarkerImpl();
|
|
111
111
|
const promise = this.pushTotalMarkers(2, 100);
|
|
112
112
|
this.outlet.stop();
|
|
113
113
|
this.outlet.pushSample = () => test_utils_1.assert.fail('Should not have been called');
|
|
114
114
|
await promise;
|
|
115
115
|
await this.wait(100);
|
|
116
116
|
}
|
|
117
|
-
static setupTimeMarkerImpl() {
|
|
117
|
+
static async setupTimeMarkerImpl() {
|
|
118
118
|
TimeMarkerOutlet_1.default.Class = TimeMarkerOutlet_1.default;
|
|
119
|
-
this.outlet = this.Outlet();
|
|
119
|
+
this.outlet = await this.Outlet();
|
|
120
120
|
}
|
|
121
121
|
static async pushTotalMarkers(total, durationMs) {
|
|
122
122
|
const markers = new Array(total)
|
|
@@ -131,8 +131,8 @@ class TimeMarkerOutletTest extends test_utils_1.default {
|
|
|
131
131
|
durationMs: durationMs !== null && durationMs !== void 0 ? durationMs : (0, crypto_1.randomInt)(100, 1000),
|
|
132
132
|
};
|
|
133
133
|
}
|
|
134
|
-
static Outlet(options) {
|
|
135
|
-
return TimeMarkerOutlet_1.default.
|
|
134
|
+
static async Outlet(options) {
|
|
135
|
+
return (await TimeMarkerOutlet_1.default.Create(options));
|
|
136
136
|
}
|
|
137
137
|
}
|
|
138
138
|
exports.default = TimeMarkerOutletTest;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimeMarkerOutlet.test.js","sourceRoot":"","sources":["../../../src/__tests__/behavioral/TimeMarkerOutlet.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mCAAkC;AAClC,qEAI+B;AAC/B,0EAAqD;AAErD,8FAAyE;AACzE,8EAAqD;AACrD,gGAAuE;AACvE,yGAAgF;AAEhF,MAAqB,oBAAqB,SAAQ,oBAAkB;IAItD,MAAM,CAAC,KAAK,CAAC,UAAU;QAC7B,MAAM,KAAK,CAAC,UAAU,EAAE,CAAA;QACxB,0BAAoB,CAAC,KAAK,GAAG,6BAAmB,CAAA;QAChD,IAAI,CAAC,UAAU,GAAG,IAAI,oBAAU,EAAE,CAAA;QAClC,gBAAU,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACvC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"TimeMarkerOutlet.test.js","sourceRoot":"","sources":["../../../src/__tests__/behavioral/TimeMarkerOutlet.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,8 @@ export default class LslOutletImpl implements LslOutlet {
|
|
|
6
6
|
private outlet;
|
|
7
7
|
private pushSampleByType;
|
|
8
8
|
protected constructor(options: LslOutletOptions);
|
|
9
|
-
static
|
|
9
|
+
static Create(options: LslOutletOptions): Promise<LslOutlet>;
|
|
10
|
+
private static wait;
|
|
10
11
|
destroy(): void;
|
|
11
12
|
pushSample(sample: LslSample): void;
|
|
12
13
|
private getPushMethod;
|
|
@@ -29,4 +30,5 @@ export interface LslOutletOptions {
|
|
|
29
30
|
unit: string;
|
|
30
31
|
chunkSize: number;
|
|
31
32
|
maxBuffered: number;
|
|
33
|
+
waitAfterConstructionMs?: number;
|
|
32
34
|
}
|
|
@@ -52,9 +52,15 @@ class LslOutletImpl {
|
|
|
52
52
|
const pushMethod = this.getPushMethod();
|
|
53
53
|
this.pushSampleByType = this.lsl[pushMethod].bind(this.lsl);
|
|
54
54
|
}
|
|
55
|
-
static
|
|
55
|
+
static async Create(options) {
|
|
56
56
|
var _a;
|
|
57
|
-
|
|
57
|
+
const { waitAfterConstructionMs = 10 } = options !== null && options !== void 0 ? options : {};
|
|
58
|
+
const instance = new ((_a = this.Class) !== null && _a !== void 0 ? _a : this)(options);
|
|
59
|
+
await this.wait(waitAfterConstructionMs);
|
|
60
|
+
return instance;
|
|
61
|
+
}
|
|
62
|
+
static wait(waitMs) {
|
|
63
|
+
return new Promise((resolve) => setTimeout(resolve, waitMs));
|
|
58
64
|
}
|
|
59
65
|
destroy() {
|
|
60
66
|
this.lsl.destroyOutlet({ outlet: this.outlet });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LslOutlet.js","sourceRoot":"","sources":["../../src/implementations/LslOutlet.ts"],"names":[],"mappings":";;;;;AAAA,+CAAkD;AAClD,8CAMsB;AACtB,sCAA+C;AAQ/C,sDAAiC;AAEjC,MAAqB,aAAa;IAQ9B,YAAsB,OAAyB;QAC3C,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,IAAA,sBAAa,EAAC,OAAO,EAAE;YACzD,MAAM;YACN,MAAM;YACN,cAAc;YACd,YAAY;YACZ,eAAe;YACf,UAAU;YACV,cAAc;YACd,MAAM;YACN,WAAW;YACX,aAAa;SAChB,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QAEtB,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,iBAAiB,EAAE,GAChE,IAAI,CAAC,OAAc,CAAA;QAEvB,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,CAAA;QAExC,IAAA,oCAAuB,EAAC,YAAY,CAAC,CAAA;QACrC,IAAA,kCAAqB,EAAC,UAAU,CAAC,CAAA;QACjC,IAAA,qCAAwB,EAAC,aAAa,CAAC,CAAA;QACvC,IAAA,iCAAoB,EAAC,SAAS,CAAC,CAAA;QAC/B,IAAA,mCAAsB,EAAC,WAAW,CAAC,CAAA;QAEnC,OAAO,iBAAiB,CAAC,YAAY,CAAA;QACrC,OAAO,iBAAiB,CAAC,IAAI,CAAA;QAE7B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC;YACxC,GAAG,iBAAiB;YACpB,YAAY;YACZ,aAAa,EAAE,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC;SACzD,CAAC,CAAA;QAEF,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC;YAChC,IAAI,EAAE,IAAI,CAAC,UAAU;YACrB,QAAQ,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC;gBAC3C,KAAK;gBACL,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;gBACvB,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;aAC1B,CAAC,CAAC;SACN,CAAC,CAAA;QAEF,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;YAChC,IAAI,EAAE,IAAI,CAAC,UAAU;YACrB,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;YACjC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW;SACxC,CAAC,CAAA;QAEF,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QACvC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC/D,CAAC;IAEM,MAAM,CAAC,MAAM,CAAC,OAAyB;;
|
|
1
|
+
{"version":3,"file":"LslOutlet.js","sourceRoot":"","sources":["../../src/implementations/LslOutlet.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ export default class TimeMarkerOutletImpl extends LslOutletImpl implements TimeM
|
|
|
5
5
|
private isPlaying;
|
|
6
6
|
private waitResolve?;
|
|
7
7
|
private timeout?;
|
|
8
|
-
static
|
|
8
|
+
static Create(options?: Partial<LslOutletOptions>): Promise<TimeMarkerOutlet>;
|
|
9
9
|
pushMarkers(markers: DurationMarker[]): Promise<void>;
|
|
10
10
|
protected wait(durationMs: number): Promise<unknown>;
|
|
11
11
|
private setTimeout;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimeMarkerOutlet.js","sourceRoot":"","sources":["../../src/implementations/TimeMarkerOutlet.ts"],"names":[],"mappings":";;;;;AACA,4DAAwE;AAExE,MAAqB,oBACjB,SAAQ,mBAAa;IADzB;;QAMY,cAAS,GAAG,KAAK,CAAA;IAoD7B,CAAC;IAhDU,MAAM,CAAC,MAAM,CAAC,OAAmC;;
|
|
1
|
+
{"version":3,"file":"TimeMarkerOutlet.js","sourceRoot":"","sources":["../../src/implementations/TimeMarkerOutlet.ts"],"names":[],"mappings":";;;;;AACA,4DAAwE;AAExE,MAAqB,oBACjB,SAAQ,mBAAa;IADzB;;QAMY,cAAS,GAAG,KAAK,CAAA;IAoD7B,CAAC;IAhDU,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAmC;;QAC1D,MAAM,cAAc,GAAG;YACnB,IAAI,EAAE,cAAc;YACpB,IAAI,EAAE,SAAS;YACf,YAAY,EAAE,CAAC,SAAS,CAAC;YACzB,UAAU,EAAE,CAAC;YACb,aAAa,EAAE,QAAQ;YACvB,QAAQ,EAAE,cAAc;YACxB,YAAY,EAAE,KAAK;YACnB,IAAI,EAAE,KAAK;YACX,SAAS,EAAE,CAAC;YACZ,WAAW,EAAE,CAAC;SACG,CAAA;QAErB,OAAO,IAAI,CAAC,MAAA,IAAI,CAAC,KAAK,mCAAI,IAAI,CAAC,CAAC;YAC5B,GAAG,cAAc;YACjB,GAAG,OAAO;SACb,CAAqB,CAAA;IAC1B,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,OAAyB;QAC9C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;QAErB,KAAK,IAAI,MAAM,IAAI,OAAO,EAAE,CAAC;YACzB,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;YAE9B,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;YAElC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBAClB,OAAM;YACV,CAAC;QACL,CAAC;IACL,CAAC;IAES,KAAK,CAAC,IAAI,CAAC,UAAkB;QACnC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAA;IACzE,CAAC;IAEO,UAAU,CAAC,OAAiC,EAAE,UAAkB;QACpE,IAAI,CAAC,WAAW,GAAG,OAAc,CAAA;QACjC,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;IAClD,CAAC;IAEM,IAAI;;QACP,MAAA,IAAI,CAAC,WAAW,oDAAI,CAAA;QACpB,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC1B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAA;IAC1B,CAAC;CACJ;AA1DD,uCA0DC"}
|
package/package.json
CHANGED
|
@@ -5,7 +5,9 @@ import AbstractSpruceTest, {
|
|
|
5
5
|
generateId,
|
|
6
6
|
} from '@sprucelabs/test-utils'
|
|
7
7
|
import LiblslImpl from '../../implementations/Liblsl'
|
|
8
|
-
import
|
|
8
|
+
import LslOutletImpl, {
|
|
9
|
+
LslOutletOptions,
|
|
10
|
+
} from '../../implementations/LslOutlet'
|
|
9
11
|
import { LslSample } from '../../nodeLsl.types'
|
|
10
12
|
import FakeLiblsl from '../../testDoubles/FakeLiblsl'
|
|
11
13
|
import {
|
|
@@ -23,19 +25,22 @@ export default class LslOutletTest extends AbstractSpruceTest {
|
|
|
23
25
|
|
|
24
26
|
protected static async beforeEach() {
|
|
25
27
|
await super.beforeEach()
|
|
26
|
-
delete
|
|
28
|
+
delete LslOutletImpl.Class
|
|
27
29
|
this.randomOutletOptions = generateRandomOutletOptions()
|
|
28
30
|
|
|
29
31
|
const channelFormat = this.randomOutletOptions.channelFormat
|
|
30
32
|
this.channelFormatIdx = TEST_CHANNEL_FORMATS_MAP[channelFormat]
|
|
31
33
|
this.fakeLiblsl = new FakeLiblsl()
|
|
34
|
+
|
|
32
35
|
LiblslImpl.setInstance(this.fakeLiblsl)
|
|
33
36
|
}
|
|
34
37
|
|
|
35
38
|
@test()
|
|
36
|
-
protected static async
|
|
37
|
-
|
|
38
|
-
|
|
39
|
+
protected static async throwsWithMissingRequiredParams() {
|
|
40
|
+
const err = await assert.doesThrowAsync(
|
|
41
|
+
//@ts-ignore
|
|
42
|
+
async () => await LslOutletImpl.Create()
|
|
43
|
+
)
|
|
39
44
|
errorAssert.assertError(err, 'MISSING_PARAMETERS', {
|
|
40
45
|
parameters: [
|
|
41
46
|
'name',
|
|
@@ -54,45 +59,51 @@ export default class LslOutletTest extends AbstractSpruceTest {
|
|
|
54
59
|
|
|
55
60
|
@test()
|
|
56
61
|
protected static async throwsWithInvalidChannelNames() {
|
|
57
|
-
this.assertThrowsInvalidChannelNames(0)
|
|
62
|
+
await this.assertThrowsInvalidChannelNames(0)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
@test()
|
|
66
|
+
protected static async allowsZeroSampleRate() {
|
|
67
|
+
await this.Outlet({ sampleRate: 0 })
|
|
58
68
|
}
|
|
59
69
|
|
|
60
70
|
@test()
|
|
61
71
|
protected static async throwsWithInvalidSampleRate() {
|
|
62
|
-
this.
|
|
63
|
-
this.assertThrowsInvalidSampleRate(-1)
|
|
64
|
-
this.assertThrowsInvalidSampleRate(-1.5)
|
|
72
|
+
await this.assertThrowsInvalidSampleRate(-1)
|
|
73
|
+
await this.assertThrowsInvalidSampleRate(-1.5)
|
|
65
74
|
}
|
|
66
75
|
|
|
67
76
|
@test()
|
|
68
77
|
protected static async throwsWithInvalidChannelFormat() {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
78
|
+
await this.assertDoesThrowInvalidParameters(
|
|
79
|
+
//@ts-ignore
|
|
80
|
+
{ channelFormat: generateId() },
|
|
81
|
+
['channelFormat']
|
|
82
|
+
)
|
|
73
83
|
}
|
|
74
84
|
|
|
75
85
|
@test()
|
|
76
86
|
protected static async throwsWithInvalidChunkSize() {
|
|
77
|
-
this.Outlet({ chunkSize: 0 })
|
|
78
|
-
this.assertThrowsInvalidChunkSize(-1)
|
|
79
|
-
this.assertThrowsInvalidChunkSize(-1.5)
|
|
80
|
-
this.assertThrowsInvalidChunkSize(1.5)
|
|
87
|
+
await this.Outlet({ chunkSize: 0 })
|
|
88
|
+
await this.assertThrowsInvalidChunkSize(-1)
|
|
89
|
+
await this.assertThrowsInvalidChunkSize(-1.5)
|
|
90
|
+
await this.assertThrowsInvalidChunkSize(1.5)
|
|
81
91
|
}
|
|
82
92
|
|
|
83
93
|
@test()
|
|
84
94
|
protected static async throwsWithInvalidMaxBuffered() {
|
|
85
|
-
this.Outlet({ maxBuffered: 0 })
|
|
86
|
-
this.assertThrowsInvalidMaxBuffered(-1)
|
|
87
|
-
this.assertThrowsInvalidMaxBuffered(-1.5)
|
|
88
|
-
this.assertThrowsInvalidMaxBuffered(1.5)
|
|
95
|
+
await this.Outlet({ maxBuffered: 0 })
|
|
96
|
+
await this.assertThrowsInvalidMaxBuffered(-1)
|
|
97
|
+
await this.assertThrowsInvalidMaxBuffered(-1.5)
|
|
98
|
+
await this.assertThrowsInvalidMaxBuffered(1.5)
|
|
89
99
|
}
|
|
90
100
|
|
|
91
101
|
@test()
|
|
92
102
|
protected static async throwsWithUnsupportedType() {
|
|
93
103
|
for (let unsupportedType of TEST_UNSUPPORTED_CHANNEL_FORMATS) {
|
|
94
|
-
assert.
|
|
95
|
-
() =>
|
|
104
|
+
await assert.doesThrowAsync(
|
|
105
|
+
async () =>
|
|
106
|
+
await this.Outlet({ channelFormat: unsupportedType }),
|
|
96
107
|
`This method currently does not support the ${unsupportedType} type! Please implement it.`
|
|
97
108
|
)
|
|
98
109
|
}
|
|
@@ -101,14 +112,14 @@ export default class LslOutletTest extends AbstractSpruceTest {
|
|
|
101
112
|
@test()
|
|
102
113
|
protected static async supportsAllKnownChannelFormats() {
|
|
103
114
|
for (const format of TEST_SUPPORTED_CHANNEL_FORMATS) {
|
|
104
|
-
this.Outlet({ channelFormat: format as TestChannelFormat })
|
|
115
|
+
await this.Outlet({ channelFormat: format as TestChannelFormat })
|
|
105
116
|
}
|
|
106
117
|
}
|
|
107
118
|
|
|
108
119
|
@test('pushing [1, 2] sample sends to LSL', [1.0, 2.0])
|
|
109
120
|
@test('pushing [1] sample sends to LSL', [1.0])
|
|
110
121
|
protected static async canPushFloatSampleToLsl(sample: LslSample) {
|
|
111
|
-
const outlet = this.FloatOutlet()
|
|
122
|
+
const outlet = await this.FloatOutlet()
|
|
112
123
|
outlet.pushSample(sample)
|
|
113
124
|
|
|
114
125
|
assert.isEqual(
|
|
@@ -132,7 +143,7 @@ export default class LslOutletTest extends AbstractSpruceTest {
|
|
|
132
143
|
@test()
|
|
133
144
|
protected static async canPushStringSampleToLsl() {
|
|
134
145
|
const sample = [generateId()]
|
|
135
|
-
const outlet = this.StringOutlet()
|
|
146
|
+
const outlet = await this.StringOutlet()
|
|
136
147
|
|
|
137
148
|
outlet.pushSample(sample)
|
|
138
149
|
|
|
@@ -151,7 +162,7 @@ export default class LslOutletTest extends AbstractSpruceTest {
|
|
|
151
162
|
|
|
152
163
|
@test()
|
|
153
164
|
protected static async pushingStringTwiceGivesDifferentTimestamps() {
|
|
154
|
-
const outlet = this.StringOutlet()
|
|
165
|
+
const outlet = await this.StringOutlet()
|
|
155
166
|
const sample = [generateId()]
|
|
156
167
|
|
|
157
168
|
outlet.pushSample(sample)
|
|
@@ -170,7 +181,7 @@ export default class LslOutletTest extends AbstractSpruceTest {
|
|
|
170
181
|
|
|
171
182
|
@test()
|
|
172
183
|
protected static async constructionCreatesStreamInfo() {
|
|
173
|
-
this.Outlet()
|
|
184
|
+
await this.Outlet()
|
|
174
185
|
|
|
175
186
|
const { ...options } = this.randomOutletOptions as any
|
|
176
187
|
|
|
@@ -190,8 +201,8 @@ export default class LslOutletTest extends AbstractSpruceTest {
|
|
|
190
201
|
|
|
191
202
|
@test()
|
|
192
203
|
protected static async canOverrideClassInstantiatedInFactory() {
|
|
193
|
-
|
|
194
|
-
const instance = this.Outlet()
|
|
204
|
+
LslOutletImpl.Class = CheckingOutlet
|
|
205
|
+
const instance = await this.Outlet()
|
|
195
206
|
|
|
196
207
|
assert.isInstanceOf(instance, CheckingOutlet)
|
|
197
208
|
}
|
|
@@ -202,7 +213,7 @@ export default class LslOutletTest extends AbstractSpruceTest {
|
|
|
202
213
|
const type = generateId()
|
|
203
214
|
const unit = generateId()
|
|
204
215
|
|
|
205
|
-
this.Outlet({ channelNames: labels, type, unit })
|
|
216
|
+
await this.Outlet({ channelNames: labels, type, unit })
|
|
206
217
|
|
|
207
218
|
assert.isEqualDeep(
|
|
208
219
|
this.fakeLiblsl.lastAppendChannelsToStreamInfoOptions,
|
|
@@ -219,7 +230,7 @@ export default class LslOutletTest extends AbstractSpruceTest {
|
|
|
219
230
|
|
|
220
231
|
@test()
|
|
221
232
|
protected static async canDestroyOutlet() {
|
|
222
|
-
const outlet = this.Outlet()
|
|
233
|
+
const outlet = await this.Outlet()
|
|
223
234
|
outlet.destroy()
|
|
224
235
|
|
|
225
236
|
assert.isEqual(this.fakeLiblsl.destroyOutletHitCount, 1)
|
|
@@ -227,7 +238,7 @@ export default class LslOutletTest extends AbstractSpruceTest {
|
|
|
227
238
|
|
|
228
239
|
@test()
|
|
229
240
|
protected static async pushSampleShouldNotCreateMultipleOutlets() {
|
|
230
|
-
const outlet = this.FloatOutlet()
|
|
241
|
+
const outlet = await this.FloatOutlet()
|
|
231
242
|
outlet.pushSample([1.0])
|
|
232
243
|
outlet.pushSample([2.0])
|
|
233
244
|
outlet.pushSample([3.0])
|
|
@@ -235,52 +246,69 @@ export default class LslOutletTest extends AbstractSpruceTest {
|
|
|
235
246
|
assert.isEqual(this.fakeLiblsl.createStreamInfoHitCount, 1)
|
|
236
247
|
}
|
|
237
248
|
|
|
238
|
-
|
|
239
|
-
|
|
249
|
+
@test()
|
|
250
|
+
protected static async waitsForTenMsAfterConstructionBeforeReturning() {
|
|
251
|
+
const startMs = Date.now()
|
|
252
|
+
await this.Outlet({ waitAfterConstructionMs: 10 })
|
|
253
|
+
const endMs = Date.now()
|
|
254
|
+
|
|
255
|
+
assert.isAbove(endMs - startMs, 10)
|
|
240
256
|
}
|
|
241
257
|
|
|
242
|
-
private static
|
|
243
|
-
this.assertDoesThrowInvalidParameters({
|
|
258
|
+
private static async assertThrowsInvalidMaxBuffered(maxBuffered: number) {
|
|
259
|
+
await this.assertDoesThrowInvalidParameters({ maxBuffered }, [
|
|
260
|
+
'maxBuffered',
|
|
261
|
+
])
|
|
244
262
|
}
|
|
245
263
|
|
|
246
|
-
private static
|
|
247
|
-
this.assertDoesThrowInvalidParameters({
|
|
264
|
+
private static async assertThrowsInvalidChunkSize(chunkSize: number) {
|
|
265
|
+
await this.assertDoesThrowInvalidParameters({ chunkSize }, [
|
|
266
|
+
'chunkSize',
|
|
267
|
+
])
|
|
248
268
|
}
|
|
249
269
|
|
|
250
|
-
private static
|
|
251
|
-
this.assertDoesThrowInvalidParameters(
|
|
270
|
+
private static async assertThrowsInvalidSampleRate(sampleRate: number) {
|
|
271
|
+
await this.assertDoesThrowInvalidParameters({ sampleRate }, [
|
|
272
|
+
'sampleRate',
|
|
273
|
+
])
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
private static async assertThrowsInvalidChannelNames(count: number) {
|
|
277
|
+
await this.assertDoesThrowInvalidParameters(
|
|
252
278
|
{ channelNames: new Array(count).fill(generateId()) },
|
|
253
279
|
['channelNames']
|
|
254
280
|
)
|
|
255
281
|
}
|
|
256
282
|
|
|
257
|
-
private static assertDoesThrowInvalidParameters(
|
|
283
|
+
private static async assertDoesThrowInvalidParameters(
|
|
258
284
|
options: Partial<LslOutletOptions>,
|
|
259
285
|
parameters: string[]
|
|
260
286
|
) {
|
|
261
|
-
const err = assert.
|
|
287
|
+
const err = await assert.doesThrowAsync(
|
|
288
|
+
async () => await this.Outlet(options)
|
|
289
|
+
)
|
|
262
290
|
errorAssert.assertError(err, 'INVALID_PARAMETERS', {
|
|
263
291
|
parameters,
|
|
264
292
|
})
|
|
265
293
|
}
|
|
266
294
|
|
|
267
|
-
private static
|
|
268
|
-
return
|
|
269
|
-
...this.randomOutletOptions,
|
|
270
|
-
...options,
|
|
271
|
-
})
|
|
295
|
+
private static async StringOutlet() {
|
|
296
|
+
return await this.Outlet({ channelFormat: 'string' })
|
|
272
297
|
}
|
|
273
298
|
|
|
274
|
-
private static
|
|
275
|
-
return this.Outlet({ channelFormat: '
|
|
299
|
+
private static async FloatOutlet() {
|
|
300
|
+
return await this.Outlet({ channelFormat: 'float32' })
|
|
276
301
|
}
|
|
277
302
|
|
|
278
|
-
private static
|
|
279
|
-
return
|
|
303
|
+
private static async Outlet(options?: Partial<LslOutletOptions>) {
|
|
304
|
+
return await LslOutletImpl.Create({
|
|
305
|
+
...this.randomOutletOptions,
|
|
306
|
+
...options,
|
|
307
|
+
})
|
|
280
308
|
}
|
|
281
309
|
}
|
|
282
310
|
|
|
283
|
-
class CheckingOutlet extends
|
|
311
|
+
class CheckingOutlet extends LslOutletImpl {
|
|
284
312
|
public constructor(options: LslOutletOptions) {
|
|
285
313
|
super(options)
|
|
286
314
|
}
|
|
@@ -20,7 +20,7 @@ export default class TimeMarkerOutletTest extends AbstractSpruceTest {
|
|
|
20
20
|
TimeMarkerOutletImpl.Class = SpyTimeMarkerOutlet
|
|
21
21
|
this.fakeLiblsl = new FakeLiblsl()
|
|
22
22
|
LiblslImpl.setInstance(this.fakeLiblsl)
|
|
23
|
-
this.outlet = this.Outlet()
|
|
23
|
+
this.outlet = await this.Outlet()
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
@test()
|
|
@@ -42,7 +42,7 @@ export default class TimeMarkerOutletTest extends AbstractSpruceTest {
|
|
|
42
42
|
@test()
|
|
43
43
|
protected static async canOverrideDefaultOptions() {
|
|
44
44
|
const options = generateRandomOutletOptions()
|
|
45
|
-
const outlet = this.Outlet(options)
|
|
45
|
+
const outlet = await this.Outlet(options)
|
|
46
46
|
assert.isEqualDeep(outlet.passedOptions, options)
|
|
47
47
|
}
|
|
48
48
|
|
|
@@ -101,7 +101,7 @@ export default class TimeMarkerOutletTest extends AbstractSpruceTest {
|
|
|
101
101
|
|
|
102
102
|
@test()
|
|
103
103
|
protected static async doesNotWaitIfStopped() {
|
|
104
|
-
this.setupTimeMarkerImpl()
|
|
104
|
+
await this.setupTimeMarkerImpl()
|
|
105
105
|
|
|
106
106
|
const startMs = Date.now()
|
|
107
107
|
const promise = this.pushTotalMarkers(2, 1000)
|
|
@@ -114,7 +114,7 @@ export default class TimeMarkerOutletTest extends AbstractSpruceTest {
|
|
|
114
114
|
|
|
115
115
|
@test()
|
|
116
116
|
protected static async clearsTheTimeoutOnStop() {
|
|
117
|
-
this.setupTimeMarkerImpl()
|
|
117
|
+
await this.setupTimeMarkerImpl()
|
|
118
118
|
|
|
119
119
|
const promise = this.pushTotalMarkers(2, 100)
|
|
120
120
|
|
|
@@ -126,9 +126,9 @@ export default class TimeMarkerOutletTest extends AbstractSpruceTest {
|
|
|
126
126
|
await this.wait(100)
|
|
127
127
|
}
|
|
128
128
|
|
|
129
|
-
private static setupTimeMarkerImpl() {
|
|
129
|
+
private static async setupTimeMarkerImpl() {
|
|
130
130
|
TimeMarkerOutletImpl.Class = TimeMarkerOutletImpl as any
|
|
131
|
-
this.outlet = this.Outlet()
|
|
131
|
+
this.outlet = await this.Outlet()
|
|
132
132
|
}
|
|
133
133
|
|
|
134
134
|
private static async pushTotalMarkers(total: number, durationMs?: number) {
|
|
@@ -148,7 +148,9 @@ export default class TimeMarkerOutletTest extends AbstractSpruceTest {
|
|
|
148
148
|
}
|
|
149
149
|
}
|
|
150
150
|
|
|
151
|
-
private static Outlet(options?: Partial<LslOutletOptions>) {
|
|
152
|
-
return TimeMarkerOutletImpl.
|
|
151
|
+
private static async Outlet(options?: Partial<LslOutletOptions>) {
|
|
152
|
+
return (await TimeMarkerOutletImpl.Create(
|
|
153
|
+
options
|
|
154
|
+
)) as SpyTimeMarkerOutlet
|
|
153
155
|
}
|
|
154
156
|
}
|
|
@@ -79,8 +79,15 @@ export default class LslOutletImpl implements LslOutlet {
|
|
|
79
79
|
this.pushSampleByType = this.lsl[pushMethod].bind(this.lsl)
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
-
public static
|
|
83
|
-
|
|
82
|
+
public static async Create(options: LslOutletOptions) {
|
|
83
|
+
const { waitAfterConstructionMs = 10 } = options ?? {}
|
|
84
|
+
const instance = new (this.Class ?? this)(options)
|
|
85
|
+
await this.wait(waitAfterConstructionMs)
|
|
86
|
+
return instance
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
private static wait(waitMs: number) {
|
|
90
|
+
return new Promise((resolve) => setTimeout(resolve, waitMs))
|
|
84
91
|
}
|
|
85
92
|
|
|
86
93
|
public destroy() {
|
|
@@ -140,4 +147,5 @@ export interface LslOutletOptions {
|
|
|
140
147
|
unit: string
|
|
141
148
|
chunkSize: number
|
|
142
149
|
maxBuffered: number
|
|
150
|
+
waitAfterConstructionMs?: number
|
|
143
151
|
}
|
|
@@ -11,7 +11,7 @@ export default class TimeMarkerOutletImpl
|
|
|
11
11
|
private waitResolve?: () => void
|
|
12
12
|
private timeout?: any
|
|
13
13
|
|
|
14
|
-
public static
|
|
14
|
+
public static async Create(options?: Partial<LslOutletOptions>) {
|
|
15
15
|
const defaultOptions = {
|
|
16
16
|
name: 'Time markers',
|
|
17
17
|
type: 'Markers',
|