@neurodevs/node-lsl 23.2.0 → 23.2.1
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__/impl/UsbDeviceController.test.d.ts +7 -0
- package/build/__tests__/impl/UsbDeviceController.test.js +43 -0
- package/build/__tests__/impl/UsbDeviceController.test.js.map +1 -1
- package/build/impl/controllers/UsbDeviceController.d.ts +3 -0
- package/build/impl/controllers/UsbDeviceController.js +19 -4
- package/build/impl/controllers/UsbDeviceController.js.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/impl/UsbDeviceController.test.ts +67 -0
- package/src/impl/controllers/UsbDeviceController.ts +30 -4
|
@@ -11,6 +11,13 @@ export default class UsbDeviceControllerTest extends AbstractPackageTest {
|
|
|
11
11
|
protected static connectCallsLibndxStartUsbBackend(): Promise<void>;
|
|
12
12
|
protected static disconnectCallsLibndxStopUsbBackend(): Promise<void>;
|
|
13
13
|
protected static writeUsbCallsLibndxWriteUsbBackend(): Promise<void>;
|
|
14
|
+
protected static connectThrowsWhenUsbBackendCannotBeCreated(): Promise<void>;
|
|
15
|
+
protected static doesNotStartUsbBackendThatCouldNotBeCreated(): Promise<void>;
|
|
16
|
+
protected static connectThrowsWhenUsbBackendCannotBeStarted(): Promise<void>;
|
|
17
|
+
protected static writeUsbThrowsOnError(): Promise<void>;
|
|
18
|
+
protected static disconnectThrowsOnError(): Promise<void>;
|
|
19
|
+
private static readonly fakeError;
|
|
20
|
+
private static setFakeErrorResult;
|
|
14
21
|
private static connect;
|
|
15
22
|
private static disconnect;
|
|
16
23
|
private static UsbDeviceController;
|
|
@@ -50,6 +50,34 @@ export default class UsbDeviceControllerTest extends AbstractPackageTest {
|
|
|
50
50
|
value: this.valueToWrite,
|
|
51
51
|
}, 'Did not call write_usb_backend!');
|
|
52
52
|
}
|
|
53
|
+
static async connectThrowsWhenUsbBackendCannotBeCreated() {
|
|
54
|
+
this.setFakeErrorResult();
|
|
55
|
+
await assert.doesThrowAsync(async () => await this.connect(), `400 error: ${this.fakeError}`, 'Did not throw when USB backend could not be created!');
|
|
56
|
+
}
|
|
57
|
+
static async doesNotStartUsbBackendThatCouldNotBeCreated() {
|
|
58
|
+
this.setFakeErrorResult();
|
|
59
|
+
await assert.doesThrowAsync(async () => await this.connect());
|
|
60
|
+
assert.isLength(FakeLibndx.callsToStartUsbBackend, 0, 'Started a USB backend that could not be created!');
|
|
61
|
+
}
|
|
62
|
+
static async connectThrowsWhenUsbBackendCannotBeStarted() {
|
|
63
|
+
this.setFakeErrorResult();
|
|
64
|
+
//@ts-ignore
|
|
65
|
+
this.instance.createUsbBackend = () => { };
|
|
66
|
+
await assert.doesThrowAsync(async () => await this.connect(), `400 error: ${this.fakeError}`, 'Did not throw when USB backend could not be started!');
|
|
67
|
+
}
|
|
68
|
+
static async writeUsbThrowsOnError() {
|
|
69
|
+
this.setFakeErrorResult();
|
|
70
|
+
await assert.doesThrowAsync(async () => await this.instance.writeUsb(this.valueToWrite), `400 error: ${this.fakeError}`, 'Did not throw when writing failed!');
|
|
71
|
+
}
|
|
72
|
+
static async disconnectThrowsOnError() {
|
|
73
|
+
await this.connect();
|
|
74
|
+
this.setFakeErrorResult();
|
|
75
|
+
await assert.doesThrowAsync(async () => await this.disconnect(), `400 error: ${this.fakeError}`, 'Did not throw when stopping failed!');
|
|
76
|
+
}
|
|
77
|
+
static fakeError = this.generateId();
|
|
78
|
+
static setFakeErrorResult() {
|
|
79
|
+
FakeLibndx.fakeResult = { status: 400, error: this.fakeError };
|
|
80
|
+
}
|
|
53
81
|
static async connect() {
|
|
54
82
|
await this.instance.connect();
|
|
55
83
|
}
|
|
@@ -78,4 +106,19 @@ __decorate([
|
|
|
78
106
|
__decorate([
|
|
79
107
|
test()
|
|
80
108
|
], UsbDeviceControllerTest, "writeUsbCallsLibndxWriteUsbBackend", null);
|
|
109
|
+
__decorate([
|
|
110
|
+
test()
|
|
111
|
+
], UsbDeviceControllerTest, "connectThrowsWhenUsbBackendCannotBeCreated", null);
|
|
112
|
+
__decorate([
|
|
113
|
+
test()
|
|
114
|
+
], UsbDeviceControllerTest, "doesNotStartUsbBackendThatCouldNotBeCreated", null);
|
|
115
|
+
__decorate([
|
|
116
|
+
test()
|
|
117
|
+
], UsbDeviceControllerTest, "connectThrowsWhenUsbBackendCannotBeStarted", null);
|
|
118
|
+
__decorate([
|
|
119
|
+
test()
|
|
120
|
+
], UsbDeviceControllerTest, "writeUsbThrowsOnError", null);
|
|
121
|
+
__decorate([
|
|
122
|
+
test()
|
|
123
|
+
], UsbDeviceControllerTest, "disconnectThrowsOnError", null);
|
|
81
124
|
//# sourceMappingURL=UsbDeviceController.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UsbDeviceController.test.js","sourceRoot":"","sources":["../../../src/__tests__/impl/UsbDeviceController.test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"UsbDeviceController.test.js","sourceRoot":"","sources":["../../../src/__tests__/impl/UsbDeviceController.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,9 @@ export default class UsbDeviceController implements UsbDevice {
|
|
|
6
6
|
protected constructor(options: UsbDeviceOptions);
|
|
7
7
|
static Create(options: UsbDeviceOptions): UsbDevice;
|
|
8
8
|
connect(): Promise<void>;
|
|
9
|
+
private createUsbBackend;
|
|
10
|
+
private throwIfError;
|
|
11
|
+
private startUsbBackend;
|
|
9
12
|
private get usbDeviceOptions();
|
|
10
13
|
private get startUsbDeviceOptions();
|
|
11
14
|
writeUsb(value: string): Promise<void>;
|
|
@@ -13,8 +13,21 @@ export default class UsbDeviceController {
|
|
|
13
13
|
return new (this.Class ?? this)(options);
|
|
14
14
|
}
|
|
15
15
|
async connect() {
|
|
16
|
-
this.
|
|
17
|
-
this.
|
|
16
|
+
this.createUsbBackend();
|
|
17
|
+
this.startUsbBackend();
|
|
18
|
+
}
|
|
19
|
+
createUsbBackend() {
|
|
20
|
+
const { status, error } = this.ndx.createUsbBackend(this.usbDeviceOptions);
|
|
21
|
+
this.throwIfError(status, error);
|
|
22
|
+
}
|
|
23
|
+
throwIfError(status, error) {
|
|
24
|
+
if (status !== 200) {
|
|
25
|
+
throw new Error(`${status} error: ${error ?? 'Unknown error'}`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
startUsbBackend() {
|
|
29
|
+
const { status, error } = this.ndx.startUsbBackend(this.startUsbDeviceOptions);
|
|
30
|
+
this.throwIfError(status, error);
|
|
18
31
|
}
|
|
19
32
|
get usbDeviceOptions() {
|
|
20
33
|
return {
|
|
@@ -28,13 +41,15 @@ export default class UsbDeviceController {
|
|
|
28
41
|
};
|
|
29
42
|
}
|
|
30
43
|
async writeUsb(value) {
|
|
31
|
-
this.ndx.writeUsbBackend({
|
|
44
|
+
const { status, error } = this.ndx.writeUsbBackend({
|
|
32
45
|
...this.usbDeviceOptions,
|
|
33
46
|
value,
|
|
34
47
|
});
|
|
48
|
+
this.throwIfError(status, error);
|
|
35
49
|
}
|
|
36
50
|
async disconnect() {
|
|
37
|
-
this.ndx.stopUsbBackend(this.usbDeviceOptions);
|
|
51
|
+
const { status, error } = this.ndx.stopUsbBackend(this.usbDeviceOptions);
|
|
52
|
+
this.throwIfError(status, error);
|
|
38
53
|
}
|
|
39
54
|
}
|
|
40
55
|
//# sourceMappingURL=UsbDeviceController.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UsbDeviceController.js","sourceRoot":"","sources":["../../../src/impl/controllers/UsbDeviceController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAErD,MAAM,CAAC,OAAO,OAAO,mBAAmB;IAC7B,MAAM,CAAC,KAAK,CAAuB;IAElC,MAAM,CAA8D;IACpE,YAAY,CAAQ;IAEpB,GAAG,GAAG,aAAa,CAAC,WAAW,EAAE,CAAA;IAEzC,YAAsB,OAAyB;QAC3C,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,IAAI,EAAE,CAAA;QAE9C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,YAAY,GAAG,YAAY,IAAI,EAAE,CAAA;IAC1C,CAAC;IAEM,MAAM,CAAC,MAAM,CAAC,OAAyB;QAC1C,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,CAAA;IAC5C,CAAC;IAEM,KAAK,CAAC,OAAO;QAChB,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"UsbDeviceController.js","sourceRoot":"","sources":["../../../src/impl/controllers/UsbDeviceController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAErD,MAAM,CAAC,OAAO,OAAO,mBAAmB;IAC7B,MAAM,CAAC,KAAK,CAAuB;IAElC,MAAM,CAA8D;IACpE,YAAY,CAAQ;IAEpB,GAAG,GAAG,aAAa,CAAC,WAAW,EAAE,CAAA;IAEzC,YAAsB,OAAyB;QAC3C,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,IAAI,EAAE,CAAA;QAE9C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,YAAY,GAAG,YAAY,IAAI,EAAE,CAAA;IAC1C,CAAC;IAEM,MAAM,CAAC,MAAM,CAAC,OAAyB;QAC1C,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,CAAA;IAC5C,CAAC;IAEM,KAAK,CAAC,OAAO;QAChB,IAAI,CAAC,gBAAgB,EAAE,CAAA;QACvB,IAAI,CAAC,eAAe,EAAE,CAAA;IAC1B,CAAC;IAEO,gBAAgB;QACpB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAC/C,IAAI,CAAC,gBAAgB,CACxB,CAAA;QAED,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IACpC,CAAC;IAEO,YAAY,CAAC,MAAc,EAAE,KAAyB;QAC1D,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,WAAW,KAAK,IAAI,eAAe,EAAE,CAAC,CAAA;QACnE,CAAC;IACL,CAAC;IAEO,eAAe;QACnB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAC9C,IAAI,CAAC,qBAAqB,CAC7B,CAAA;QAED,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IACpC,CAAC;IAED,IAAY,gBAAgB;QACxB,OAAO;YACH,YAAY,EAAE,IAAI,CAAC,YAAY;SAClC,CAAA;IACL,CAAC;IAED,IAAY,qBAAqB;QAC7B,OAAO;YACH,GAAG,IAAI,CAAC,gBAAgB;YACxB,MAAM,EAAE,IAAI,CAAC,MAAM;SACtB,CAAA;IACL,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAC,KAAa;QAC/B,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC;YAC/C,GAAG,IAAI,CAAC,gBAAgB;YACxB,KAAK;SACR,CAAC,CAAA;QAEF,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IACpC,CAAC;IAEM,KAAK,CAAC,UAAU;QACnB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;QAExE,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IACpC,CAAC;CACJ"}
|
package/package.json
CHANGED
|
@@ -92,6 +92,73 @@ export default class UsbDeviceControllerTest extends AbstractPackageTest {
|
|
|
92
92
|
)
|
|
93
93
|
}
|
|
94
94
|
|
|
95
|
+
@test()
|
|
96
|
+
protected static async connectThrowsWhenUsbBackendCannotBeCreated() {
|
|
97
|
+
this.setFakeErrorResult()
|
|
98
|
+
|
|
99
|
+
await assert.doesThrowAsync(
|
|
100
|
+
async () => await this.connect(),
|
|
101
|
+
`400 error: ${this.fakeError}`,
|
|
102
|
+
'Did not throw when USB backend could not be created!'
|
|
103
|
+
)
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
@test()
|
|
107
|
+
protected static async doesNotStartUsbBackendThatCouldNotBeCreated() {
|
|
108
|
+
this.setFakeErrorResult()
|
|
109
|
+
|
|
110
|
+
await assert.doesThrowAsync(async () => await this.connect())
|
|
111
|
+
|
|
112
|
+
assert.isLength(
|
|
113
|
+
FakeLibndx.callsToStartUsbBackend,
|
|
114
|
+
0,
|
|
115
|
+
'Started a USB backend that could not be created!'
|
|
116
|
+
)
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
@test()
|
|
120
|
+
protected static async connectThrowsWhenUsbBackendCannotBeStarted() {
|
|
121
|
+
this.setFakeErrorResult()
|
|
122
|
+
|
|
123
|
+
//@ts-ignore
|
|
124
|
+
this.instance.createUsbBackend = () => {}
|
|
125
|
+
|
|
126
|
+
await assert.doesThrowAsync(
|
|
127
|
+
async () => await this.connect(),
|
|
128
|
+
`400 error: ${this.fakeError}`,
|
|
129
|
+
'Did not throw when USB backend could not be started!'
|
|
130
|
+
)
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
@test()
|
|
134
|
+
protected static async writeUsbThrowsOnError() {
|
|
135
|
+
this.setFakeErrorResult()
|
|
136
|
+
|
|
137
|
+
await assert.doesThrowAsync(
|
|
138
|
+
async () => await this.instance.writeUsb(this.valueToWrite),
|
|
139
|
+
`400 error: ${this.fakeError}`,
|
|
140
|
+
'Did not throw when writing failed!'
|
|
141
|
+
)
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
@test()
|
|
145
|
+
protected static async disconnectThrowsOnError() {
|
|
146
|
+
await this.connect()
|
|
147
|
+
this.setFakeErrorResult()
|
|
148
|
+
|
|
149
|
+
await assert.doesThrowAsync(
|
|
150
|
+
async () => await this.disconnect(),
|
|
151
|
+
`400 error: ${this.fakeError}`,
|
|
152
|
+
'Did not throw when stopping failed!'
|
|
153
|
+
)
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
private static readonly fakeError = this.generateId()
|
|
157
|
+
|
|
158
|
+
private static setFakeErrorResult() {
|
|
159
|
+
FakeLibndx.fakeResult = { status: 400, error: this.fakeError }
|
|
160
|
+
}
|
|
161
|
+
|
|
95
162
|
private static async connect() {
|
|
96
163
|
await this.instance.connect()
|
|
97
164
|
}
|
|
@@ -20,8 +20,30 @@ export default class UsbDeviceController implements UsbDevice {
|
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
public async connect() {
|
|
23
|
-
this.
|
|
24
|
-
this.
|
|
23
|
+
this.createUsbBackend()
|
|
24
|
+
this.startUsbBackend()
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
private createUsbBackend() {
|
|
28
|
+
const { status, error } = this.ndx.createUsbBackend(
|
|
29
|
+
this.usbDeviceOptions
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
this.throwIfError(status, error)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
private throwIfError(status: number, error: string | undefined) {
|
|
36
|
+
if (status !== 200) {
|
|
37
|
+
throw new Error(`${status} error: ${error ?? 'Unknown error'}`)
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
private startUsbBackend() {
|
|
42
|
+
const { status, error } = this.ndx.startUsbBackend(
|
|
43
|
+
this.startUsbDeviceOptions
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
this.throwIfError(status, error)
|
|
25
47
|
}
|
|
26
48
|
|
|
27
49
|
private get usbDeviceOptions() {
|
|
@@ -38,14 +60,18 @@ export default class UsbDeviceController implements UsbDevice {
|
|
|
38
60
|
}
|
|
39
61
|
|
|
40
62
|
public async writeUsb(value: string) {
|
|
41
|
-
this.ndx.writeUsbBackend({
|
|
63
|
+
const { status, error } = this.ndx.writeUsbBackend({
|
|
42
64
|
...this.usbDeviceOptions,
|
|
43
65
|
value,
|
|
44
66
|
})
|
|
67
|
+
|
|
68
|
+
this.throwIfError(status, error)
|
|
45
69
|
}
|
|
46
70
|
|
|
47
71
|
public async disconnect() {
|
|
48
|
-
this.ndx.stopUsbBackend(this.usbDeviceOptions)
|
|
72
|
+
const { status, error } = this.ndx.stopUsbBackend(this.usbDeviceOptions)
|
|
73
|
+
|
|
74
|
+
this.throwIfError(status, error)
|
|
49
75
|
}
|
|
50
76
|
}
|
|
51
77
|
|