@neurodevs/node-lsl 11.4.1 → 12.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/.vscode/tasks.json +19 -1
- package/README.md +44 -34
- package/build/.spruce/settings.json +1 -3
- package/build/__tests__/{AbstractLslTest.d.ts → AbstractPackageTest.d.ts} +6 -4
- package/build/__tests__/AbstractPackageTest.js +58 -0
- package/build/__tests__/AbstractPackageTest.js.map +1 -0
- package/build/__tests__/{modules → impl}/LiblslAdapter.test.d.ts +5 -8
- package/build/__tests__/{modules → impl}/LiblslAdapter.test.js +37 -86
- package/build/__tests__/impl/LiblslAdapter.test.js.map +1 -0
- package/build/__tests__/{modules/EventMarkerOutlet.test.d.ts → impl/LslEventMarkerOutlet.test.d.ts} +5 -4
- package/build/__tests__/{modules/EventMarkerOutlet.test.js → impl/LslEventMarkerOutlet.test.js} +32 -25
- package/build/__tests__/impl/LslEventMarkerOutlet.test.js.map +1 -0
- package/build/__tests__/{modules → impl}/LslStreamInfo.test.d.ts +3 -4
- package/build/__tests__/{modules → impl}/LslStreamInfo.test.js +17 -27
- package/build/__tests__/impl/LslStreamInfo.test.js.map +1 -0
- package/build/__tests__/impl/LslStreamInlet.test.d.ts +10 -0
- package/build/__tests__/{modules → impl}/LslStreamInlet.test.js +9 -26
- package/build/__tests__/impl/LslStreamInlet.test.js.map +1 -0
- package/build/__tests__/{modules → impl}/LslStreamOutlet.test.d.ts +9 -7
- package/build/__tests__/{modules → impl}/LslStreamOutlet.test.js +40 -57
- package/build/__tests__/impl/LslStreamOutlet.test.js.map +1 -0
- package/build/__tests__/impl/LslWebSocketBridge.test.d.ts +7 -0
- package/build/__tests__/impl/LslWebSocketBridge.test.js +63 -0
- package/build/__tests__/impl/LslWebSocketBridge.test.js.map +1 -0
- package/build/assertions.d.ts +1 -1
- package/build/assertions.js +10 -31
- package/build/assertions.js.map +1 -1
- package/build/{modules → impl}/LiblslAdapter.d.ts +3 -1
- package/build/{modules → impl}/LiblslAdapter.js +15 -44
- package/build/impl/LiblslAdapter.js.map +1 -0
- package/build/impl/LslEventMarkerOutlet.d.ts +23 -0
- package/build/{modules/EventMarkerOutlet.js → impl/LslEventMarkerOutlet.js} +6 -6
- package/build/impl/LslEventMarkerOutlet.js.map +1 -0
- package/build/{modules → impl}/LslStreamInfo.js +4 -6
- package/build/impl/LslStreamInfo.js.map +1 -0
- package/build/{modules → impl}/LslStreamInlet.d.ts +8 -8
- package/build/{modules → impl}/LslStreamInlet.js +6 -14
- package/build/impl/LslStreamInlet.js.map +1 -0
- package/build/{modules → impl}/LslStreamOutlet.d.ts +8 -8
- package/build/{modules → impl}/LslStreamOutlet.js +2 -15
- package/build/impl/LslStreamOutlet.js.map +1 -0
- package/build/impl/LslWebSocketBridge.d.ts +8 -0
- package/build/impl/LslWebSocketBridge.js +10 -0
- package/build/impl/LslWebSocketBridge.js.map +1 -0
- package/build/index.d.ts +26 -22
- package/build/index.js +41 -34
- package/build/index.js.map +1 -1
- package/build/scripts/runLslEventMarkerOutlet.d.ts +1 -0
- package/build/scripts/runLslEventMarkerOutlet.js +23 -0
- package/build/scripts/runLslEventMarkerOutlet.js.map +1 -0
- package/build/scripts/runLslStreamOutlet.d.ts +1 -0
- package/build/scripts/runLslStreamOutlet.js +25 -0
- package/build/scripts/runLslStreamOutlet.js.map +1 -0
- package/build/testDoubles/{MarkerOutlet/FakeMarkerOutlet.d.ts → EventMarkerOutlet/FakeEventMarkerOutlet.d.ts} +2 -2
- package/build/testDoubles/EventMarkerOutlet/FakeEventMarkerOutlet.js +29 -0
- package/build/testDoubles/EventMarkerOutlet/FakeEventMarkerOutlet.js.map +1 -0
- package/build/testDoubles/{MarkerOutlet/MockMarkerOutlet.d.ts → EventMarkerOutlet/MockEventMarkerOutlet.d.ts} +2 -2
- package/build/testDoubles/{MarkerOutlet/MockMarkerOutlet.js → EventMarkerOutlet/MockEventMarkerOutlet.js} +3 -3
- package/build/testDoubles/EventMarkerOutlet/MockEventMarkerOutlet.js.map +1 -0
- package/build/testDoubles/EventMarkerOutlet/SpyEventMarkerOutlet.d.ts +9 -0
- package/build/testDoubles/{MarkerOutlet/SpyMarkerOutlet.js → EventMarkerOutlet/SpyEventMarkerOutlet.js} +8 -8
- package/build/testDoubles/EventMarkerOutlet/SpyEventMarkerOutlet.js.map +1 -0
- package/build/testDoubles/{MarkerOutlet/ThrowingMarkerOutlet.d.ts → EventMarkerOutlet/ThrowingEventMarkerOutlet.d.ts} +2 -2
- package/build/testDoubles/{MarkerOutlet/ThrowingMarkerOutlet.js → EventMarkerOutlet/ThrowingEventMarkerOutlet.js} +3 -3
- package/build/testDoubles/EventMarkerOutlet/ThrowingEventMarkerOutlet.js.map +1 -0
- package/build/testDoubles/StreamInfo/FakeStreamInfo.d.ts +1 -1
- package/build/testDoubles/StreamInfo/SpyStreamInfo.d.ts +1 -1
- package/build/testDoubles/StreamInfo/SpyStreamInfo.js +1 -1
- package/build/testDoubles/StreamInfo/SpyStreamInfo.js.map +1 -1
- package/build/testDoubles/StreamInlet/FakeStreamInlet.d.ts +10 -0
- package/build/testDoubles/StreamInlet/FakeStreamInlet.js +16 -0
- package/build/testDoubles/StreamInlet/FakeStreamInlet.js.map +1 -0
- package/build/testDoubles/StreamInlet/SpyStreamInlet.d.ts +7 -0
- package/build/testDoubles/{LslInlet/SpyLslInlet.js → StreamInlet/SpyStreamInlet.js} +5 -5
- package/build/testDoubles/StreamInlet/SpyStreamInlet.js.map +1 -0
- package/build/testDoubles/{LslOutlet/FakeLslOutlet.d.ts → StreamOutlet/FakeStreamOutlet.d.ts} +9 -10
- package/build/testDoubles/StreamOutlet/FakeStreamOutlet.js +62 -0
- package/build/testDoubles/StreamOutlet/FakeStreamOutlet.js.map +1 -0
- package/build/testDoubles/StreamTransportBridge/FakeStreamTransportBridge.d.ts +6 -0
- package/build/testDoubles/StreamTransportBridge/FakeStreamTransportBridge.js +13 -0
- package/build/testDoubles/StreamTransportBridge/FakeStreamTransportBridge.js.map +1 -0
- package/build/testDoubles/generateRandomOutletOptions.d.ts +2 -2
- package/build/testDoubles/generateRandomOutletOptions.js +10 -7
- package/build/testDoubles/generateRandomOutletOptions.js.map +1 -1
- package/build/types.d.ts +3 -3
- package/package.json +26 -18
- package/src/.spruce/settings.json +1 -3
- package/src/__tests__/{AbstractLslTest.ts → AbstractPackageTest.ts} +23 -17
- package/src/__tests__/{modules → impl}/LiblslAdapter.test.ts +36 -76
- package/src/__tests__/{modules/EventMarkerOutlet.test.ts → impl/LslEventMarkerOutlet.test.ts} +38 -27
- package/src/__tests__/{modules → impl}/LslStreamInfo.test.ts +7 -17
- package/src/__tests__/{modules → impl}/LslStreamInlet.test.ts +13 -30
- package/src/__tests__/{modules → impl}/LslStreamOutlet.test.ts +71 -63
- package/src/__tests__/impl/LslWebSocketBridge.test.ts +23 -0
- package/src/assertions.ts +19 -30
- package/src/{modules → impl}/LiblslAdapter.ts +18 -44
- package/src/{modules/EventMarkerOutlet.ts → impl/LslEventMarkerOutlet.ts} +16 -11
- package/src/{modules → impl}/LslStreamInfo.ts +1 -3
- package/src/{modules → impl}/LslStreamInlet.ts +14 -22
- package/src/{modules → impl}/LslStreamOutlet.ts +12 -26
- package/src/impl/LslWebSocketBridge.ts +13 -0
- package/src/index.ts +37 -29
- package/src/scripts/runLslEventMarkerOutlet.ts +23 -0
- package/src/scripts/runLslStreamOutlet.ts +22 -0
- package/src/testDoubles/{MarkerOutlet/FakeMarkerOutlet.ts → EventMarkerOutlet/FakeEventMarkerOutlet.ts} +6 -6
- package/src/testDoubles/{MarkerOutlet/MockMarkerOutlet.ts → EventMarkerOutlet/MockEventMarkerOutlet.ts} +2 -2
- package/src/testDoubles/EventMarkerOutlet/SpyEventMarkerOutlet.ts +24 -0
- package/src/testDoubles/{MarkerOutlet/ThrowingMarkerOutlet.ts → EventMarkerOutlet/ThrowingEventMarkerOutlet.ts} +2 -2
- package/src/testDoubles/StreamInfo/FakeStreamInfo.ts +1 -1
- package/src/testDoubles/StreamInfo/SpyStreamInfo.ts +1 -1
- package/src/testDoubles/StreamInlet/FakeStreamInlet.ts +20 -0
- package/src/testDoubles/StreamInlet/SpyStreamInlet.ts +16 -0
- package/src/testDoubles/{LslOutlet/FakeLslOutlet.ts → StreamOutlet/FakeStreamOutlet.ts} +17 -18
- package/src/testDoubles/StreamTransportBridge/FakeStreamTransportBridge.ts +15 -0
- package/src/testDoubles/generateRandomOutletOptions.ts +3 -3
- package/src/types.ts +3 -3
- package/build/.spruce/errors/errors.types.d.ts +0 -21
- package/build/.spruce/errors/errors.types.js +0 -3
- package/build/.spruce/errors/errors.types.js.map +0 -1
- package/build/.spruce/errors/nodeLsl/failedToLoadLiblsl.schema.d.ts +0 -3
- package/build/.spruce/errors/nodeLsl/failedToLoadLiblsl.schema.js +0 -19
- package/build/.spruce/errors/nodeLsl/failedToLoadLiblsl.schema.js.map +0 -1
- package/build/.spruce/errors/options.types.d.ts +0 -7
- package/build/.spruce/errors/options.types.js +0 -3
- package/build/.spruce/errors/options.types.js.map +0 -1
- package/build/.spruce/schemas/fields/fieldClassMap.d.ts +0 -2
- package/build/.spruce/schemas/fields/fieldClassMap.js +0 -5
- package/build/.spruce/schemas/fields/fieldClassMap.js.map +0 -1
- package/build/.spruce/schemas/fields/fields.types.d.ts +0 -1
- package/build/.spruce/schemas/fields/fields.types.js +0 -3
- package/build/.spruce/schemas/fields/fields.types.js.map +0 -1
- package/build/__tests__/AbstractLslTest.js +0 -86
- package/build/__tests__/AbstractLslTest.js.map +0 -1
- package/build/__tests__/modules/EventMarkerOutlet.test.js.map +0 -1
- package/build/__tests__/modules/LiblslAdapter.test.js.map +0 -1
- package/build/__tests__/modules/LslStreamInfo.test.js.map +0 -1
- package/build/__tests__/modules/LslStreamInlet.test.d.ts +0 -11
- package/build/__tests__/modules/LslStreamInlet.test.js.map +0 -1
- package/build/__tests__/modules/LslStreamOutlet.test.js.map +0 -1
- package/build/errors/SpruceError.d.ts +0 -6
- package/build/errors/SpruceError.js +0 -26
- package/build/errors/SpruceError.js.map +0 -1
- package/build/errors/failedToLoadLiblsl.builder.d.ts +0 -11
- package/build/errors/failedToLoadLiblsl.builder.js +0 -14
- package/build/errors/failedToLoadLiblsl.builder.js.map +0 -1
- package/build/modules/EventMarkerOutlet.d.ts +0 -23
- package/build/modules/EventMarkerOutlet.js.map +0 -1
- package/build/modules/LiblslAdapter.js.map +0 -1
- package/build/modules/LslStreamInfo.js.map +0 -1
- package/build/modules/LslStreamInlet.js.map +0 -1
- package/build/modules/LslStreamOutlet.js.map +0 -1
- package/build/testDoubles/LslInlet/FakeLslInlet.d.ts +0 -11
- package/build/testDoubles/LslInlet/FakeLslInlet.js +0 -16
- package/build/testDoubles/LslInlet/FakeLslInlet.js.map +0 -1
- package/build/testDoubles/LslInlet/SpyLslInlet.d.ts +0 -7
- package/build/testDoubles/LslInlet/SpyLslInlet.js.map +0 -1
- package/build/testDoubles/LslOutlet/FakeLslOutlet.js +0 -59
- package/build/testDoubles/LslOutlet/FakeLslOutlet.js.map +0 -1
- package/build/testDoubles/MarkerOutlet/FakeMarkerOutlet.js +0 -29
- package/build/testDoubles/MarkerOutlet/FakeMarkerOutlet.js.map +0 -1
- package/build/testDoubles/MarkerOutlet/MockMarkerOutlet.js.map +0 -1
- package/build/testDoubles/MarkerOutlet/SpyMarkerOutlet.d.ts +0 -9
- package/build/testDoubles/MarkerOutlet/SpyMarkerOutlet.js.map +0 -1
- package/build/testDoubles/MarkerOutlet/ThrowingMarkerOutlet.js.map +0 -1
- package/src/.spruce/errors/errors.types.ts +0 -37
- package/src/.spruce/errors/nodeLsl/failedToLoadLiblsl.schema.ts +0 -22
- package/src/.spruce/errors/options.types.ts +0 -10
- package/src/.spruce/schemas/fields/fieldClassMap.ts +0 -6
- package/src/.spruce/schemas/fields/fields.types.ts +0 -1
- package/src/errors/SpruceError.ts +0 -23
- package/src/errors/failedToLoadLiblsl.builder.ts +0 -12
- package/src/testDoubles/LslInlet/FakeLslInlet.ts +0 -22
- package/src/testDoubles/LslInlet/SpyLslInlet.ts +0 -16
- package/src/testDoubles/MarkerOutlet/SpyMarkerOutlet.ts +0 -24
- /package/build/{modules → impl}/LslStreamInfo.d.ts +0 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
class FakeStreamTransportBridge {
|
|
4
|
+
constructor() {
|
|
5
|
+
FakeStreamTransportBridge.numCallsToConstructor++;
|
|
6
|
+
}
|
|
7
|
+
static resetTestDouble() {
|
|
8
|
+
FakeStreamTransportBridge.numCallsToConstructor = 0;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
FakeStreamTransportBridge.numCallsToConstructor = 0;
|
|
12
|
+
exports.default = FakeStreamTransportBridge;
|
|
13
|
+
//# sourceMappingURL=FakeStreamTransportBridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FakeStreamTransportBridge.js","sourceRoot":"","sources":["../../../src/testDoubles/StreamTransportBridge/FakeStreamTransportBridge.ts"],"names":[],"mappings":";;AAEA,MAAqB,yBAAyB;IAK1C;QACI,yBAAyB,CAAC,qBAAqB,EAAE,CAAA;IACrD,CAAC;IAEM,MAAM,CAAC,eAAe;QACzB,yBAAyB,CAAC,qBAAqB,GAAG,CAAC,CAAA;IACvD,CAAC;;AARa,+CAAqB,GAAG,CAAC,CAAA;kBAHtB,yBAAyB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export default function generateRandomOutletOptions():
|
|
1
|
+
import { StreamOutletOptions } from '../impl/LslStreamOutlet';
|
|
2
|
+
export default function generateRandomOutletOptions(): StreamOutletOptions;
|
|
@@ -1,20 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.default = generateRandomOutletOptions;
|
|
4
7
|
const crypto_1 = require("crypto");
|
|
5
|
-
const
|
|
8
|
+
const generate_id_1 = __importDefault(require("@neurodevs/generate-id"));
|
|
6
9
|
const consts_1 = require("./consts");
|
|
7
10
|
function generateRandomOutletOptions() {
|
|
8
11
|
const randomChannelIdx = (0, crypto_1.randomInt)(consts_1.TEST_SUPPORTED_CHANNEL_FORMATS.length);
|
|
9
12
|
return {
|
|
10
|
-
name: (0,
|
|
11
|
-
type: (0,
|
|
12
|
-
channelNames: new Array((0, crypto_1.randomInt)(1, 10)).fill((0,
|
|
13
|
+
name: (0, generate_id_1.default)(),
|
|
14
|
+
type: (0, generate_id_1.default)(),
|
|
15
|
+
channelNames: new Array((0, crypto_1.randomInt)(1, 10)).fill((0, generate_id_1.default)()),
|
|
13
16
|
sampleRate: Math.random() * 10,
|
|
14
17
|
channelFormat: consts_1.TEST_SUPPORTED_CHANNEL_FORMATS[randomChannelIdx],
|
|
15
|
-
sourceId: (0,
|
|
16
|
-
manufacturer: (0,
|
|
17
|
-
unit: (0,
|
|
18
|
+
sourceId: (0, generate_id_1.default)(),
|
|
19
|
+
manufacturer: (0, generate_id_1.default)(),
|
|
20
|
+
unit: (0, generate_id_1.default)(),
|
|
18
21
|
chunkSize: (0, crypto_1.randomInt)(0, 10),
|
|
19
22
|
maxBuffered: (0, crypto_1.randomInt)(0, 10),
|
|
20
23
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateRandomOutletOptions.js","sourceRoot":"","sources":["../../src/testDoubles/generateRandomOutletOptions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"generateRandomOutletOptions.js","sourceRoot":"","sources":["../../src/testDoubles/generateRandomOutletOptions.ts"],"names":[],"mappings":";;;;;AAKA,8CAeC;AApBD,mCAAkC;AAClC,yEAA+C;AAE/C,qCAAyD;AAEzD,SAAwB,2BAA2B;IAC/C,MAAM,gBAAgB,GAAG,IAAA,kBAAS,EAAC,uCAA8B,CAAC,MAAM,CAAC,CAAA;IAEzE,OAAO;QACH,IAAI,EAAE,IAAA,qBAAU,GAAE;QAClB,IAAI,EAAE,IAAA,qBAAU,GAAE;QAClB,YAAY,EAAE,IAAI,KAAK,CAAC,IAAA,kBAAS,EAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAA,qBAAU,GAAE,CAAC;QAC5D,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;QAC9B,aAAa,EAAE,uCAA8B,CAAC,gBAAgB,CAAC;QAC/D,QAAQ,EAAE,IAAA,qBAAU,GAAE;QACtB,YAAY,EAAE,IAAA,qBAAU,GAAE;QAC1B,IAAI,EAAE,IAAA,qBAAU,GAAE;QAClB,SAAS,EAAE,IAAA,kBAAS,EAAC,CAAC,EAAE,EAAE,CAAC;QAC3B,WAAW,EAAE,IAAA,kBAAS,EAAC,CAAC,EAAE,EAAE,CAAC;KACT,CAAA;AAC5B,CAAC"}
|
package/build/types.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { FuncObj, FieldType } from 'ffi-rs';
|
|
2
2
|
import { CHANNEL_FORMATS } from './consts';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
export type StreamFixuture =
|
|
3
|
+
import { StreamInlet } from './impl/LslStreamInlet';
|
|
4
|
+
import { StreamOutlet } from './impl/LslStreamOutlet';
|
|
5
|
+
export type StreamFixuture = StreamOutlet | StreamInlet;
|
|
6
6
|
export type ChannelFormat = (typeof CHANNEL_FORMATS)[number];
|
|
7
7
|
export interface DurationMarker {
|
|
8
8
|
name: string;
|
package/package.json
CHANGED
|
@@ -1,11 +1,23 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@neurodevs/node-lsl",
|
|
3
|
-
"version": "
|
|
4
|
-
"
|
|
3
|
+
"version": "12.0.0",
|
|
4
|
+
"description": "Lab Streaming Layer (LSL) bindings for Node",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"nodejs",
|
|
7
|
+
"typescript",
|
|
8
|
+
"tdd"
|
|
9
|
+
],
|
|
10
|
+
"license": "MIT",
|
|
11
|
+
"author": "Eric Yates <hello@ericthecurious.com>",
|
|
12
|
+
"homepage": "https://github.com/neurodevs/node-lsl",
|
|
5
13
|
"repository": {
|
|
6
14
|
"type": "git",
|
|
7
15
|
"url": "git+https://github.com/neurodevs/node-lsl.git"
|
|
8
16
|
},
|
|
17
|
+
"bugs": {
|
|
18
|
+
"url": "https://github.com/neurodevs/node-lsl/issues"
|
|
19
|
+
},
|
|
20
|
+
"main": "build/index.js",
|
|
9
21
|
"scripts": {
|
|
10
22
|
"build.ci": "yarn run build.tsc && yarn run build.resolve-paths && yarn run lint",
|
|
11
23
|
"build.dev": "yarn run build.tsc --sourceMap ; yarn run resolve-paths.lint",
|
|
@@ -30,7 +42,14 @@
|
|
|
30
42
|
"watch.tsc": "tsc -w",
|
|
31
43
|
"test.rs": "node build/test.js"
|
|
32
44
|
},
|
|
45
|
+
"dependencies": {
|
|
46
|
+
"ffi-rs": "^1.0.98",
|
|
47
|
+
"node-gyp": "^10.2.0",
|
|
48
|
+
"ref-array-napi": "^1.2.2",
|
|
49
|
+
"ref-napi": "^3.0.3"
|
|
50
|
+
},
|
|
33
51
|
"devDependencies": {
|
|
52
|
+
"@neurodevs/generate-id": "^1.0.0",
|
|
34
53
|
"@sprucelabs/jest-json-reporter": "^8.0.542",
|
|
35
54
|
"@sprucelabs/resolve-path-aliases": "^2.0.516",
|
|
36
55
|
"@sprucelabs/test": "^9.0.59",
|
|
@@ -48,13 +67,6 @@
|
|
|
48
67
|
"tsc-watch": "^6.2.1",
|
|
49
68
|
"typescript": "^5.6.3"
|
|
50
69
|
},
|
|
51
|
-
"description": "Lab Streaming Layer (LSL) bindings for Node",
|
|
52
|
-
"skill": {
|
|
53
|
-
"namespace": "node-lsl",
|
|
54
|
-
"upgradeIgnoreList": [
|
|
55
|
-
"@sprucelabs/spruce-test-fixtures"
|
|
56
|
-
]
|
|
57
|
-
},
|
|
58
70
|
"jest": {
|
|
59
71
|
"testRunner": "jest-circus/runner",
|
|
60
72
|
"maxWorkers": 4,
|
|
@@ -73,14 +85,10 @@
|
|
|
73
85
|
"^#spruce/(.*)$": "<rootDir>/build/.spruce/$1"
|
|
74
86
|
}
|
|
75
87
|
},
|
|
76
|
-
"
|
|
77
|
-
"
|
|
78
|
-
"
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
"ffi-rs": "^1.0.98",
|
|
82
|
-
"node-gyp": "^10.2.0",
|
|
83
|
-
"ref-array-napi": "^1.2.2",
|
|
84
|
-
"ref-napi": "^3.0.3"
|
|
88
|
+
"skill": {
|
|
89
|
+
"namespace": "node-lsl",
|
|
90
|
+
"upgradeIgnoreList": [
|
|
91
|
+
"@sprucelabs/spruce-test-fixtures"
|
|
92
|
+
]
|
|
85
93
|
}
|
|
86
94
|
}
|
|
@@ -1,18 +1,19 @@
|
|
|
1
|
-
import AbstractSpruceTest
|
|
2
|
-
import
|
|
3
|
-
import LiblslAdapter from '../
|
|
4
|
-
import
|
|
5
|
-
import
|
|
1
|
+
import AbstractSpruceTest from '@sprucelabs/test-utils'
|
|
2
|
+
import generateId from '@neurodevs/generate-id'
|
|
3
|
+
import LiblslAdapter from '../impl/LiblslAdapter'
|
|
4
|
+
import LslEventMarkerOutlet from '../impl/LslEventMarkerOutlet'
|
|
5
|
+
import LslStreamInfo from '../impl/LslStreamInfo'
|
|
6
|
+
import LslStreamInlet from '../impl/LslStreamInlet'
|
|
6
7
|
|
|
7
|
-
import LslStreamOutlet from '../
|
|
8
|
+
import LslStreamOutlet from '../impl/LslStreamOutlet'
|
|
9
|
+
import SpyEventMarkerOutlet from '../testDoubles/EventMarkerOutlet/SpyEventMarkerOutlet'
|
|
8
10
|
import FakeLiblsl from '../testDoubles/Liblsl/FakeLiblsl'
|
|
9
|
-
import { SpyLslInlet } from '../testDoubles/LslInlet/SpyLslInlet'
|
|
10
|
-
import FakeLslOutlet from '../testDoubles/LslOutlet/FakeLslOutlet'
|
|
11
|
-
import SpyMarkerOutlet from '../testDoubles/MarkerOutlet/SpyMarkerOutlet'
|
|
12
11
|
import FakeStreamInfo from '../testDoubles/StreamInfo/FakeStreamInfo'
|
|
13
12
|
import SpyStreamInfo from '../testDoubles/StreamInfo/SpyStreamInfo'
|
|
13
|
+
import { SpyStreamInlet } from '../testDoubles/StreamInlet/SpyStreamInlet'
|
|
14
|
+
import FakeStreamOutlet from '../testDoubles/StreamOutlet/FakeStreamOutlet'
|
|
14
15
|
|
|
15
|
-
export default class
|
|
16
|
+
export default class AbstractPackageTest extends AbstractSpruceTest {
|
|
16
17
|
protected static fakeLiblsl: FakeLiblsl
|
|
17
18
|
|
|
18
19
|
protected static async beforeEach() {
|
|
@@ -35,17 +36,21 @@ export default class AbstractLslTest extends AbstractSpruceTest {
|
|
|
35
36
|
FakeStreamInfo.resetTestDouble()
|
|
36
37
|
}
|
|
37
38
|
|
|
38
|
-
protected static
|
|
39
|
-
LslStreamInlet.Class =
|
|
39
|
+
protected static setSpyStreamInlet() {
|
|
40
|
+
LslStreamInlet.Class = SpyStreamInlet
|
|
40
41
|
}
|
|
41
42
|
|
|
42
|
-
protected static
|
|
43
|
-
LslStreamOutlet.Class =
|
|
44
|
-
|
|
43
|
+
protected static setFakeStreamOutlet() {
|
|
44
|
+
LslStreamOutlet.Class = FakeStreamOutlet
|
|
45
|
+
FakeStreamOutlet.resetTestDouble()
|
|
45
46
|
}
|
|
46
47
|
|
|
47
|
-
protected static
|
|
48
|
-
|
|
48
|
+
protected static setSpyEventMarkerOutlet() {
|
|
49
|
+
LslEventMarkerOutlet.Class = SpyEventMarkerOutlet
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
protected static generateId() {
|
|
53
|
+
return generateId()
|
|
49
54
|
}
|
|
50
55
|
|
|
51
56
|
protected static readonly name_ = generateId()
|
|
@@ -55,4 +60,5 @@ export default class AbstractLslTest extends AbstractSpruceTest {
|
|
|
55
60
|
protected static readonly channelNames = [generateId(), generateId()]
|
|
56
61
|
protected static readonly chunkSize = Math.floor(Math.random() * 100)
|
|
57
62
|
protected static readonly maxBuffered = Math.floor(Math.random() * 100)
|
|
63
|
+
protected static readonly sampleRate = Math.floor(Math.random() * 100)
|
|
58
64
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { randomInt } from 'crypto'
|
|
2
|
-
import { test, assert
|
|
2
|
+
import { test, assert } from '@sprucelabs/test-utils'
|
|
3
|
+
import generateId from '@neurodevs/generate-id'
|
|
3
4
|
import { DataType, OpenParams } from 'ffi-rs'
|
|
4
|
-
import LiblslAdapter from '../../
|
|
5
|
+
import LiblslAdapter from '../../impl/LiblslAdapter'
|
|
5
6
|
import FakeLiblsl from '../../testDoubles/Liblsl/FakeLiblsl'
|
|
6
7
|
import {
|
|
7
8
|
BoundChild,
|
|
@@ -14,10 +15,10 @@ import {
|
|
|
14
15
|
LiblslBindings,
|
|
15
16
|
LslChannel,
|
|
16
17
|
} from '../../types'
|
|
17
|
-
import
|
|
18
|
+
import AbstractPackageTest from '../AbstractPackageTest'
|
|
18
19
|
|
|
19
|
-
export default class LiblslAdapterTest extends
|
|
20
|
-
private static
|
|
20
|
+
export default class LiblslAdapterTest extends AbstractPackageTest {
|
|
21
|
+
private static instance: Liblsl
|
|
21
22
|
private static libraryPath?: string
|
|
22
23
|
private static libraryOptions?: Record<string, any>
|
|
23
24
|
private static fakeBindings: LiblslBindings
|
|
@@ -85,7 +86,12 @@ export default class LiblslAdapterTest extends AbstractLslTest {
|
|
|
85
86
|
}
|
|
86
87
|
|
|
87
88
|
LiblslAdapter.resetInstance()
|
|
88
|
-
this.
|
|
89
|
+
this.instance = LiblslAdapter.getInstance()
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
@test()
|
|
93
|
+
protected static async createsInstance() {
|
|
94
|
+
assert.isTruthy(this.instance, 'Failed to create instance!')
|
|
89
95
|
}
|
|
90
96
|
|
|
91
97
|
@test()
|
|
@@ -94,9 +100,13 @@ export default class LiblslAdapterTest extends AbstractLslTest {
|
|
|
94
100
|
LiblslAdapter.resetInstance()
|
|
95
101
|
|
|
96
102
|
const err = assert.doesThrow(() => LiblslAdapter.getInstance())
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
103
|
+
|
|
104
|
+
debugger
|
|
105
|
+
|
|
106
|
+
assert.isTrue(
|
|
107
|
+
err.message.includes(this.generateFailedMessage()),
|
|
108
|
+
'Did not receive the expected error!'
|
|
109
|
+
)
|
|
100
110
|
}
|
|
101
111
|
|
|
102
112
|
@test()
|
|
@@ -107,60 +117,6 @@ export default class LiblslAdapterTest extends AbstractLslTest {
|
|
|
107
117
|
})
|
|
108
118
|
}
|
|
109
119
|
|
|
110
|
-
@test()
|
|
111
|
-
protected static throwsWhenCreateStreamInfoIsMissingRequiredParams() {
|
|
112
|
-
//@ts-ignore
|
|
113
|
-
const err = assert.doesThrow(() => this.lsl.createStreamInfo())
|
|
114
|
-
errorAssert.assertError(err, 'MISSING_PARAMETERS', {
|
|
115
|
-
parameters: [
|
|
116
|
-
'name',
|
|
117
|
-
'type',
|
|
118
|
-
'channelCount',
|
|
119
|
-
'sampleRate',
|
|
120
|
-
'channelFormat',
|
|
121
|
-
'sourceId',
|
|
122
|
-
],
|
|
123
|
-
})
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
@test()
|
|
127
|
-
protected static async throwsWhenAppendChannelsIsMissingRequiredParams() {
|
|
128
|
-
const err = assert.doesThrow(() =>
|
|
129
|
-
//@ts-ignore
|
|
130
|
-
this.lsl.appendChannelsToStreamInfo({})
|
|
131
|
-
)
|
|
132
|
-
errorAssert.assertError(err, 'MISSING_PARAMETERS', {
|
|
133
|
-
parameters: ['info', 'channels'],
|
|
134
|
-
})
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
@test()
|
|
138
|
-
protected static async throwsWhenCreateOutletIsMissingRequiredParams() {
|
|
139
|
-
//@ts-ignore
|
|
140
|
-
const err = assert.doesThrow(() => this.lsl.createOutlet({}))
|
|
141
|
-
errorAssert.assertError(err, 'MISSING_PARAMETERS', {
|
|
142
|
-
parameters: ['info', 'chunkSize', 'maxBuffered'],
|
|
143
|
-
})
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
@test()
|
|
147
|
-
protected static async throwsWhenPushSampleFloatTimestampIsMissingRequiredParams() {
|
|
148
|
-
//@ts-ignore
|
|
149
|
-
const err = assert.doesThrow(() => this.lsl.pushSampleFloatTimestamp())
|
|
150
|
-
errorAssert.assertError(err, 'MISSING_PARAMETERS', {
|
|
151
|
-
parameters: ['outlet', 'sample', 'timestamp'],
|
|
152
|
-
})
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
@test()
|
|
156
|
-
protected static async throwsWhenPushSampleStringTimestampIsMissingRequiredParams() {
|
|
157
|
-
//@ts-ignore
|
|
158
|
-
const err = assert.doesThrow(() => this.lsl.pushSampleFloatTimestamp())
|
|
159
|
-
errorAssert.assertError(err, 'MISSING_PARAMETERS', {
|
|
160
|
-
parameters: ['outlet', 'sample', 'timestamp'],
|
|
161
|
-
})
|
|
162
|
-
}
|
|
163
|
-
|
|
164
120
|
@test()
|
|
165
121
|
protected static async worksAsASingleton() {
|
|
166
122
|
const liblsl = LiblslAdapter.getInstance()
|
|
@@ -263,7 +219,7 @@ export default class LiblslAdapterTest extends AbstractLslTest {
|
|
|
263
219
|
@test()
|
|
264
220
|
protected static async canCreateStreamInfoWithRequiredParams() {
|
|
265
221
|
const options = this.generateRandomCreateStreamInfoOptions()
|
|
266
|
-
const actual = this.
|
|
222
|
+
const actual = this.instance.createStreamInfo(options)
|
|
267
223
|
|
|
268
224
|
assert.isEqual(actual, this.fakeStreamInfo)
|
|
269
225
|
assert.isEqualDeep(this.createStreamInfoParams, Object.values(options))
|
|
@@ -285,7 +241,7 @@ export default class LiblslAdapterTest extends AbstractLslTest {
|
|
|
285
241
|
sample: expected,
|
|
286
242
|
timestamp,
|
|
287
243
|
}
|
|
288
|
-
this.
|
|
244
|
+
this.instance.pushSampleFloatTimestamp(options)
|
|
289
245
|
|
|
290
246
|
assert.isEqualDeep(this.pushSampleFloatTimestampParams, [
|
|
291
247
|
this.fakeOutlet,
|
|
@@ -303,7 +259,7 @@ export default class LiblslAdapterTest extends AbstractLslTest {
|
|
|
303
259
|
sample: expected,
|
|
304
260
|
timestamp,
|
|
305
261
|
}
|
|
306
|
-
this.
|
|
262
|
+
this.instance.pushSampleStringTimestamp(options)
|
|
307
263
|
assert.isEqual(
|
|
308
264
|
this.pushSampleStringTimestampParams?.[0],
|
|
309
265
|
this.fakeOutlet
|
|
@@ -317,7 +273,7 @@ export default class LiblslAdapterTest extends AbstractLslTest {
|
|
|
317
273
|
const info = this.createRandomStreamInfo()
|
|
318
274
|
const channel: LslChannel = this.generateRandomChannelValues()
|
|
319
275
|
|
|
320
|
-
this.
|
|
276
|
+
this.instance.appendChannelsToStreamInfo({
|
|
321
277
|
info,
|
|
322
278
|
channels: [channel],
|
|
323
279
|
})
|
|
@@ -354,7 +310,7 @@ export default class LiblslAdapterTest extends AbstractLslTest {
|
|
|
354
310
|
const channel1 = this.generateRandomChannelValues()
|
|
355
311
|
const channel2 = this.generateRandomChannelValues()
|
|
356
312
|
|
|
357
|
-
this.
|
|
313
|
+
this.instance.appendChannelsToStreamInfo({
|
|
358
314
|
info,
|
|
359
315
|
channels: [channel1, channel2],
|
|
360
316
|
})
|
|
@@ -374,23 +330,23 @@ export default class LiblslAdapterTest extends AbstractLslTest {
|
|
|
374
330
|
protected static async canDestroyOutlet() {
|
|
375
331
|
const outlet = this.createRandomOutlet()
|
|
376
332
|
const options = { outlet }
|
|
377
|
-
this.
|
|
333
|
+
this.instance.destroyOutlet(options)
|
|
378
334
|
|
|
379
335
|
assert.isEqualDeep(this.destroyOutletParams, Object.values(options))
|
|
380
336
|
}
|
|
381
337
|
|
|
382
338
|
@test()
|
|
383
339
|
protected static async callingLocalClockTwiceReturnsDifferentTimestamps() {
|
|
384
|
-
const t1 = this.
|
|
340
|
+
const t1 = this.instance.localClock()
|
|
385
341
|
await this.wait(10)
|
|
386
|
-
const t2 = this.
|
|
342
|
+
const t2 = this.instance.localClock()
|
|
387
343
|
assert.isNotEqual(t1, t2)
|
|
388
344
|
}
|
|
389
345
|
|
|
390
346
|
@test()
|
|
391
347
|
protected static async localClockBindingReceivesEmptyArray() {
|
|
392
348
|
delete this.localClockParams
|
|
393
|
-
this.
|
|
349
|
+
this.instance.localClock()
|
|
394
350
|
assert.isEqualDeep(this.localClockParams, [])
|
|
395
351
|
}
|
|
396
352
|
|
|
@@ -399,7 +355,7 @@ export default class LiblslAdapterTest extends AbstractLslTest {
|
|
|
399
355
|
delete process.env.LIBLSL_PATH
|
|
400
356
|
|
|
401
357
|
LiblslAdapter.resetInstance()
|
|
402
|
-
this.
|
|
358
|
+
this.instance = LiblslAdapter.getInstance()
|
|
403
359
|
|
|
404
360
|
assert.isEqual(
|
|
405
361
|
this.ffiRsOpenOptions?.path,
|
|
@@ -415,20 +371,20 @@ export default class LiblslAdapterTest extends AbstractLslTest {
|
|
|
415
371
|
}
|
|
416
372
|
|
|
417
373
|
private static createRandomStreamInfo() {
|
|
418
|
-
return this.
|
|
374
|
+
return this.instance.createStreamInfo(
|
|
419
375
|
this.generateRandomCreateStreamInfoOptions()
|
|
420
376
|
)
|
|
421
377
|
}
|
|
422
378
|
|
|
423
379
|
private static createRandomOutlet() {
|
|
424
380
|
const options = this.createRandomOptions()
|
|
425
|
-
const outlet = this.
|
|
381
|
+
const outlet = this.instance.createOutlet(options)
|
|
426
382
|
return { options, outlet }
|
|
427
383
|
}
|
|
428
384
|
|
|
429
385
|
private static createRandomInlet() {
|
|
430
386
|
const options = this.createRandomOptions()
|
|
431
|
-
const inlet = this.
|
|
387
|
+
const inlet = this.instance.createInlet(options)
|
|
432
388
|
return { options, inlet }
|
|
433
389
|
}
|
|
434
390
|
|
|
@@ -461,6 +417,10 @@ export default class LiblslAdapterTest extends AbstractLslTest {
|
|
|
461
417
|
}
|
|
462
418
|
}
|
|
463
419
|
|
|
420
|
+
private static generateFailedMessage() {
|
|
421
|
+
return `Loading the liblsl dylib failed! I tried to load it from ${process.env.LIBLSL_PATH}.`
|
|
422
|
+
}
|
|
423
|
+
|
|
464
424
|
private static FakeBindings() {
|
|
465
425
|
return {
|
|
466
426
|
lsl_create_streaminfo: (params: any[]) => {
|
package/src/__tests__/{modules/EventMarkerOutlet.test.ts → impl/LslEventMarkerOutlet.test.ts}
RENAMED
|
@@ -1,28 +1,34 @@
|
|
|
1
1
|
import { randomInt } from 'crypto'
|
|
2
|
-
import { assert,
|
|
3
|
-
import
|
|
4
|
-
import
|
|
2
|
+
import { assert, test } from '@sprucelabs/test-utils'
|
|
3
|
+
import generateId from '@neurodevs/generate-id'
|
|
4
|
+
import LslEventMarkerOutlet from '../../impl/LslEventMarkerOutlet'
|
|
5
|
+
import { StreamOutletOptions } from '../../impl/LslStreamOutlet'
|
|
6
|
+
import SpyEventMarkerOutlet from '../../testDoubles/EventMarkerOutlet/SpyEventMarkerOutlet'
|
|
5
7
|
import generateRandomOutletOptions from '../../testDoubles/generateRandomOutletOptions'
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import AbstractLslTest from '../AbstractLslTest'
|
|
8
|
+
import FakeStreamOutlet from '../../testDoubles/StreamOutlet/FakeStreamOutlet'
|
|
9
|
+
import AbstractPackageTest from '../AbstractPackageTest'
|
|
9
10
|
|
|
10
|
-
export default class EventMarkerOutletTest extends
|
|
11
|
-
private static instance:
|
|
11
|
+
export default class EventMarkerOutletTest extends AbstractPackageTest {
|
|
12
|
+
private static instance: SpyEventMarkerOutlet
|
|
12
13
|
|
|
13
14
|
protected static async beforeEach() {
|
|
14
15
|
await super.beforeEach()
|
|
15
16
|
|
|
16
17
|
this.setFakeLiblsl()
|
|
17
|
-
this.
|
|
18
|
-
this.
|
|
18
|
+
this.setFakeStreamOutlet()
|
|
19
|
+
this.setSpyEventMarkerOutlet()
|
|
19
20
|
|
|
20
|
-
this.instance = await this.
|
|
21
|
+
this.instance = await this.LslEventMarkerOutlet()
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@test()
|
|
25
|
+
protected static async createsInstance() {
|
|
26
|
+
assert.isTruthy(this.instance, 'Failed to create instance!')
|
|
21
27
|
}
|
|
22
28
|
|
|
23
29
|
@test()
|
|
24
30
|
protected static async loadsWithEventMarkerSpecificOptions() {
|
|
25
|
-
assert.isEqualDeep(
|
|
31
|
+
assert.isEqualDeep(FakeStreamOutlet.callsToConstructor[0].options, {
|
|
26
32
|
name: 'Event markers',
|
|
27
33
|
type: 'Markers',
|
|
28
34
|
channelNames: ['Markers'],
|
|
@@ -39,9 +45,12 @@ export default class EventMarkerOutletTest extends AbstractLslTest {
|
|
|
39
45
|
@test()
|
|
40
46
|
protected static async canOverrideDefaultOptions() {
|
|
41
47
|
const options = generateRandomOutletOptions()
|
|
42
|
-
await this.
|
|
48
|
+
await this.LslEventMarkerOutlet(options)
|
|
43
49
|
|
|
44
|
-
assert.isEqualDeep(
|
|
50
|
+
assert.isEqualDeep(
|
|
51
|
+
FakeStreamOutlet.callsToConstructor[1].options,
|
|
52
|
+
options
|
|
53
|
+
)
|
|
45
54
|
}
|
|
46
55
|
|
|
47
56
|
@test()
|
|
@@ -52,7 +61,7 @@ export default class EventMarkerOutletTest extends AbstractLslTest {
|
|
|
52
61
|
const marker = markers[0]
|
|
53
62
|
|
|
54
63
|
assert.isEqual(
|
|
55
|
-
|
|
64
|
+
FakeStreamOutlet.callsToPushSample[0][0],
|
|
56
65
|
marker.name,
|
|
57
66
|
'Pushed the wrong marker!'
|
|
58
67
|
)
|
|
@@ -64,7 +73,7 @@ export default class EventMarkerOutletTest extends AbstractLslTest {
|
|
|
64
73
|
protected static async pushingTwoMarkersIncrementsHitCountAndWaitTimeTwice() {
|
|
65
74
|
const markers = await this.pushTotalMarkers(2)
|
|
66
75
|
|
|
67
|
-
assert.isEqual(
|
|
76
|
+
assert.isEqual(FakeStreamOutlet.callsToPushSample.length, 2)
|
|
68
77
|
|
|
69
78
|
assert.isEqual(
|
|
70
79
|
this.instance.totalWaitTimeMs,
|
|
@@ -78,7 +87,7 @@ export default class EventMarkerOutletTest extends AbstractLslTest {
|
|
|
78
87
|
protected static async canStopEventMarkersMidPush(bailIdx: number) {
|
|
79
88
|
let hitCount = 0
|
|
80
89
|
|
|
81
|
-
const outlet = this.instance.
|
|
90
|
+
const outlet = this.instance.getStreamOutlet()
|
|
82
91
|
|
|
83
92
|
outlet.pushSample = () => {
|
|
84
93
|
hitCount += 1
|
|
@@ -98,7 +107,7 @@ export default class EventMarkerOutletTest extends AbstractLslTest {
|
|
|
98
107
|
|
|
99
108
|
let hitCount = 0
|
|
100
109
|
|
|
101
|
-
const outlet = this.instance.
|
|
110
|
+
const outlet = this.instance.getStreamOutlet()
|
|
102
111
|
|
|
103
112
|
outlet.pushSample = () => {
|
|
104
113
|
hitCount++
|
|
@@ -127,7 +136,7 @@ export default class EventMarkerOutletTest extends AbstractLslTest {
|
|
|
127
136
|
void this.pushTotalMarkers(2, 100)
|
|
128
137
|
this.instance.stop()
|
|
129
138
|
|
|
130
|
-
this.
|
|
139
|
+
this.streamOutlet.pushSample = () =>
|
|
131
140
|
assert.fail('Should not have been called')
|
|
132
141
|
}
|
|
133
142
|
|
|
@@ -136,16 +145,16 @@ export default class EventMarkerOutletTest extends AbstractLslTest {
|
|
|
136
145
|
const markerName = generateId()
|
|
137
146
|
this.instance.pushMarker(markerName)
|
|
138
147
|
|
|
139
|
-
assert.isEqual(
|
|
148
|
+
assert.isEqual(FakeStreamOutlet.callsToPushSample[0][0], markerName)
|
|
140
149
|
}
|
|
141
150
|
|
|
142
|
-
private static get
|
|
143
|
-
return this.instance.
|
|
151
|
+
private static get streamOutlet() {
|
|
152
|
+
return this.instance.getStreamOutlet()
|
|
144
153
|
}
|
|
145
154
|
|
|
146
155
|
private static async setupOutlet() {
|
|
147
|
-
|
|
148
|
-
this.instance = await this.
|
|
156
|
+
LslEventMarkerOutlet.Class = LslEventMarkerOutlet as any
|
|
157
|
+
this.instance = await this.LslEventMarkerOutlet()
|
|
149
158
|
}
|
|
150
159
|
|
|
151
160
|
private static async pushTotalMarkers(total: number, durationMs?: number) {
|
|
@@ -165,9 +174,11 @@ export default class EventMarkerOutletTest extends AbstractLslTest {
|
|
|
165
174
|
}
|
|
166
175
|
}
|
|
167
176
|
|
|
168
|
-
private static async
|
|
169
|
-
options?: Partial<
|
|
177
|
+
private static async LslEventMarkerOutlet(
|
|
178
|
+
options?: Partial<StreamOutletOptions>
|
|
170
179
|
) {
|
|
171
|
-
return (await
|
|
180
|
+
return (await LslEventMarkerOutlet.Create(
|
|
181
|
+
options
|
|
182
|
+
)) as SpyEventMarkerOutlet
|
|
172
183
|
}
|
|
173
184
|
}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { test, assert
|
|
1
|
+
import { test, assert } from '@sprucelabs/test-utils'
|
|
2
|
+
import generateId from '@neurodevs/generate-id'
|
|
2
3
|
import { CHANNEL_FORMATS } from '../../consts'
|
|
3
|
-
import LslStreamInfo, { StreamInfoOptions } from '../../
|
|
4
|
+
import LslStreamInfo, { StreamInfoOptions } from '../../impl/LslStreamInfo'
|
|
4
5
|
import SpyStreamInfo from '../../testDoubles/StreamInfo/SpyStreamInfo'
|
|
5
|
-
import
|
|
6
|
+
import AbstractPackageTest from '../AbstractPackageTest'
|
|
6
7
|
|
|
7
|
-
export default class LslStreamInfoTest extends
|
|
8
|
+
export default class LslStreamInfoTest extends AbstractPackageTest {
|
|
8
9
|
private static instance: SpyStreamInfo
|
|
9
10
|
|
|
10
11
|
protected static async beforeEach() {
|
|
@@ -16,19 +17,8 @@ export default class LslStreamInfoTest extends AbstractLslTest {
|
|
|
16
17
|
}
|
|
17
18
|
|
|
18
19
|
@test()
|
|
19
|
-
protected static async
|
|
20
|
-
assert.isTruthy(this.instance, '
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
@test()
|
|
24
|
-
protected static async throwsWithMissingRequiredOptions() {
|
|
25
|
-
const err = assert.doesThrow(
|
|
26
|
-
// @ts-ignore
|
|
27
|
-
() => LslStreamInfo.Create()
|
|
28
|
-
)
|
|
29
|
-
errorAssert.assertError(err, 'MISSING_PARAMETERS', {
|
|
30
|
-
parameters: ['channelNames', 'channelFormat', 'sampleRate'],
|
|
31
|
-
})
|
|
20
|
+
protected static async createsInstance() {
|
|
21
|
+
assert.isTruthy(this.instance, 'Failed to create instance!')
|
|
32
22
|
}
|
|
33
23
|
|
|
34
24
|
@test()
|