@neurodevs/node-lsl 10.1.4 → 10.2.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__/AbstractNodeLslTest.d.ts +18 -0
- package/build/__tests__/AbstractNodeLslTest.js +80 -0
- package/build/__tests__/AbstractNodeLslTest.js.map +1 -0
- package/build/__tests__/{implementation/Liblsl.test.d.ts → Liblsl.test.d.ts} +6 -0
- package/build/__tests__/{implementation/Liblsl.test.js → Liblsl.test.js} +60 -14
- package/build/__tests__/Liblsl.test.js.map +1 -0
- package/build/__tests__/LslInlet.test.d.ts +11 -0
- package/build/__tests__/LslInlet.test.js +94 -0
- package/build/__tests__/LslInlet.test.js.map +1 -0
- package/build/__tests__/{behavioral/LslOutlet.test.d.ts → LslOutlet.test.d.ts} +3 -6
- package/build/__tests__/{behavioral/LslOutlet.test.js → LslOutlet.test.js} +24 -68
- package/build/__tests__/LslOutlet.test.js.map +1 -0
- package/build/__tests__/LslStreamInfo.test.d.ts +21 -0
- package/build/__tests__/LslStreamInfo.test.js +166 -0
- package/build/__tests__/LslStreamInfo.test.js.map +1 -0
- package/build/__tests__/SpyLslStreamInfo.d.ts +5 -0
- package/build/__tests__/SpyLslStreamInfo.js +17 -0
- package/build/__tests__/SpyLslStreamInfo.js.map +1 -0
- package/build/__tests__/{behavioral/TimeMarkerOutlet.test.d.ts → TimeMarkerOutlet.test.d.ts} +2 -3
- package/build/__tests__/{behavioral/TimeMarkerOutlet.test.js → TimeMarkerOutlet.test.js} +7 -33
- package/build/__tests__/TimeMarkerOutlet.test.js.map +1 -0
- package/build/{implementations → components}/Liblsl.d.ts +4 -2
- package/build/{implementations → components}/Liblsl.js +23 -4
- package/build/components/Liblsl.js.map +1 -0
- package/build/components/LslInlet.d.ts +31 -0
- package/build/components/LslInlet.js +51 -0
- package/build/components/LslInlet.js.map +1 -0
- package/build/{implementations → components}/LslOutlet.d.ts +20 -9
- package/build/components/LslOutlet.js +118 -0
- package/build/components/LslOutlet.js.map +1 -0
- package/build/components/LslStreamInfo.d.ts +38 -0
- package/build/components/LslStreamInfo.js +65 -0
- package/build/components/LslStreamInfo.js.map +1 -0
- package/build/{implementations → components}/TimeMarkerOutlet.d.ts +2 -1
- package/build/{implementations → components}/TimeMarkerOutlet.js +1 -1
- package/build/components/TimeMarkerOutlet.js.map +1 -0
- package/build/demo.d.ts +1 -0
- package/build/demo.js +42 -0
- package/build/demo.js.map +1 -0
- package/build/index.d.ts +12 -7
- package/build/index.js +16 -8
- package/build/index.js.map +1 -1
- package/build/nodeLsl.types.d.ts +34 -18
- package/build/testDoubles/FakeLiblsl.d.ts +11 -3
- package/build/testDoubles/FakeLiblsl.js +29 -5
- package/build/testDoubles/FakeLiblsl.js.map +1 -1
- package/build/testDoubles/FakeLslOutlet.d.ts +4 -2
- package/build/testDoubles/FakeLslOutlet.js +2 -1
- package/build/testDoubles/FakeLslOutlet.js.map +1 -1
- package/build/testDoubles/FakeLslStreamInfo.d.ts +5 -0
- package/build/testDoubles/FakeLslStreamInfo.js +10 -0
- package/build/testDoubles/FakeLslStreamInfo.js.map +1 -0
- package/build/testDoubles/FakeStreamInfo.d.ts +9 -0
- package/build/testDoubles/FakeStreamInfo.js +17 -0
- package/build/testDoubles/FakeStreamInfo.js.map +1 -0
- package/build/testDoubles/FakeTimeMarkerOutlet.d.ts +1 -1
- package/build/testDoubles/SpyLslInlet.d.ts +7 -0
- package/build/testDoubles/SpyLslInlet.js +20 -0
- package/build/testDoubles/SpyLslInlet.js.map +1 -0
- package/build/testDoubles/SpyLslStreamInfo.d.ts +9 -0
- package/build/testDoubles/SpyLslStreamInfo.js +28 -0
- package/build/testDoubles/SpyLslStreamInfo.js.map +1 -0
- package/build/testDoubles/SpyTimeMarkerOutlet.d.ts +4 -3
- package/build/testDoubles/SpyTimeMarkerOutlet.js +3 -3
- package/build/testDoubles/SpyTimeMarkerOutlet.js.map +1 -1
- package/build/testDoubles/consts.js.map +1 -0
- package/build/{__tests__/support → testDoubles}/generateRandomOutletOptions.d.ts +1 -1
- package/build/testDoubles/generateRandomOutletOptions.js.map +1 -0
- package/package.json +1 -1
- package/src/__tests__/AbstractNodeLslTest.ts +50 -0
- package/src/__tests__/{implementation/Liblsl.test.ts → Liblsl.test.ts} +49 -8
- package/src/__tests__/LslInlet.test.ts +99 -0
- package/src/__tests__/{behavioral/LslOutlet.test.ts → LslOutlet.test.ts} +29 -64
- package/src/__tests__/LslStreamInfo.test.ts +209 -0
- package/src/__tests__/{behavioral/TimeMarkerOutlet.test.ts → TimeMarkerOutlet.test.ts} +12 -17
- package/src/{implementations → components}/Liblsl.ts +29 -5
- package/src/components/LslInlet.ts +85 -0
- package/src/{implementations → components}/LslOutlet.ts +91 -64
- package/src/components/LslStreamInfo.ts +105 -0
- package/src/{implementations → components}/TimeMarkerOutlet.ts +3 -1
- package/src/demo.ts +43 -0
- package/src/index.ts +15 -7
- package/src/nodeLsl.types.ts +36 -23
- package/src/testDoubles/FakeLiblsl.ts +40 -7
- package/src/testDoubles/FakeLslOutlet.ts +5 -2
- package/src/testDoubles/FakeStreamInfo.ts +19 -0
- package/src/testDoubles/FakeTimeMarkerOutlet.ts +1 -1
- package/src/testDoubles/SpyLslInlet.ts +16 -0
- package/src/testDoubles/SpyLslStreamInfo.ts +27 -0
- package/src/testDoubles/SpyTimeMarkerOutlet.ts +5 -4
- package/src/{__tests__/support → testDoubles}/generateRandomOutletOptions.ts +1 -1
- package/build/__tests__/behavioral/LslOutlet.test.js.map +0 -1
- package/build/__tests__/behavioral/TimeMarkerOutlet.test.js.map +0 -1
- package/build/__tests__/implementation/Liblsl.test.js.map +0 -1
- package/build/__tests__/support/consts.js.map +0 -1
- package/build/__tests__/support/generateRandomOutletOptions.js.map +0 -1
- package/build/implementations/Liblsl.js.map +0 -1
- package/build/implementations/LslOutlet.js +0 -94
- package/build/implementations/LslOutlet.js.map +0 -1
- package/build/implementations/TimeMarkerOutlet.js.map +0 -1
- /package/build/{__tests__/support → testDoubles}/consts.d.ts +0 -0
- /package/build/{__tests__/support → testDoubles}/consts.js +0 -0
- /package/build/{__tests__/support → testDoubles}/generateRandomOutletOptions.js +0 -0
- /package/src/{__tests__/support → testDoubles}/consts.ts +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SpyLslStreamInfo.js","sourceRoot":"","sources":["../../src/testDoubles/SpyLslStreamInfo.ts"],"names":[],"mappings":";;;;;AAAA,gFAA8E;AAE9E,MAAqB,gBAAiB,SAAQ,uBAAa;IACvD,YAAmB,OAA0B;QACzC,KAAK,CAAC,OAAO,CAAC,CAAA;IAClB,CAAC;IAEM,aAAa;QAChB,OAAO,IAAI,CAAC,UAAU,CAAA;IAC1B,CAAC;IAEM,OAAO;QACV,OAAO,IAAI,CAAC,IAAI,CAAA;IACpB,CAAC;IAEM,OAAO;QACV,OAAO,IAAI,CAAC,IAAI,CAAA;IACpB,CAAC;IAEM,WAAW;QACd,OAAO,IAAI,CAAC,QAAQ,CAAA;IACxB,CAAC;IAEM,QAAQ;QACX,OAAO,IAAI,CAAC,KAAK,CAAA;IACrB,CAAC;CACJ;AAxBD,mCAwBC"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { LslOutletOptions } from '../
|
|
2
|
-
import
|
|
1
|
+
import { LslOutletOptions } from '../components/LslOutlet';
|
|
2
|
+
import { StreamInfo } from '../components/LslStreamInfo';
|
|
3
|
+
import TimeMarkerOutletImpl from '../components/TimeMarkerOutlet';
|
|
3
4
|
export default class SpyTimeMarkerOutlet extends TimeMarkerOutletImpl {
|
|
4
5
|
passedOptions: LslOutletOptions;
|
|
5
6
|
totalWaitTimeMs: number;
|
|
6
|
-
constructor(options: LslOutletOptions);
|
|
7
|
+
constructor(info: StreamInfo, options: LslOutletOptions);
|
|
7
8
|
wait(durationMs: number): Promise<void>;
|
|
8
9
|
}
|
|
@@ -3,10 +3,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const TimeMarkerOutlet_1 = __importDefault(require("../
|
|
6
|
+
const TimeMarkerOutlet_1 = __importDefault(require("../components/TimeMarkerOutlet"));
|
|
7
7
|
class SpyTimeMarkerOutlet extends TimeMarkerOutlet_1.default {
|
|
8
|
-
constructor(options) {
|
|
9
|
-
super(options);
|
|
8
|
+
constructor(info, options) {
|
|
9
|
+
super(info, options);
|
|
10
10
|
this.passedOptions = options;
|
|
11
11
|
this.totalWaitTimeMs = 0;
|
|
12
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SpyTimeMarkerOutlet.js","sourceRoot":"","sources":["../../src/testDoubles/SpyTimeMarkerOutlet.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"SpyTimeMarkerOutlet.js","sourceRoot":"","sources":["../../src/testDoubles/SpyTimeMarkerOutlet.ts"],"names":[],"mappings":";;;;;AAEA,sFAAiE;AAEjE,MAAqB,mBAAoB,SAAQ,0BAAoB;IAIjE,YAAmB,IAAgB,EAAE,OAAyB;QAC1D,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QACpB,IAAI,CAAC,aAAa,GAAG,OAAO,CAAA;QAC5B,IAAI,CAAC,eAAe,GAAG,CAAC,CAAA;IAC5B,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,UAAkB;QAChC,IAAI,CAAC,eAAe,IAAI,UAAU,CAAA;QAClC,OAAO,OAAO,CAAC,OAAO,EAAE,CAAA;IAC5B,CAAC;CACJ;AAdD,sCAcC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consts.js","sourceRoot":"","sources":["../../src/testDoubles/consts.ts"],"names":[],"mappings":";;;AAAa,QAAA,8BAA8B,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAU,CAAA;AAE/D,QAAA,gCAAgC,GAAG;IAC5C,WAAW;IACX,UAAU;IACV,OAAO;IACP,OAAO;IACP,MAAM;IACN,OAAO;CACD,CAAA;AAEG,QAAA,oBAAoB,GAAG;IAChC,WAAW;IACX,SAAS;IACT,UAAU;IACV,QAAQ;IACR,OAAO;IACP,OAAO;IACP,MAAM;IACN,OAAO;CACD,CAAA;AAEG,QAAA,wBAAwB,GAAG;IACpC,SAAS,EAAE,CAAC;IACZ,OAAO,EAAE,CAAC;IACV,QAAQ,EAAE,CAAC;IACX,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;CACX,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { LslOutletOptions } from '
|
|
1
|
+
import { LslOutletOptions } from '../components/LslOutlet';
|
|
2
2
|
export default function generateRandomOutletOptions(): LslOutletOptions;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateRandomOutletOptions.js","sourceRoot":"","sources":["../../src/testDoubles/generateRandomOutletOptions.ts"],"names":[],"mappings":";;AAKA,8CAeC;AApBD,mCAAkC;AAClC,uDAAmD;AAEnD,qCAAyD;AAEzD,SAAwB,2BAA2B;IAC/C,MAAM,gBAAgB,GAAG,IAAA,kBAAS,EAAC,uCAA8B,CAAC,MAAM,CAAC,CAAA;IAEzE,OAAO;QACH,IAAI,EAAE,IAAA,uBAAU,GAAE;QAClB,IAAI,EAAE,IAAA,uBAAU,GAAE;QAClB,YAAY,EAAE,IAAI,KAAK,CAAC,IAAA,kBAAS,EAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAA,uBAAU,GAAE,CAAC;QAC5D,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;QAC9B,aAAa,EAAE,uCAA8B,CAAC,gBAAgB,CAAC;QAC/D,QAAQ,EAAE,IAAA,uBAAU,GAAE;QACtB,YAAY,EAAE,IAAA,uBAAU,GAAE;QAC1B,IAAI,EAAE,IAAA,uBAAU,GAAE;QAClB,SAAS,EAAE,IAAA,kBAAS,EAAC,CAAC,EAAE,EAAE,CAAC;QAC3B,WAAW,EAAE,IAAA,kBAAS,EAAC,CAAC,EAAE,EAAE,CAAC;KACZ,CAAA;AACzB,CAAC"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import AbstractSpruceTest, { generateId } from '@sprucelabs/test-utils'
|
|
2
|
+
import LiblslImpl from '../components/Liblsl'
|
|
3
|
+
import LslInlet from '../components/LslInlet'
|
|
4
|
+
import LslStreamInfo from '../components/LslStreamInfo'
|
|
5
|
+
import TimeMarkerOutletImpl from '../components/TimeMarkerOutlet'
|
|
6
|
+
import FakeLiblsl from '../testDoubles/FakeLiblsl'
|
|
7
|
+
import FakeStreamInfo from '../testDoubles/FakeStreamInfo'
|
|
8
|
+
import { SpyLslInlet } from '../testDoubles/SpyLslInlet'
|
|
9
|
+
import SpyLslStreamInfo from '../testDoubles/SpyLslStreamInfo'
|
|
10
|
+
import SpyTimeMarkerOutlet from '../testDoubles/SpyTimeMarkerOutlet'
|
|
11
|
+
|
|
12
|
+
export default class AbstractNodeLslTest extends AbstractSpruceTest {
|
|
13
|
+
protected static fakeLiblsl: FakeLiblsl
|
|
14
|
+
|
|
15
|
+
protected static async beforeEach() {
|
|
16
|
+
await super.beforeEach()
|
|
17
|
+
|
|
18
|
+
this.setFakeLiblsl()
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
protected static setFakeLiblsl() {
|
|
22
|
+
this.fakeLiblsl = new FakeLiblsl()
|
|
23
|
+
LiblslImpl.setInstance(this.fakeLiblsl)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
protected static setSpyLslStreamInfo() {
|
|
27
|
+
LslStreamInfo.Class = SpyLslStreamInfo
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
protected static setFakeStreamInfo() {
|
|
31
|
+
LslStreamInfo.Class = FakeStreamInfo
|
|
32
|
+
FakeStreamInfo.resetTestDouble()
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
protected static setSpyLslInlet() {
|
|
36
|
+
LslInlet.Class = SpyLslInlet
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
protected static setSpyTimeMarkerOutlet() {
|
|
40
|
+
TimeMarkerOutletImpl.Class = SpyTimeMarkerOutlet
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
protected static readonly channelNames = [generateId(), generateId()]
|
|
44
|
+
protected static readonly infoName = generateId()
|
|
45
|
+
protected static readonly type = generateId()
|
|
46
|
+
protected static readonly sourceId = generateId()
|
|
47
|
+
protected static readonly units = generateId()
|
|
48
|
+
protected static readonly chunkSize = Math.floor(Math.random() * 100)
|
|
49
|
+
protected static readonly maxBuffered = Math.floor(Math.random() * 100)
|
|
50
|
+
}
|
|
@@ -6,18 +6,19 @@ import AbstractSpruceTest, {
|
|
|
6
6
|
generateId,
|
|
7
7
|
} from '@sprucelabs/test-utils'
|
|
8
8
|
import { DataType, OpenParams } from 'ffi-rs'
|
|
9
|
-
import LiblslImpl from '
|
|
9
|
+
import LiblslImpl from '../components/Liblsl'
|
|
10
10
|
import {
|
|
11
11
|
BoundChild,
|
|
12
12
|
BoundDescription,
|
|
13
|
+
BoundInlet,
|
|
13
14
|
BoundOutlet,
|
|
14
15
|
BoundStreamInfo,
|
|
15
16
|
FfiRsDefineOptions,
|
|
16
17
|
Liblsl,
|
|
17
18
|
LiblslBindings,
|
|
18
19
|
LslChannel,
|
|
19
|
-
} from '
|
|
20
|
-
import FakeLiblsl from '
|
|
20
|
+
} from '../nodeLsl.types'
|
|
21
|
+
import FakeLiblsl from '../testDoubles/FakeLiblsl'
|
|
21
22
|
|
|
22
23
|
export default class LiblslTest extends AbstractSpruceTest {
|
|
23
24
|
private static lsl: Liblsl
|
|
@@ -26,12 +27,15 @@ export default class LiblslTest extends AbstractSpruceTest {
|
|
|
26
27
|
private static fakeBindings: LiblslBindings
|
|
27
28
|
private static fakeStreamInfo: BoundStreamInfo
|
|
28
29
|
private static fakeOutlet: BoundOutlet
|
|
30
|
+
private static fakeInlet: BoundInlet
|
|
29
31
|
private static fakeDesc: BoundDescription
|
|
30
32
|
private static fakeChildNamedChannels: BoundChild
|
|
31
33
|
private static createStreamInfoParams?: any[]
|
|
32
34
|
private static appendChildParams: any[] = []
|
|
33
35
|
private static createOutletParams?: any[]
|
|
34
36
|
private static destroyOutletParams?: any[]
|
|
37
|
+
private static createInletParams?: any[]
|
|
38
|
+
private static destroyInletParams?: any[]
|
|
35
39
|
private static localClockParams?: any[]
|
|
36
40
|
private static pushSampleFloatTimestampParams?: any[]
|
|
37
41
|
private static pushSampleStringTimestampParams?: any[]
|
|
@@ -51,6 +55,8 @@ export default class LiblslTest extends AbstractSpruceTest {
|
|
|
51
55
|
delete this.createStreamInfoParams
|
|
52
56
|
delete this.createOutletParams
|
|
53
57
|
delete this.destroyOutletParams
|
|
58
|
+
delete this.createInletParams
|
|
59
|
+
delete this.destroyInletParams
|
|
54
60
|
delete this.pushSampleFloatTimestampParams
|
|
55
61
|
delete this.getDescriptionParams
|
|
56
62
|
this.appendChildParams = []
|
|
@@ -203,6 +209,16 @@ export default class LiblslTest extends AbstractSpruceTest {
|
|
|
203
209
|
retType: DataType.Void,
|
|
204
210
|
paramsType: [DataType.External],
|
|
205
211
|
},
|
|
212
|
+
lsl_create_inlet: {
|
|
213
|
+
library: 'lsl',
|
|
214
|
+
retType: DataType.External,
|
|
215
|
+
paramsType: [DataType.External, DataType.I32, DataType.I32],
|
|
216
|
+
},
|
|
217
|
+
lsl_destroy_inlet: {
|
|
218
|
+
library: 'lsl',
|
|
219
|
+
retType: DataType.Void,
|
|
220
|
+
paramsType: [DataType.External],
|
|
221
|
+
},
|
|
206
222
|
lsl_local_clock: {
|
|
207
223
|
library: 'lsl',
|
|
208
224
|
retType: DataType.Double,
|
|
@@ -395,6 +411,13 @@ export default class LiblslTest extends AbstractSpruceTest {
|
|
|
395
411
|
)
|
|
396
412
|
}
|
|
397
413
|
|
|
414
|
+
@test()
|
|
415
|
+
protected static async canCreateInletWithRequiredParams() {
|
|
416
|
+
const { options, inlet } = this.createRandomInlet()
|
|
417
|
+
assert.isEqualDeep(this.createInletParams, Object.values(options))
|
|
418
|
+
assert.isEqual(inlet, this.fakeInlet)
|
|
419
|
+
}
|
|
420
|
+
|
|
398
421
|
private static createRandomStreamInfo() {
|
|
399
422
|
return this.lsl.createStreamInfo(
|
|
400
423
|
this.generateRandomCreateStreamInfoOptions()
|
|
@@ -402,14 +425,25 @@ export default class LiblslTest extends AbstractSpruceTest {
|
|
|
402
425
|
}
|
|
403
426
|
|
|
404
427
|
private static createRandomOutlet() {
|
|
428
|
+
const options = this.createRandomOptions()
|
|
429
|
+
const outlet = this.lsl.createOutlet(options)
|
|
430
|
+
return { options, outlet }
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
private static createRandomInlet() {
|
|
434
|
+
const options = this.createRandomOptions()
|
|
435
|
+
const inlet = this.lsl.createInlet(options)
|
|
436
|
+
return { options, inlet }
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
private static createRandomOptions() {
|
|
405
440
|
const info = this.createRandomStreamInfo()
|
|
406
441
|
const options = {
|
|
407
442
|
info,
|
|
408
443
|
chunkSize: randomInt(10),
|
|
409
444
|
maxBuffered: randomInt(10),
|
|
410
445
|
}
|
|
411
|
-
|
|
412
|
-
return { options, outlet }
|
|
446
|
+
return options
|
|
413
447
|
}
|
|
414
448
|
|
|
415
449
|
private static generateRandomChannelValues() {
|
|
@@ -441,15 +475,22 @@ export default class LiblslTest extends AbstractSpruceTest {
|
|
|
441
475
|
this.createOutletParams = params
|
|
442
476
|
return this.fakeOutlet
|
|
443
477
|
},
|
|
444
|
-
lsl_destroy_outlet: (params: any[]) => {
|
|
445
|
-
this.destroyOutletParams = params
|
|
446
|
-
},
|
|
447
478
|
lsl_push_sample_ft: (params: any[]) => {
|
|
448
479
|
this.pushSampleFloatTimestampParams = params
|
|
449
480
|
},
|
|
450
481
|
lsl_push_sample_strt: (params: any[]) => {
|
|
451
482
|
this.pushSampleStringTimestampParams = params
|
|
452
483
|
},
|
|
484
|
+
lsl_destroy_outlet: (params: any[]) => {
|
|
485
|
+
this.destroyOutletParams = params
|
|
486
|
+
},
|
|
487
|
+
lsl_create_inlet: (params: any[]) => {
|
|
488
|
+
this.createInletParams = params
|
|
489
|
+
return this.fakeInlet
|
|
490
|
+
},
|
|
491
|
+
lsl_destroy_inlet: (params: any[]) => {
|
|
492
|
+
this.destroyInletParams = params
|
|
493
|
+
},
|
|
453
494
|
lsl_local_clock: (params: []) => {
|
|
454
495
|
this.localClockParams = params
|
|
455
496
|
return new Date().getTime()
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { test, assert, errorAssert } from '@sprucelabs/test-utils'
|
|
2
|
+
import LslInlet, { LslInletOptions } from '../components/LslInlet'
|
|
3
|
+
import FakeStreamInfo from '../testDoubles/FakeStreamInfo'
|
|
4
|
+
import { SpyLslInlet } from '../testDoubles/SpyLslInlet'
|
|
5
|
+
import AbstractNodeLslTest from './AbstractNodeLslTest'
|
|
6
|
+
|
|
7
|
+
export default class LslInletTest extends AbstractNodeLslTest {
|
|
8
|
+
private static instance: SpyLslInlet
|
|
9
|
+
|
|
10
|
+
protected static async beforeEach() {
|
|
11
|
+
await super.beforeEach()
|
|
12
|
+
|
|
13
|
+
this.setSpyLslInlet()
|
|
14
|
+
this.setFakeStreamInfo()
|
|
15
|
+
|
|
16
|
+
this.instance = this.LslInlet()
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
@test()
|
|
20
|
+
protected static async canCreateLslInlet() {
|
|
21
|
+
assert.isTruthy(this.instance, 'Instance should be created!')
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@test()
|
|
25
|
+
protected static async throwsWithMissingRequiredOptions() {
|
|
26
|
+
const err = assert.doesThrow(
|
|
27
|
+
// @ts-ignore
|
|
28
|
+
() => LslInlet.Create()
|
|
29
|
+
)
|
|
30
|
+
errorAssert.assertError(err, 'MISSING_PARAMETERS', {
|
|
31
|
+
parameters: [
|
|
32
|
+
'channelNames',
|
|
33
|
+
'channelFormat',
|
|
34
|
+
'sampleRate',
|
|
35
|
+
'chunkSize',
|
|
36
|
+
'maxBuffered',
|
|
37
|
+
],
|
|
38
|
+
})
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
@test()
|
|
42
|
+
protected static async createsStreamInfoWithExpectedOptions() {
|
|
43
|
+
assert.isEqualDeep(
|
|
44
|
+
FakeStreamInfo.callsToConstructor[0],
|
|
45
|
+
{
|
|
46
|
+
channelNames: this.channelNames,
|
|
47
|
+
channelFormat: 'float32',
|
|
48
|
+
sampleRate: 0,
|
|
49
|
+
name: this.infoName,
|
|
50
|
+
type: this.type,
|
|
51
|
+
sourceId: this.sourceId,
|
|
52
|
+
},
|
|
53
|
+
'Stream info should have expected options!'
|
|
54
|
+
)
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
@test()
|
|
58
|
+
protected static async uniqueNameHasSetPrefix() {
|
|
59
|
+
const instance = this.LslInlet({ name: undefined })
|
|
60
|
+
|
|
61
|
+
assert.doesInclude(
|
|
62
|
+
instance.getName(),
|
|
63
|
+
'lsl-inlet-',
|
|
64
|
+
'Name should have set prefix!'
|
|
65
|
+
)
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
@test()
|
|
69
|
+
protected static async callsBindingsToCreateLslInlet() {
|
|
70
|
+
const fakeInfo = this.instance.getStreamInfo()
|
|
71
|
+
|
|
72
|
+
assert.isTruthy(fakeInfo, 'Should have created stream info!')
|
|
73
|
+
|
|
74
|
+
assert.isEqualDeep(
|
|
75
|
+
this.fakeLiblsl.lastCreateInletOptions,
|
|
76
|
+
{
|
|
77
|
+
info: fakeInfo.boundStreamInfo,
|
|
78
|
+
chunkSize: this.chunkSize,
|
|
79
|
+
maxBuffered: this.maxBuffered,
|
|
80
|
+
},
|
|
81
|
+
'Should have called createInlet!'
|
|
82
|
+
)
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
private static LslInlet(options?: Partial<LslInletOptions>) {
|
|
86
|
+
const defaultOptions = {
|
|
87
|
+
channelNames: this.channelNames,
|
|
88
|
+
channelFormat: 'float32',
|
|
89
|
+
sampleRate: 0,
|
|
90
|
+
name: this.infoName,
|
|
91
|
+
type: this.type,
|
|
92
|
+
sourceId: this.sourceId,
|
|
93
|
+
chunkSize: this.chunkSize,
|
|
94
|
+
maxBuffered: this.maxBuffered,
|
|
95
|
+
...options,
|
|
96
|
+
} as LslInletOptions
|
|
97
|
+
return LslInlet.Create(defaultOptions) as SpyLslInlet
|
|
98
|
+
}
|
|
99
|
+
}
|
|
@@ -1,38 +1,29 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
generateId,
|
|
6
|
-
} from '@sprucelabs/test-utils'
|
|
7
|
-
import LiblslImpl from '../../implementations/Liblsl'
|
|
8
|
-
import LslOutletImpl, {
|
|
9
|
-
LslOutletOptions,
|
|
10
|
-
} from '../../implementations/LslOutlet'
|
|
11
|
-
import { LslSample } from '../../nodeLsl.types'
|
|
12
|
-
import FakeLiblsl from '../../testDoubles/FakeLiblsl'
|
|
1
|
+
import { test, assert, errorAssert, generateId } from '@sprucelabs/test-utils'
|
|
2
|
+
import LslOutletImpl, { LslOutletOptions } from '../components/LslOutlet'
|
|
3
|
+
import { StreamInfo } from '../components/LslStreamInfo'
|
|
4
|
+
import { LslSample } from '../nodeLsl.types'
|
|
13
5
|
import {
|
|
14
|
-
TEST_CHANNEL_FORMATS_MAP,
|
|
15
6
|
TEST_SUPPORTED_CHANNEL_FORMATS,
|
|
16
7
|
TEST_UNSUPPORTED_CHANNEL_FORMATS,
|
|
17
8
|
TestChannelFormat,
|
|
18
|
-
} from '../
|
|
19
|
-
import generateRandomOutletOptions from '../support/generateRandomOutletOptions'
|
|
9
|
+
} from '../testDoubles/consts'
|
|
20
10
|
|
|
21
|
-
|
|
22
|
-
|
|
11
|
+
import FakeStreamInfo from '../testDoubles/FakeStreamInfo'
|
|
12
|
+
import generateRandomOutletOptions from '../testDoubles/generateRandomOutletOptions'
|
|
13
|
+
import AbstractNodeLslTest from './AbstractNodeLslTest'
|
|
14
|
+
|
|
15
|
+
export default class LslOutletTest extends AbstractNodeLslTest {
|
|
23
16
|
private static randomOutletOptions: LslOutletOptions
|
|
24
|
-
private static channelFormatIdx: number
|
|
25
17
|
|
|
26
18
|
protected static async beforeEach() {
|
|
27
19
|
await super.beforeEach()
|
|
20
|
+
|
|
28
21
|
delete LslOutletImpl.Class
|
|
29
|
-
this.randomOutletOptions = generateRandomOutletOptions()
|
|
30
22
|
|
|
31
|
-
|
|
32
|
-
this.channelFormatIdx = TEST_CHANNEL_FORMATS_MAP[channelFormat]
|
|
33
|
-
this.fakeLiblsl = new FakeLiblsl()
|
|
23
|
+
this.randomOutletOptions = generateRandomOutletOptions()
|
|
34
24
|
|
|
35
|
-
|
|
25
|
+
this.setFakeLiblsl()
|
|
26
|
+
this.setFakeStreamInfo()
|
|
36
27
|
}
|
|
37
28
|
|
|
38
29
|
@test()
|
|
@@ -45,14 +36,14 @@ export default class LslOutletTest extends AbstractSpruceTest {
|
|
|
45
36
|
parameters: [
|
|
46
37
|
'name',
|
|
47
38
|
'type',
|
|
39
|
+
'sourceId',
|
|
48
40
|
'channelNames',
|
|
49
|
-
'sampleRate',
|
|
50
41
|
'channelFormat',
|
|
51
|
-
'
|
|
52
|
-
'manufacturer',
|
|
53
|
-
'unit',
|
|
42
|
+
'sampleRate',
|
|
54
43
|
'chunkSize',
|
|
55
44
|
'maxBuffered',
|
|
45
|
+
'manufacturer',
|
|
46
|
+
'unit',
|
|
56
47
|
],
|
|
57
48
|
})
|
|
58
49
|
}
|
|
@@ -183,19 +174,14 @@ export default class LslOutletTest extends AbstractSpruceTest {
|
|
|
183
174
|
protected static async constructionCreatesStreamInfo() {
|
|
184
175
|
await this.Outlet()
|
|
185
176
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
delete options.channelNames
|
|
195
|
-
|
|
196
|
-
assert.isEqualDeep(this.fakeLiblsl.lastCreateStreamInfoOptions, {
|
|
197
|
-
...options,
|
|
198
|
-
channelFormat: this.channelFormatIdx,
|
|
177
|
+
assert.isEqualDeep(FakeStreamInfo.callsToConstructor[0], {
|
|
178
|
+
channelNames: this.randomOutletOptions.channelNames,
|
|
179
|
+
channelFormat: this.randomOutletOptions.channelFormat,
|
|
180
|
+
sampleRate: this.randomOutletOptions.sampleRate,
|
|
181
|
+
name: this.randomOutletOptions.name,
|
|
182
|
+
type: this.randomOutletOptions.type,
|
|
183
|
+
sourceId: this.randomOutletOptions.sourceId,
|
|
184
|
+
units: this.randomOutletOptions.unit,
|
|
199
185
|
})
|
|
200
186
|
}
|
|
201
187
|
|
|
@@ -207,27 +193,6 @@ export default class LslOutletTest extends AbstractSpruceTest {
|
|
|
207
193
|
assert.isInstanceOf(instance, CheckingOutlet)
|
|
208
194
|
}
|
|
209
195
|
|
|
210
|
-
@test('can add one label to channels', [generateId()])
|
|
211
|
-
@test('can add two labels to channels', [generateId(), generateId()])
|
|
212
|
-
protected static async appendsChannelsBasedOnCount(labels: string[]) {
|
|
213
|
-
const type = generateId()
|
|
214
|
-
const unit = generateId()
|
|
215
|
-
|
|
216
|
-
await this.Outlet({ channelNames: labels, type, unit })
|
|
217
|
-
|
|
218
|
-
assert.isEqualDeep(
|
|
219
|
-
this.fakeLiblsl.lastAppendChannelsToStreamInfoOptions,
|
|
220
|
-
{
|
|
221
|
-
info: this.fakeLiblsl.streamInfo,
|
|
222
|
-
channels: labels.map((label) => ({
|
|
223
|
-
label,
|
|
224
|
-
type,
|
|
225
|
-
unit,
|
|
226
|
-
})),
|
|
227
|
-
}
|
|
228
|
-
)
|
|
229
|
-
}
|
|
230
|
-
|
|
231
196
|
@test()
|
|
232
197
|
protected static async canDestroyOutlet() {
|
|
233
198
|
const outlet = await this.Outlet()
|
|
@@ -243,7 +208,7 @@ export default class LslOutletTest extends AbstractSpruceTest {
|
|
|
243
208
|
outlet.pushSample([2.0])
|
|
244
209
|
outlet.pushSample([3.0])
|
|
245
210
|
|
|
246
|
-
assert.isEqual(this.fakeLiblsl.
|
|
211
|
+
assert.isEqual(this.fakeLiblsl.createOutletHitCount, 1)
|
|
247
212
|
}
|
|
248
213
|
|
|
249
214
|
@test()
|
|
@@ -309,7 +274,7 @@ export default class LslOutletTest extends AbstractSpruceTest {
|
|
|
309
274
|
}
|
|
310
275
|
|
|
311
276
|
class CheckingOutlet extends LslOutletImpl {
|
|
312
|
-
public constructor(options: LslOutletOptions) {
|
|
313
|
-
super(options)
|
|
277
|
+
public constructor(info: StreamInfo, options: LslOutletOptions) {
|
|
278
|
+
super(info, options)
|
|
314
279
|
}
|
|
315
280
|
}
|