@neurodevs/node-lsl 17.1.1 → 18.1.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.
Files changed (198) hide show
  1. package/.claude/settings.local.json +10 -0
  2. package/.vscode/launch.json +54 -57
  3. package/.vscode/settings.json +61 -66
  4. package/.vscode/tasks.json +98 -129
  5. package/README.md +20 -44
  6. package/build/__tests__/AbstractPackageTest.d.ts +7 -5
  7. package/build/__tests__/AbstractPackageTest.js +22 -15
  8. package/build/__tests__/AbstractPackageTest.js.map +1 -1
  9. package/build/__tests__/impl/BleDeviceController.test.d.ts +54 -0
  10. package/build/__tests__/impl/BleDeviceController.test.js +333 -0
  11. package/build/__tests__/impl/BleDeviceController.test.js.map +1 -0
  12. package/build/__tests__/impl/LslEventMarkerEmitter.test.d.ts +34 -0
  13. package/build/__tests__/impl/LslEventMarkerEmitter.test.js +243 -0
  14. package/build/__tests__/impl/LslEventMarkerEmitter.test.js.map +1 -0
  15. package/build/__tests__/impl/LslStreamInfo.test.d.ts +0 -3
  16. package/build/__tests__/impl/LslStreamInfo.test.js +2 -27
  17. package/build/__tests__/impl/LslStreamInfo.test.js.map +1 -1
  18. package/build/__tests__/impl/LslStreamInlet.test.d.ts +20 -8
  19. package/build/__tests__/impl/LslStreamInlet.test.js +224 -69
  20. package/build/__tests__/impl/LslStreamInlet.test.js.map +1 -1
  21. package/build/__tests__/impl/LslStreamOutlet.test.d.ts +3 -7
  22. package/build/__tests__/impl/LslStreamOutlet.test.js +40 -50
  23. package/build/__tests__/impl/LslStreamOutlet.test.js.map +1 -1
  24. package/build/__tests__/impl/LslWebSocketBridge.test.js +19 -20
  25. package/build/__tests__/impl/LslWebSocketBridge.test.js.map +1 -1
  26. package/build/assertions.d.ts +1 -1
  27. package/build/assertions.js.map +1 -1
  28. package/build/impl/LslEventMarkerEmitter.d.ts +35 -0
  29. package/build/impl/LslEventMarkerEmitter.js +86 -0
  30. package/build/impl/LslEventMarkerEmitter.js.map +1 -0
  31. package/build/impl/LslStreamInfo.d.ts +4 -8
  32. package/build/impl/LslStreamInfo.js +8 -21
  33. package/build/impl/LslStreamInfo.js.map +1 -1
  34. package/build/impl/LslStreamInlet.d.ts +31 -50
  35. package/build/impl/LslStreamInlet.js +79 -149
  36. package/build/impl/LslStreamInlet.js.map +1 -1
  37. package/build/impl/LslStreamOutlet.d.ts +15 -18
  38. package/build/impl/LslStreamOutlet.js +39 -47
  39. package/build/impl/LslStreamOutlet.js.map +1 -1
  40. package/build/impl/LslWebSocketBridge.d.ts +4 -5
  41. package/build/impl/LslWebSocketBridge.js +10 -10
  42. package/build/impl/LslWebSocketBridge.js.map +1 -1
  43. package/build/impl/controllers/BleDeviceController.d.ts +58 -0
  44. package/build/impl/controllers/BleDeviceController.js +145 -0
  45. package/build/impl/controllers/BleDeviceController.js.map +1 -0
  46. package/build/impl/workers/inlet/LslStreamInlet.worker.d.ts +22 -0
  47. package/build/impl/workers/inlet/LslStreamInlet.worker.js +42 -0
  48. package/build/impl/workers/inlet/LslStreamInlet.worker.js.map +1 -0
  49. package/build/impl/workers/inlet/StreamInletWorker.d.ts +73 -0
  50. package/build/impl/workers/inlet/StreamInletWorker.js +253 -0
  51. package/build/impl/workers/inlet/StreamInletWorker.js.map +1 -0
  52. package/build/impl/workers/outlet/LslStreamOutlet.worker.d.ts +32 -0
  53. package/build/impl/workers/outlet/LslStreamOutlet.worker.js +82 -0
  54. package/build/impl/workers/outlet/LslStreamOutlet.worker.js.map +1 -0
  55. package/build/index.d.ts +14 -14
  56. package/build/index.js +16 -16
  57. package/build/index.js.map +1 -1
  58. package/build/scripts/discoverMuse.js +40 -0
  59. package/build/scripts/discoverMuse.js.map +1 -0
  60. package/build/scripts/finalizeHandles.d.ts +2 -0
  61. package/build/scripts/finalizeHandles.js +48 -0
  62. package/build/scripts/finalizeHandles.js.map +1 -0
  63. package/build/scripts/runLslEventMarkerEmitter.d.ts +1 -0
  64. package/build/scripts/runLslEventMarkerEmitter.js +11 -0
  65. package/build/scripts/runLslEventMarkerEmitter.js.map +1 -0
  66. package/build/scripts/runMuse.d.ts +1 -0
  67. package/build/scripts/runMuse.js +40 -0
  68. package/build/scripts/runMuse.js.map +1 -0
  69. package/build/scripts/runOutletToInlet.js +7 -6
  70. package/build/scripts/runOutletToInlet.js.map +1 -1
  71. package/build/scripts/testDestroyOutlet.d.ts +1 -0
  72. package/build/scripts/testDestroyOutlet.js +4 -0
  73. package/build/scripts/testDestroyOutlet.js.map +1 -0
  74. package/build/testDoubles/BleController/FakeBleController.d.ts +24 -0
  75. package/build/testDoubles/BleController/FakeBleController.js +42 -0
  76. package/build/testDoubles/BleController/FakeBleController.js.map +1 -0
  77. package/build/testDoubles/BleController/SpyBleController.d.ts +14 -0
  78. package/build/testDoubles/BleController/SpyBleController.js +48 -0
  79. package/build/testDoubles/BleController/SpyBleController.js.map +1 -0
  80. package/build/testDoubles/EventMarkerEmitter/FakeEventMarkerEmitter.d.ts +17 -0
  81. package/build/testDoubles/EventMarkerEmitter/FakeEventMarkerEmitter.js +30 -0
  82. package/build/testDoubles/EventMarkerEmitter/FakeEventMarkerEmitter.js.map +1 -0
  83. package/build/testDoubles/EventMarkerEmitter/SpyEventMarkerEmitter.d.ts +10 -0
  84. package/build/testDoubles/EventMarkerEmitter/SpyEventMarkerEmitter.js +23 -0
  85. package/build/testDoubles/EventMarkerEmitter/SpyEventMarkerEmitter.js.map +1 -0
  86. package/build/testDoubles/EventMarkerEmitter/ThrowingEventMarkerEmitter.d.ts +9 -0
  87. package/build/testDoubles/EventMarkerEmitter/ThrowingEventMarkerEmitter.js +19 -0
  88. package/build/testDoubles/EventMarkerEmitter/ThrowingEventMarkerEmitter.js.map +1 -0
  89. package/build/testDoubles/StreamInfo/FakeStreamInfo.d.ts +3 -3
  90. package/build/testDoubles/StreamInfo/FakeStreamInfo.js +3 -3
  91. package/build/testDoubles/StreamInfo/FakeStreamInfo.js.map +1 -1
  92. package/build/testDoubles/StreamInlet/FakeStreamInlet.d.ts +8 -10
  93. package/build/testDoubles/StreamInlet/FakeStreamInlet.js +6 -7
  94. package/build/testDoubles/StreamInlet/FakeStreamInlet.js.map +1 -1
  95. package/build/testDoubles/StreamInlet/SpyStreamInlet.d.ts +2 -5
  96. package/build/testDoubles/StreamInlet/SpyStreamInlet.js +2 -8
  97. package/build/testDoubles/StreamInlet/SpyStreamInlet.js.map +1 -1
  98. package/build/testDoubles/StreamOutlet/FakeStreamOutlet.d.ts +7 -9
  99. package/build/testDoubles/StreamOutlet/FakeStreamOutlet.js +8 -8
  100. package/build/testDoubles/StreamOutlet/FakeStreamOutlet.js.map +1 -1
  101. package/build/testDoubles/WebSocketBridge/FakeWebSocketBridge.d.ts +1 -1
  102. package/build/testDoubles/WebSocketBridge/FakeWebSocketBridge.js +1 -1
  103. package/build/testDoubles/WebSocketBridge/FakeWebSocketBridge.js.map +1 -1
  104. package/build/testDoubles/WorkerThreads/FakeWorker.d.ts +27 -0
  105. package/build/testDoubles/WorkerThreads/FakeWorker.js +67 -0
  106. package/build/testDoubles/WorkerThreads/FakeWorker.js.map +1 -0
  107. package/build/testDoubles/generateRandomOutletOptions.js +1 -1
  108. package/build/testDoubles/generateRandomOutletOptions.js.map +1 -1
  109. package/build/validations.js +0 -2
  110. package/build/validations.js.map +1 -1
  111. package/eslint.config.js +3 -0
  112. package/package.json +27 -49
  113. package/prettier.config.js +3 -0
  114. package/src/__tests__/AbstractPackageTest.ts +38 -21
  115. package/src/__tests__/impl/BleDeviceController.test.ts +492 -0
  116. package/src/__tests__/impl/LslEventMarkerEmitter.test.ts +323 -0
  117. package/src/__tests__/impl/LslStreamInfo.test.ts +3 -40
  118. package/src/__tests__/impl/LslStreamInlet.test.ts +344 -97
  119. package/src/__tests__/impl/LslStreamOutlet.test.ts +65 -73
  120. package/src/__tests__/impl/LslWebSocketBridge.test.ts +22 -21
  121. package/src/assertions.ts +2 -1
  122. package/src/impl/LslEventMarkerEmitter.ts +133 -0
  123. package/src/impl/LslStreamInfo.ts +17 -29
  124. package/src/impl/LslStreamInlet.ts +102 -215
  125. package/src/impl/LslStreamOutlet.ts +54 -78
  126. package/src/impl/LslWebSocketBridge.ts +14 -14
  127. package/src/impl/controllers/BleDeviceController.ts +223 -0
  128. package/src/impl/workers/inlet/LslStreamInlet.worker.ts +74 -0
  129. package/src/impl/workers/inlet/StreamInletWorker.ts +348 -0
  130. package/src/impl/workers/outlet/LslStreamOutlet.worker.ts +144 -0
  131. package/src/index.ts +16 -16
  132. package/src/scripts/discoverMuse.ts +50 -0
  133. package/src/scripts/finalizeHandles.ts +63 -0
  134. package/src/scripts/runLslEventMarkerEmitter.ts +15 -0
  135. package/src/scripts/runMuse.ts +50 -0
  136. package/src/scripts/runOutletToInlet.ts +10 -8
  137. package/src/scripts/testDestroyOutlet.ts +5 -0
  138. package/src/testDoubles/BleController/FakeBleController.ts +70 -0
  139. package/src/testDoubles/BleController/SpyBleController.ts +61 -0
  140. package/src/testDoubles/EventMarkerEmitter/FakeEventMarkerEmitter.ts +46 -0
  141. package/src/testDoubles/EventMarkerEmitter/SpyEventMarkerEmitter.ts +31 -0
  142. package/src/testDoubles/EventMarkerEmitter/ThrowingEventMarkerEmitter.ts +29 -0
  143. package/src/testDoubles/StreamInfo/FakeStreamInfo.ts +4 -4
  144. package/src/testDoubles/StreamInlet/FakeStreamInlet.ts +11 -17
  145. package/src/testDoubles/StreamInlet/SpyStreamInlet.ts +3 -16
  146. package/src/testDoubles/StreamOutlet/FakeStreamOutlet.ts +15 -15
  147. package/src/testDoubles/WebSocketBridge/FakeWebSocketBridge.ts +1 -1
  148. package/src/testDoubles/WorkerThreads/FakeWorker.ts +99 -0
  149. package/src/testDoubles/generateRandomOutletOptions.ts +2 -1
  150. package/src/validations.ts +0 -2
  151. package/tsconfig.json +23 -27
  152. package/build/.spruce/settings.json +0 -11
  153. package/build/__tests__/impl/LiblslAdapter.test.d.ts +0 -79
  154. package/build/__tests__/impl/LiblslAdapter.test.js +0 -688
  155. package/build/__tests__/impl/LiblslAdapter.test.js.map +0 -1
  156. package/build/__tests__/impl/LslEventMarkerOutlet.test.d.ts +0 -21
  157. package/build/__tests__/impl/LslEventMarkerOutlet.test.js +0 -160
  158. package/build/__tests__/impl/LslEventMarkerOutlet.test.js.map +0 -1
  159. package/build/handleError.d.ts +0 -8
  160. package/build/handleError.js +0 -25
  161. package/build/handleError.js.map +0 -1
  162. package/build/impl/LiblslAdapter.d.ts +0 -154
  163. package/build/impl/LiblslAdapter.js +0 -317
  164. package/build/impl/LiblslAdapter.js.map +0 -1
  165. package/build/impl/LslEventMarkerOutlet.d.ts +0 -28
  166. package/build/impl/LslEventMarkerOutlet.js +0 -63
  167. package/build/impl/LslEventMarkerOutlet.js.map +0 -1
  168. package/build/scripts/runLslEventMarkerOutlet.js +0 -18
  169. package/build/scripts/runLslEventMarkerOutlet.js.map +0 -1
  170. package/build/testDoubles/EventMarkerOutlet/FakeEventMarkerOutlet.d.ts +0 -13
  171. package/build/testDoubles/EventMarkerOutlet/FakeEventMarkerOutlet.js +0 -26
  172. package/build/testDoubles/EventMarkerOutlet/FakeEventMarkerOutlet.js.map +0 -1
  173. package/build/testDoubles/EventMarkerOutlet/MockEventMarkerOutlet.d.ts +0 -17
  174. package/build/testDoubles/EventMarkerOutlet/MockEventMarkerOutlet.js +0 -46
  175. package/build/testDoubles/EventMarkerOutlet/MockEventMarkerOutlet.js.map +0 -1
  176. package/build/testDoubles/EventMarkerOutlet/SpyEventMarkerOutlet.d.ts +0 -9
  177. package/build/testDoubles/EventMarkerOutlet/SpyEventMarkerOutlet.js +0 -19
  178. package/build/testDoubles/EventMarkerOutlet/SpyEventMarkerOutlet.js.map +0 -1
  179. package/build/testDoubles/EventMarkerOutlet/ThrowingEventMarkerOutlet.d.ts +0 -9
  180. package/build/testDoubles/EventMarkerOutlet/ThrowingEventMarkerOutlet.js +0 -19
  181. package/build/testDoubles/EventMarkerOutlet/ThrowingEventMarkerOutlet.js.map +0 -1
  182. package/build/testDoubles/Liblsl/FakeLiblsl.d.ts +0 -50
  183. package/build/testDoubles/Liblsl/FakeLiblsl.js +0 -126
  184. package/build/testDoubles/Liblsl/FakeLiblsl.js.map +0 -1
  185. package/eslint.config.mjs +0 -3
  186. package/src/.spruce/settings.json +0 -11
  187. package/src/__tests__/impl/LiblslAdapter.test.ts +0 -817
  188. package/src/__tests__/impl/LslEventMarkerOutlet.test.ts +0 -195
  189. package/src/handleError.ts +0 -24
  190. package/src/impl/LiblslAdapter.ts +0 -543
  191. package/src/impl/LslEventMarkerOutlet.ts +0 -97
  192. package/src/scripts/runLslEventMarkerOutlet.ts +0 -23
  193. package/src/testDoubles/EventMarkerOutlet/FakeEventMarkerOutlet.ts +0 -36
  194. package/src/testDoubles/EventMarkerOutlet/MockEventMarkerOutlet.ts +0 -75
  195. package/src/testDoubles/EventMarkerOutlet/SpyEventMarkerOutlet.ts +0 -24
  196. package/src/testDoubles/EventMarkerOutlet/ThrowingEventMarkerOutlet.ts +0 -28
  197. package/src/testDoubles/Liblsl/FakeLiblsl.ts +0 -182
  198. /package/build/scripts/{runLslEventMarkerOutlet.d.ts → discoverMuse.d.ts} +0 -0
@@ -4,41 +4,85 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
+ import { FakeLiblsl } from '@neurodevs/ndx-native';
7
8
  import { test, assert } from '@neurodevs/node-tdd';
9
+ import { createPointer, DataType, PointerType, unwrapPointer, } from 'ffi-rs';
10
+ import LslStreamInlet from '../../impl/LslStreamInlet.js';
11
+ import StreamInletWorker from '../../impl/workers/inlet/StreamInletWorker.js';
12
+ import FakeWorker from '../../testDoubles/WorkerThreads/FakeWorker.js';
8
13
  import AbstractPackageTest from '../AbstractPackageTest.js';
9
14
  export default class LslStreamInletTest extends AbstractPackageTest {
10
15
  static instance;
11
16
  static callsToOnData;
17
+ static sampleBufferPtr = unwrapPointer(createPointer({
18
+ paramsType: [DataType.U8Array],
19
+ paramsValue: [new Float32Array(this.channelCount * this.chunkSize)],
20
+ }))[0];
21
+ static timestampBufferPtr = unwrapPointer(createPointer({
22
+ paramsType: [DataType.U8Array],
23
+ paramsValue: [new Float64Array(this.chunkSize)],
24
+ }))[0];
25
+ static errorCodePtr = unwrapPointer(createPointer({
26
+ paramsType: [DataType.U8Array],
27
+ paramsValue: [new Int32Array(1)],
28
+ }))[0];
29
+ static async beforeAll() {
30
+ assert.isEqual(LslStreamInlet.waitAfterOpenStreamMs, 100, 'Default waitAfterOpenStreamMs should be 100!');
31
+ }
12
32
  static async beforeEach() {
13
33
  await super.beforeEach();
14
34
  this.setFakeLiblsl();
15
35
  this.setFakeStreamInfo();
16
36
  this.setSpyStreamInlet();
17
37
  this.callsToOnData = [];
38
+ LslStreamInlet.waitAfterOpenStreamMs = 0;
39
+ LslStreamInlet.Worker = FakeWorker;
40
+ FakeWorker.resetTestDoubles();
41
+ StreamInletWorker.lsl = this.fakeLiblsl;
42
+ StreamInletWorker.freePointer = () => { };
43
+ FakeWorker.fakeOnData = this.onData;
18
44
  this.instance = await this.LslStreamInlet();
19
45
  }
20
46
  static async createsInstance() {
21
47
  assert.isTruthy(this.instance, 'Failed to create instance!');
22
48
  }
23
49
  static async callsBindingsToCreateStreamInlet() {
24
- const fakeInfo = this.instance.getStreamInfo();
25
- assert.isTruthy(fakeInfo, 'Should have created stream info!');
50
+ await this.startPulling();
51
+ assert.isTruthy(this.inletHandle, 'Should have created stream info!');
26
52
  assert.isEqualDeep(this.fakeLiblsl.lastCreateInletOptions, {
27
- info: fakeInfo.boundInfo,
53
+ infoHandle: this.inletHandle,
28
54
  maxBufferedMs: this.maxBufferedMs,
29
55
  }, 'Should have called createInlet!');
56
+ this.stopPulling();
30
57
  }
31
- static async flushQueueCallsLslBinding() {
32
- this.instance.flushQueue();
33
- assert.isEqualDeep(this.fakeLiblsl.lastFlushInletOptions, { inlet: this.boundInlet }, 'Should have called flushInlet!');
58
+ static async flushInletCallsLslBinding() {
59
+ this.instance.flushInlet();
60
+ assert.isEqualDeep(this.fakeLiblsl.lastFlushInletOptions, { inletHandle: this.inletHandle }, 'Should have called flushInlet!');
34
61
  }
35
62
  static async destroyCallsLslBinding() {
36
- this.instance.destroy();
37
- assert.isEqualDeep(this.fakeLiblsl.lastDestroyInletOptions, { inlet: this.boundInlet }, 'Did not destroy inlet!');
63
+ await this.startPullingThenDestroy();
64
+ assert.isEqualDeep(this.fakeLiblsl.lastDestroyInletOptions, { inletHandle: this.inletHandle }, 'Did not destroy inlet!');
65
+ }
66
+ static async destroyFreesAllPointers() {
67
+ let calls = [];
68
+ StreamInletWorker.freePointer = (params) => {
69
+ calls.push(params);
70
+ };
71
+ await this.startPullingThenDestroy();
72
+ const { paramsType, pointerType } = calls[0];
73
+ assert.isEqualDeep({ paramsType, pointerType }, {
74
+ paramsType: [
75
+ DataType.U8Array,
76
+ DataType.U8Array,
77
+ DataType.U8Array,
78
+ DataType.U8Array,
79
+ ],
80
+ pointerType: PointerType.CPointer,
81
+ }, 'Destroy did not free all pointers!');
38
82
  }
39
83
  static async destroyCallsStopIfIsRunning() {
40
- this.instance.startPulling();
41
- this.instance.destroy();
84
+ await this.startPulling();
85
+ this.destroy();
42
86
  assert.isFalse(this.instance.isRunning, 'Did not stop inlet before destroying!');
43
87
  }
44
88
  static async destroyDoesNotCallStopIfNotRunning() {
@@ -53,11 +97,72 @@ export default class LslStreamInletTest extends AbstractPackageTest {
53
97
  assert.isFalse(this.isRunning, 'isRunning should be false at first!');
54
98
  }
55
99
  static async startPullingSetsIsRunningToTrue() {
56
- this.startPulling();
57
- await this.wait(10);
100
+ await this.startPulling();
58
101
  assert.isTrue(this.isRunning, 'isRunning should be true!');
59
102
  this.stopPulling();
60
103
  }
104
+ static async doesNotStartPullingTwiceIfAlreadyRunning() {
105
+ await this.startPulling();
106
+ await this.startPulling();
107
+ assert.isEqual(FakeWorker.callsToPostMessage.filter((msg) => msg.type === 'startPulling').length, 1, 'startPulling did not return early!');
108
+ this.stopPulling();
109
+ }
110
+ static async startPullingOpensInletStream() {
111
+ await this.startPulling();
112
+ const aboutOneYearInMs = 32000000 * 1000;
113
+ assert.isEqualDeep(this.fakeLiblsl.lastOpenStreamOptions, {
114
+ inletHandle: this.inletHandle,
115
+ timeoutMs: aboutOneYearInMs,
116
+ errorCodePtr: this.errorCodePtr,
117
+ }, 'Did not open inlet stream!');
118
+ this.stopPulling();
119
+ }
120
+ static async opensInletStreamWithPassedTimeout() {
121
+ const openStreamTimeoutMs = 1000 * Math.random();
122
+ const instance = await this.LslStreamInlet({
123
+ openStreamTimeoutMs,
124
+ });
125
+ await this.startPulling(instance);
126
+ assert.isEqualDeep(this.fakeLiblsl.lastOpenStreamOptions, {
127
+ inletHandle: this.inletHandle,
128
+ timeoutMs: openStreamTimeoutMs,
129
+ errorCodePtr: this.errorCodePtr,
130
+ }, 'Did not open inlet stream with passed timeout!');
131
+ instance.stopPulling();
132
+ }
133
+ static async waitsAfterOpeningStreamWithPassedOption() {
134
+ const waitAfterOpenStreamMs = 10;
135
+ const instance = await this.LslStreamInlet({
136
+ waitAfterOpenStreamMs,
137
+ });
138
+ let t0 = Date.now();
139
+ await this.startPulling(instance);
140
+ let elapsed = Date.now() - t0;
141
+ instance.stopPulling();
142
+ assert.isAbove(elapsed, waitAfterOpenStreamMs * 0.8, 'Did not wait after opening stream!');
143
+ }
144
+ static async stopPullingClosesInletStream() {
145
+ await this.startPulling();
146
+ this.stopPulling();
147
+ assert.isEqualDeep(this.fakeLiblsl.lastCloseStreamOptions, {
148
+ inletHandle: this.inletHandle,
149
+ }, 'Did not close inlet stream!');
150
+ }
151
+ static async stopPullingFlushesInletByDefault() {
152
+ await this.startPulling();
153
+ this.stopPulling();
154
+ assert.isEqualDeep(this.fakeLiblsl.lastFlushInletOptions, {
155
+ inletHandle: this.inletHandle,
156
+ }, 'Did not flush inlet!');
157
+ }
158
+ static async stopPullingDoesNotFlushInletIfPassedOption() {
159
+ const instance = await this.LslStreamInlet({
160
+ flushInletOnStop: false,
161
+ });
162
+ await this.startPulling(instance);
163
+ instance.stopPulling();
164
+ assert.isUndefined(this.fakeLiblsl.lastFlushInletOptions, 'Should not have flushed inlet!');
165
+ }
61
166
  static async stopPullingSetsIsRunningToFalse() {
62
167
  await this.startThenStop();
63
168
  assert.isFalse(this.isRunning, 'isRunning should be false!');
@@ -71,42 +176,78 @@ export default class LslStreamInletTest extends AbstractPackageTest {
71
176
  assert.isEqual(this.callsToOnData.length, 2, 'Did not call onData as expected!');
72
177
  }
73
178
  static async callsPullSampleIfChunkSizeIsOne() {
74
- const inlet = await this.runChunkSizeOne();
179
+ await this.runChunkSizeOne();
75
180
  assert.isEqualDeep(this.fakeLiblsl.lastPullSampleOptions, {
76
- inlet: this.boundInlet,
77
- dataBufferPtr: inlet['dataBufferPtr'],
78
- dataBufferElements: this.channelCount,
79
- timeout: 0,
80
- errcodePtr: inlet['errorCodeBufferPtr'],
181
+ inletHandle: this.inletHandle,
182
+ sampleBufferPtr: this.sampleBufferPtr,
183
+ sampleBufferElements: this.channelCount,
184
+ timeoutMs: 0,
185
+ errorCodePtr: this.errorCodePtr,
81
186
  }, 'Should have called pullSample!');
82
187
  }
83
188
  static async callsPullChunkIfChunkSizeIsNotOne() {
84
189
  await this.startThenStop();
85
190
  assert.isEqualDeep(this.fakeLiblsl.lastPullChunkOptions, {
86
- inlet: this.boundInlet,
87
- dataBufferPtr: this.instance['dataBufferPtr'],
88
- timestampBufferPtr: this.instance['timestampBufferPtr'],
89
- dataBufferElements: this.chunkSize * this.channelCount,
191
+ inletHandle: this.inletHandle,
192
+ sampleBufferPtr: this.sampleBufferPtr,
193
+ timestampBufferPtr: this.timestampBufferPtr,
194
+ sampleBufferElements: this.chunkSize * this.channelCount,
90
195
  timestampBufferElements: this.chunkSize,
91
- timeout: 0,
92
- errcodePtr: this.instance['errorCodeBufferPtr'],
196
+ timeoutMs: 0,
197
+ errorCodePtr: this.errorCodePtr,
93
198
  }, 'Should have called pullChunk!');
94
199
  }
200
+ static async pushSampleHandlesErrorCode() {
201
+ let passedErrorCode;
202
+ StreamInletWorker.handleLslError = (errorCode) => {
203
+ passedErrorCode = errorCode;
204
+ };
205
+ const fakeErrorCode = [-4, -3, -2, -1, 0][Math.floor(Math.random() * 5)];
206
+ const worker = this.getFakeWorker();
207
+ worker['inletWorker']['pullErrorBuffer'].writeInt32LE(fakeErrorCode);
208
+ await this.startThenStop();
209
+ assert.isEqualDeep(passedErrorCode, FakeLiblsl.fakeErrorCode, 'Did not pass the expected error code to handleLslError!');
210
+ }
211
+ static async waitsBetweenPullsIfPassedOption() {
212
+ const waitBetweenPullsMs = 10;
213
+ const instance = await this.LslStreamInlet({
214
+ waitBetweenPullsMs,
215
+ });
216
+ let pulls = 0;
217
+ const inletWorker = this.getFakeWorker(instance)['inletWorker'];
218
+ const original = inletWorker['pullDataOnce'].bind(inletWorker);
219
+ inletWorker['pullDataOnce'] = async () => {
220
+ pulls++;
221
+ await original();
222
+ };
223
+ const t0 = Date.now();
224
+ const promise = this.startPulling(instance);
225
+ while (pulls < 2) {
226
+ await this.wait(1);
227
+ }
228
+ const elapsed = Date.now() - t0;
229
+ assert.isAbove(elapsed, waitBetweenPullsMs * 0.8, 'Did not wait between pulls');
230
+ instance.stopPulling();
231
+ await promise;
232
+ }
233
+ static async waitsOneMillisecondBetweenPullsIfNotPassed() {
234
+ assert.isEqual(this.instance['waitBetweenPullsMs'], 1, 'Default waitBetweenPullsMs should be 1!');
235
+ }
95
236
  static async passesTimeoutMsOptionToPullSample() {
96
- const timeoutMs = 1000 * Math.random();
237
+ const pullTimeoutMs = 1000 * Math.random();
97
238
  await this.runInletWithOptions({
98
239
  chunkSize: 1,
99
- timeoutMs,
240
+ pullTimeoutMs,
100
241
  });
101
- assert.isEqual(this.fakeLiblsl.lastPullSampleOptions?.timeout, timeoutMs / 1000, 'Did not pass timeoutMs to pullSample!');
242
+ assert.isEqual(this.fakeLiblsl.lastPullSampleOptions?.timeoutMs, pullTimeoutMs, 'Did not pass pullTimeoutMs to pullSample!');
102
243
  }
103
244
  static async passesTimeoutMsOptionToPullChunk() {
104
- const timeoutMs = 1000 * Math.random();
245
+ const pullTimeoutMs = 1000 * Math.random();
105
246
  await this.runInletWithOptions({
106
247
  chunkSize: this.chunkSize,
107
- timeoutMs,
248
+ pullTimeoutMs,
108
249
  });
109
- assert.isEqual(this.fakeLiblsl.lastPullChunkOptions?.timeout, timeoutMs / 1000, 'Did not pass timeoutMs to pullChunk!');
250
+ assert.isEqual(this.fakeLiblsl.lastPullChunkOptions?.timeoutMs, pullTimeoutMs, 'Did not pass timeoutMs to pullChunk!');
110
251
  }
111
252
  static async defaultsMaxBufferedMsToSixMinutesInSeconds() {
112
253
  await this.runInletWithOptions({
@@ -115,27 +256,9 @@ export default class LslStreamInletTest extends AbstractPackageTest {
115
256
  const sixMinutesInMs = 360 * 1000;
116
257
  assert.isEqualDeep(this.fakeLiblsl.lastCreateInletOptions?.maxBufferedMs, sixMinutesInMs);
117
258
  }
118
- static async throwsWithUnknownErrorCode() {
119
- await this.assertThrowsWithErrorCode(-999, `An unknown liblsl error has occurred!`);
120
- }
121
- static async throwsWithErrorCodeNegativeOne() {
122
- await this.assertThrowsWithErrorCode(-1, `The liblsl operation failed due to a timeout!`);
123
- }
124
- static async throwsWithErrorCodeNegativeTwo() {
125
- await this.assertThrowsWithErrorCode(-2, `The liblsl stream has been lost!`);
126
- }
127
- static async throwsWithErrorCodeNegativeThree() {
128
- await this.assertThrowsWithErrorCode(-3, 'A liblsl argument was incorrectly specified!');
129
- }
130
- static async throwsWithErrorCodeNegativeFour() {
131
- await this.assertThrowsWithErrorCode(-4, 'An internal liblsl error has occurred!');
132
- }
133
- static async assertThrowsWithErrorCode(errorCode, message) {
134
- await this.startThenStop();
135
- this.instance['errorCodeBuffer'].writeInt32LE(errorCode);
136
- assert.doesThrow(() => {
137
- this.instance['handleErrorCodeIfPresent']();
138
- }, message);
259
+ static async startPullingThenDestroy() {
260
+ await this.startPulling();
261
+ this.destroy();
139
262
  }
140
263
  static async runChunkSizeOne() {
141
264
  return await this.runInletWithOptions({
@@ -149,21 +272,35 @@ export default class LslStreamInletTest extends AbstractPackageTest {
149
272
  }
150
273
  static async startThenStop(inlet) {
151
274
  const instance = inlet || this.instance;
152
- instance.startPulling();
275
+ await this.startPulling(instance);
153
276
  await this.wait(10);
154
277
  instance.stopPulling();
155
278
  }
156
- static startPulling() {
157
- this.instance.startPulling();
279
+ static async startPulling(instance) {
280
+ const inst = instance || this.instance;
281
+ const startPullingPromise = inst.startPulling();
282
+ while (!this.getFakeWorker(inst).createInletPromise) {
283
+ await this.wait(1);
284
+ }
285
+ await this.getFakeWorker(inst).createInletPromise;
286
+ inst['workerReady'] = true;
287
+ await startPullingPromise;
158
288
  }
159
289
  static stopPulling() {
160
290
  this.instance.stopPulling();
161
291
  }
292
+ static destroy() {
293
+ this.instance.destroy();
294
+ }
162
295
  static get isRunning() {
163
296
  return this.instance.isRunning;
164
297
  }
165
- static get boundInlet() {
166
- return this.instance.getBoundInlet();
298
+ static get inletHandle() {
299
+ return this.getFakeWorker()['inletWorker']['inletHandle'];
300
+ }
301
+ static getFakeWorker(instance) {
302
+ const inst = instance || this.instance;
303
+ return inst['worker'];
167
304
  }
168
305
  static onData = (samples, timestamps) => {
169
306
  this.callsToOnData.push({ samples, timestamps });
@@ -182,10 +319,13 @@ __decorate([
182
319
  ], LslStreamInletTest, "callsBindingsToCreateStreamInlet", null);
183
320
  __decorate([
184
321
  test()
185
- ], LslStreamInletTest, "flushQueueCallsLslBinding", null);
322
+ ], LslStreamInletTest, "flushInletCallsLslBinding", null);
186
323
  __decorate([
187
324
  test()
188
325
  ], LslStreamInletTest, "destroyCallsLslBinding", null);
326
+ __decorate([
327
+ test()
328
+ ], LslStreamInletTest, "destroyFreesAllPointers", null);
189
329
  __decorate([
190
330
  test()
191
331
  ], LslStreamInletTest, "destroyCallsStopIfIsRunning", null);
@@ -198,6 +338,27 @@ __decorate([
198
338
  __decorate([
199
339
  test()
200
340
  ], LslStreamInletTest, "startPullingSetsIsRunningToTrue", null);
341
+ __decorate([
342
+ test()
343
+ ], LslStreamInletTest, "doesNotStartPullingTwiceIfAlreadyRunning", null);
344
+ __decorate([
345
+ test()
346
+ ], LslStreamInletTest, "startPullingOpensInletStream", null);
347
+ __decorate([
348
+ test()
349
+ ], LslStreamInletTest, "opensInletStreamWithPassedTimeout", null);
350
+ __decorate([
351
+ test()
352
+ ], LslStreamInletTest, "waitsAfterOpeningStreamWithPassedOption", null);
353
+ __decorate([
354
+ test()
355
+ ], LslStreamInletTest, "stopPullingClosesInletStream", null);
356
+ __decorate([
357
+ test()
358
+ ], LslStreamInletTest, "stopPullingFlushesInletByDefault", null);
359
+ __decorate([
360
+ test()
361
+ ], LslStreamInletTest, "stopPullingDoesNotFlushInletIfPassedOption", null);
201
362
  __decorate([
202
363
  test()
203
364
  ], LslStreamInletTest, "stopPullingSetsIsRunningToFalse", null);
@@ -215,26 +376,20 @@ __decorate([
215
376
  ], LslStreamInletTest, "callsPullChunkIfChunkSizeIsNotOne", null);
216
377
  __decorate([
217
378
  test()
218
- ], LslStreamInletTest, "passesTimeoutMsOptionToPullSample", null);
379
+ ], LslStreamInletTest, "pushSampleHandlesErrorCode", null);
219
380
  __decorate([
220
381
  test()
221
- ], LslStreamInletTest, "passesTimeoutMsOptionToPullChunk", null);
382
+ ], LslStreamInletTest, "waitsBetweenPullsIfPassedOption", null);
222
383
  __decorate([
223
384
  test()
224
- ], LslStreamInletTest, "defaultsMaxBufferedMsToSixMinutesInSeconds", null);
225
- __decorate([
226
- test()
227
- ], LslStreamInletTest, "throwsWithUnknownErrorCode", null);
228
- __decorate([
229
- test()
230
- ], LslStreamInletTest, "throwsWithErrorCodeNegativeOne", null);
385
+ ], LslStreamInletTest, "waitsOneMillisecondBetweenPullsIfNotPassed", null);
231
386
  __decorate([
232
387
  test()
233
- ], LslStreamInletTest, "throwsWithErrorCodeNegativeTwo", null);
388
+ ], LslStreamInletTest, "passesTimeoutMsOptionToPullSample", null);
234
389
  __decorate([
235
390
  test()
236
- ], LslStreamInletTest, "throwsWithErrorCodeNegativeThree", null);
391
+ ], LslStreamInletTest, "passesTimeoutMsOptionToPullChunk", null);
237
392
  __decorate([
238
393
  test()
239
- ], LslStreamInletTest, "throwsWithErrorCodeNegativeFour", null);
394
+ ], LslStreamInletTest, "defaultsMaxBufferedMsToSixMinutesInSeconds", null);
240
395
  //# sourceMappingURL=LslStreamInlet.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LslStreamInlet.test.js","sourceRoot":"","sources":["../../../src/__tests__/impl/LslStreamInlet.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LslStreamInlet.test.js","sourceRoot":"","sources":["../../../src/__tests__/impl/LslStreamInlet.test.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { LslSample } from 'impl/LiblslAdapter.js';
1
+ import { LslSample } from '@neurodevs/ndx-native';
2
2
  import AbstractPackageTest from '../AbstractPackageTest.js';
3
3
  export default class LslStreamOutletTest extends AbstractPackageTest {
4
4
  private static randomOutletOptions;
@@ -21,16 +21,12 @@ export default class LslStreamOutletTest extends AbstractPackageTest {
21
21
  protected static canDestroyOutlet(): Promise<void>;
22
22
  protected static destroyAlsoCallsDestroyStreamInfo(): Promise<void>;
23
23
  protected static pushSampleShouldNotCreateMultipleOutlets(): Promise<void>;
24
+ protected static pushSampleAcceptsOptionalPreciseTimestamp(): Promise<void>;
25
+ protected static pushSampleHandlesErrorCode(): Promise<void>;
24
26
  protected static waitsForTenMsAfterConstructionBeforeReturning(): Promise<void>;
25
27
  protected static defaultsMaxBufferedMsToSixMinutesInSeconds(): Promise<void>;
26
28
  protected static defaultsManufacturerToNA(): Promise<void>;
27
29
  protected static defaultsUnitsToNA(): Promise<void>;
28
- protected static throwsWithUnknownErrorCode(): Promise<void>;
29
- protected static throwsWithErrorCodeNegativeOne(): Promise<void>;
30
- protected static throwsWithErrorCodeNegativeTwo(): Promise<void>;
31
- protected static throwsWithErrorCodeNegativeThree(): Promise<void>;
32
- protected static throwsWithErrorCodeNegativeFour(): Promise<void>;
33
- private static assertThrowsWithErrorCode;
34
30
  private static assertThrowsWithEmptyChannelNames;
35
31
  private static assertThrowsInvalidSampleRateHz;
36
32
  private static assertThrowsInvalidChannelFormat;
@@ -4,13 +4,15 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
+ import { FakeLiblsl } from '@neurodevs/ndx-native';
7
8
  import { test, assert } from '@neurodevs/node-tdd';
8
9
  import { CHANNEL_FORMATS } from '../../consts.js';
9
10
  import LslStreamOutlet from '../../impl/LslStreamOutlet.js';
11
+ import { setOutletHandleLslError, setOutletLiblslAdapter, } from '../../impl/workers/outlet/LslStreamOutlet.worker.js';
10
12
  import { TEST_SUPPORTED_CHANNEL_FORMATS, TEST_UNSUPPORTED_CHANNEL_FORMATS, } from '../../testDoubles/consts.js';
11
13
  import generateRandomOutletOptions from '../../testDoubles/generateRandomOutletOptions.js';
12
- import FakeLiblsl from '../../testDoubles/Liblsl/FakeLiblsl.js';
13
14
  import FakeStreamInfo from '../../testDoubles/StreamInfo/FakeStreamInfo.js';
15
+ import FakeWorker from '../../testDoubles/WorkerThreads/FakeWorker.js';
14
16
  import AbstractPackageTest from '../AbstractPackageTest.js';
15
17
  export default class LslStreamOutletTest extends AbstractPackageTest {
16
18
  static randomOutletOptions;
@@ -20,6 +22,9 @@ export default class LslStreamOutletTest extends AbstractPackageTest {
20
22
  this.randomOutletOptions = generateRandomOutletOptions();
21
23
  this.setFakeLiblsl();
22
24
  this.setFakeStreamInfo();
25
+ LslStreamOutlet.Worker = FakeWorker;
26
+ FakeWorker.resetTestDoubles();
27
+ setOutletLiblslAdapter(this.fakeLiblsl);
23
28
  }
24
29
  static async throwsWithEmptyChannelNames() {
25
30
  await this.assertThrowsWithEmptyChannelNames();
@@ -67,31 +72,31 @@ export default class LslStreamOutletTest extends AbstractPackageTest {
67
72
  static async canPushFloatSampleToLsl(sample) {
68
73
  const outlet = await this.FloatOutlet();
69
74
  outlet.pushSample(sample);
70
- assert.isEqual(this.fakeLiblsl.lastPushSampleFloatTimestampOptions?.outlet, this.fakeLiblsl.outlet);
75
+ assert.isEqual(this.fakeLiblsl.lastPushSampleFloatTimestampOptions?.outletHandle, this.fakeLiblsl.outletHandle);
71
76
  assert.isEqualDeep(this.fakeLiblsl.lastPushSampleFloatTimestampOptions?.sample, sample);
72
77
  assert.isEqualDeep(this.fakeLiblsl.lastCreateOutletOptions, {
73
- info: this.fakeLiblsl.streamInfo,
78
+ infoHandle: this.fakeLiblsl.infoHandle,
74
79
  chunkSize: this.randomOutletOptions.chunkSize,
75
80
  maxBufferedMs: this.randomOutletOptions.maxBufferedMs,
76
81
  });
77
- assert.isNumber(this.fakeLiblsl.lastPushSampleFloatTimestampOptions?.timestamp);
82
+ assert.isNumber(this.fakeLiblsl.lastPushSampleFloatTimestampOptions?.timestampSec);
78
83
  }
79
84
  static async canPushStringSampleToLsl() {
80
85
  const sample = [this.generateId()];
81
86
  const outlet = await this.StringOutlet();
82
87
  outlet.pushSample(sample);
83
- assert.isEqual(this.fakeLiblsl.lastPushSampleStringTimestampOptions?.outlet, this.fakeLiblsl.outlet);
88
+ assert.isEqual(this.fakeLiblsl.lastPushSampleStringTimestampOptions?.outletHandle, this.fakeLiblsl.outletHandle);
84
89
  assert.isEqualDeep(this.fakeLiblsl.lastPushSampleStringTimestampOptions?.sample, sample);
85
- assert.isNumber(this.fakeLiblsl.lastPushSampleStringTimestampOptions?.timestamp);
90
+ assert.isNumber(this.fakeLiblsl.lastPushSampleStringTimestampOptions?.timestampSec);
86
91
  }
87
92
  static async pushingStringTwiceGivesDifferentTimestamps() {
88
93
  const outlet = await this.StringOutlet();
89
94
  const sample = [this.generateId()];
90
95
  outlet.pushSample(sample);
91
- const t1 = this.fakeLiblsl.lastPushSampleStringTimestampOptions?.timestamp;
96
+ const t1 = this.fakeLiblsl.lastPushSampleStringTimestampOptions?.timestampSec;
92
97
  await this.wait(10);
93
98
  outlet.pushSample(sample);
94
- const t2 = this.fakeLiblsl.lastPushSampleStringTimestampOptions?.timestamp;
99
+ const t2 = this.fakeLiblsl.lastPushSampleStringTimestampOptions?.timestampSec;
95
100
  assert.isNotEqual(t1, t2);
96
101
  assert.isEqual(this.fakeLiblsl.localClockHitCount, 2);
97
102
  }
@@ -120,7 +125,7 @@ export default class LslStreamOutletTest extends AbstractPackageTest {
120
125
  static async destroyAlsoCallsDestroyStreamInfo() {
121
126
  const outlet = await this.LslStreamOutlet();
122
127
  outlet.destroy();
123
- assert.isEqualDeep(this.fakeLiblsl.lastDestroyStreamInfoOptions, { info: this.fakeLiblsl.streamInfo }, 'Did not call destroyStreamInfo on destroy!');
128
+ assert.isEqualDeep(this.fakeLiblsl.lastDestroyOutletOptions, { outletHandle: this.fakeLiblsl.outletHandle }, 'Did not call destroy on outlet!');
124
129
  }
125
130
  static async pushSampleShouldNotCreateMultipleOutlets() {
126
131
  const outlet = await this.FloatOutlet();
@@ -129,6 +134,24 @@ export default class LslStreamOutletTest extends AbstractPackageTest {
129
134
  outlet.pushSample([3.0]);
130
135
  assert.isEqual(this.fakeLiblsl.createOutletHitCount, 1);
131
136
  }
137
+ static async pushSampleAcceptsOptionalPreciseTimestamp() {
138
+ const outlet = await this.FloatOutlet();
139
+ const timestampSec = Math.random() * 10000;
140
+ outlet.pushSample([1.0], timestampSec);
141
+ assert.isEqual(this.fakeLiblsl.lastPushSampleFloatTimestampOptions?.timestampSec, timestampSec);
142
+ }
143
+ static async pushSampleHandlesErrorCode() {
144
+ let passedErrorCode;
145
+ setOutletHandleLslError((errorCode) => {
146
+ passedErrorCode = errorCode;
147
+ });
148
+ FakeLiblsl.fakeErrorCode = [-4, -3, -2, -1, 0][Math.floor(Math.random() * 5)];
149
+ const outlet = Math.random() > 0.5
150
+ ? await this.FloatOutlet()
151
+ : await this.StringOutlet();
152
+ outlet.pushSample([1.0]);
153
+ assert.isEqualDeep(passedErrorCode, FakeLiblsl.fakeErrorCode, 'Did not pass the expected error code to handleError!');
154
+ }
132
155
  static async waitsForTenMsAfterConstructionBeforeReturning() {
133
156
  const startMs = Date.now();
134
157
  await this.LslStreamOutlet({ waitAfterConstructionMs: 10 });
@@ -147,30 +170,6 @@ export default class LslStreamOutletTest extends AbstractPackageTest {
147
170
  const outlet = await this.LslStreamOutlet({ units: undefined });
148
171
  assert.isEqualDeep(outlet['units'], 'N/A', 'Did not set units as N/A!');
149
172
  }
150
- static async throwsWithUnknownErrorCode() {
151
- await this.assertThrowsWithErrorCode(-999, `An unknown liblsl error has occurred!`);
152
- }
153
- static async throwsWithErrorCodeNegativeOne() {
154
- await this.assertThrowsWithErrorCode(-1, `The liblsl operation failed due to a timeout!`);
155
- }
156
- static async throwsWithErrorCodeNegativeTwo() {
157
- await this.assertThrowsWithErrorCode(-2, `The liblsl stream has been lost!`);
158
- }
159
- static async throwsWithErrorCodeNegativeThree() {
160
- await this.assertThrowsWithErrorCode(-3, 'A liblsl argument was incorrectly specified!');
161
- }
162
- static async throwsWithErrorCodeNegativeFour() {
163
- await this.assertThrowsWithErrorCode(-4, 'An internal liblsl error has occurred!');
164
- }
165
- static async assertThrowsWithErrorCode(errorCode, message) {
166
- FakeLiblsl.fakeErrorCode = errorCode;
167
- const outlet = Math.random() > 0.5
168
- ? await this.FloatOutlet()
169
- : await this.StringOutlet();
170
- assert.doesThrow(() => {
171
- outlet.pushSample([1.0]);
172
- }, message);
173
- }
174
173
  static async assertThrowsWithEmptyChannelNames() {
175
174
  await this.createAndAssertThrows('channelNames', [], `Invalid channel count! Must be a positive integer, not: 0.`);
176
175
  }
@@ -260,34 +259,25 @@ __decorate([
260
259
  ], LslStreamOutletTest, "pushSampleShouldNotCreateMultipleOutlets", null);
261
260
  __decorate([
262
261
  test()
263
- ], LslStreamOutletTest, "waitsForTenMsAfterConstructionBeforeReturning", null);
264
- __decorate([
265
- test()
266
- ], LslStreamOutletTest, "defaultsMaxBufferedMsToSixMinutesInSeconds", null);
262
+ ], LslStreamOutletTest, "pushSampleAcceptsOptionalPreciseTimestamp", null);
267
263
  __decorate([
268
264
  test()
269
- ], LslStreamOutletTest, "defaultsManufacturerToNA", null);
265
+ ], LslStreamOutletTest, "pushSampleHandlesErrorCode", null);
270
266
  __decorate([
271
267
  test()
272
- ], LslStreamOutletTest, "defaultsUnitsToNA", null);
273
- __decorate([
274
- test()
275
- ], LslStreamOutletTest, "throwsWithUnknownErrorCode", null);
276
- __decorate([
277
- test()
278
- ], LslStreamOutletTest, "throwsWithErrorCodeNegativeOne", null);
268
+ ], LslStreamOutletTest, "waitsForTenMsAfterConstructionBeforeReturning", null);
279
269
  __decorate([
280
270
  test()
281
- ], LslStreamOutletTest, "throwsWithErrorCodeNegativeTwo", null);
271
+ ], LslStreamOutletTest, "defaultsMaxBufferedMsToSixMinutesInSeconds", null);
282
272
  __decorate([
283
273
  test()
284
- ], LslStreamOutletTest, "throwsWithErrorCodeNegativeThree", null);
274
+ ], LslStreamOutletTest, "defaultsManufacturerToNA", null);
285
275
  __decorate([
286
276
  test()
287
- ], LslStreamOutletTest, "throwsWithErrorCodeNegativeFour", null);
277
+ ], LslStreamOutletTest, "defaultsUnitsToNA", null);
288
278
  class CheckingOutlet extends LslStreamOutlet {
289
- constructor(info, options) {
290
- super(info, options);
279
+ constructor(options) {
280
+ super(options);
291
281
  }
292
282
  }
293
283
  //# sourceMappingURL=LslStreamOutlet.test.js.map