@neurodevs/node-lsl 10.2.1 → 11.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.
Files changed (120) hide show
  1. package/README.md +17 -38
  2. package/build/__tests__/{AbstractNodeLslTest.d.ts → AbstractLslTest.d.ts} +7 -6
  3. package/build/__tests__/{AbstractNodeLslTest.js → AbstractLslTest.js} +30 -24
  4. package/build/__tests__/AbstractLslTest.js.map +1 -0
  5. package/build/__tests__/{TimeMarkerOutlet.test.d.ts → EventMarkerOutlet.test.d.ts} +9 -8
  6. package/build/__tests__/{TimeMarkerOutlet.test.js → EventMarkerOutlet.test.js} +53 -48
  7. package/build/__tests__/EventMarkerOutlet.test.js.map +1 -0
  8. package/build/__tests__/{Liblsl.test.d.ts → LiblslAdapter.test.d.ts} +2 -2
  9. package/build/__tests__/{Liblsl.test.js → LiblslAdapter.test.js} +43 -75
  10. package/build/__tests__/LiblslAdapter.test.js.map +1 -0
  11. package/build/__tests__/LslStreamInfo.test.d.ts +3 -3
  12. package/build/__tests__/LslStreamInfo.test.js +3 -3
  13. package/build/__tests__/LslStreamInfo.test.js.map +1 -1
  14. package/build/__tests__/{LslInlet.test.d.ts → LslStreamInlet.test.d.ts} +4 -4
  15. package/build/__tests__/{LslInlet.test.js → LslStreamInlet.test.js} +19 -19
  16. package/build/__tests__/LslStreamInlet.test.js.map +1 -0
  17. package/build/__tests__/{LslOutlet.test.d.ts → LslStreamOutlet.test.d.ts} +3 -3
  18. package/build/__tests__/{LslOutlet.test.js → LslStreamOutlet.test.js} +45 -41
  19. package/build/__tests__/LslStreamOutlet.test.js.map +1 -0
  20. package/build/components/EventMarkerOutlet.d.ts +20 -0
  21. package/build/components/{TimeMarkerOutlet.js → EventMarkerOutlet.js} +11 -10
  22. package/build/components/EventMarkerOutlet.js.map +1 -0
  23. package/build/components/{Liblsl.d.ts → LiblslAdapter.d.ts} +1 -1
  24. package/build/components/{Liblsl.js → LiblslAdapter.js} +7 -7
  25. package/build/components/LiblslAdapter.js.map +1 -0
  26. package/build/components/LslStreamInfo.js +2 -2
  27. package/build/components/LslStreamInfo.js.map +1 -1
  28. package/build/components/{LslInlet.d.ts → LslStreamInlet.d.ts} +4 -4
  29. package/build/components/{LslInlet.js → LslStreamInlet.js} +5 -5
  30. package/build/components/LslStreamInlet.js.map +1 -0
  31. package/build/components/{LslOutlet.d.ts → LslStreamOutlet.d.ts} +1 -1
  32. package/build/components/{LslOutlet.js → LslStreamOutlet.js} +5 -5
  33. package/build/components/LslStreamOutlet.js.map +1 -0
  34. package/build/index.d.ts +20 -19
  35. package/build/index.js +33 -28
  36. package/build/index.js.map +1 -1
  37. package/build/nodeLsl.types.d.ts +3 -3
  38. package/build/testDoubles/{FakeLiblsl.d.ts → Liblsl/FakeLiblsl.d.ts} +1 -1
  39. package/build/testDoubles/Liblsl/FakeLiblsl.js.map +1 -0
  40. package/build/testDoubles/LslInlet/SpyLslInlet.d.ts +7 -0
  41. package/build/testDoubles/{SpyLslInlet.js → LslInlet/SpyLslInlet.js} +2 -2
  42. package/build/testDoubles/LslInlet/SpyLslInlet.js.map +1 -0
  43. package/build/testDoubles/{FakeLslOutlet.d.ts → LslOutlet/FakeLslOutlet.d.ts} +3 -5
  44. package/build/testDoubles/{FakeLslOutlet.js → LslOutlet/FakeLslOutlet.js} +0 -4
  45. package/build/testDoubles/LslOutlet/FakeLslOutlet.js.map +1 -0
  46. package/build/testDoubles/{FakeTimeMarkerOutlet.d.ts → MarkerOutlet/FakeMarkerOutlet.d.ts} +4 -4
  47. package/build/testDoubles/{FakeTimeMarkerOutlet.js → MarkerOutlet/FakeMarkerOutlet.js} +4 -4
  48. package/build/testDoubles/MarkerOutlet/FakeMarkerOutlet.js.map +1 -0
  49. package/build/testDoubles/{MockTimeMarkerOutlet.d.ts → MarkerOutlet/MockMarkerOutlet.d.ts} +3 -2
  50. package/build/testDoubles/{MockTimeMarkerOutlet.js → MarkerOutlet/MockMarkerOutlet.js} +3 -3
  51. package/build/testDoubles/MarkerOutlet/MockMarkerOutlet.js.map +1 -0
  52. package/build/testDoubles/MarkerOutlet/SpyMarkerOutlet.d.ts +9 -0
  53. package/build/testDoubles/MarkerOutlet/SpyMarkerOutlet.js +24 -0
  54. package/build/testDoubles/MarkerOutlet/SpyMarkerOutlet.js.map +1 -0
  55. package/build/testDoubles/{FakeStreamInfo.d.ts → StreamInfo/FakeStreamInfo.d.ts} +2 -2
  56. package/build/testDoubles/StreamInfo/FakeStreamInfo.js.map +1 -0
  57. package/build/testDoubles/StreamInfo/SpyStreamInfo.d.ts +9 -0
  58. package/build/testDoubles/{SpyLslStreamInfo.js → StreamInfo/SpyStreamInfo.js} +4 -4
  59. package/build/testDoubles/StreamInfo/SpyStreamInfo.js.map +1 -0
  60. package/build/testDoubles/generateRandomOutletOptions.d.ts +1 -1
  61. package/package.json +1 -1
  62. package/src/__tests__/AbstractLslTest.ts +58 -0
  63. package/src/__tests__/EventMarkerOutlet.test.ts +165 -0
  64. package/src/__tests__/{Liblsl.test.ts → LiblslAdapter.test.ts} +18 -22
  65. package/src/__tests__/LslStreamInfo.test.ts +12 -12
  66. package/src/__tests__/{LslInlet.test.ts → LslStreamInlet.test.ts} +13 -13
  67. package/src/__tests__/{LslOutlet.test.ts → LslStreamOutlet.test.ts} +28 -22
  68. package/src/components/{TimeMarkerOutlet.ts → EventMarkerOutlet.ts} +17 -17
  69. package/src/components/{Liblsl.ts → LiblslAdapter.ts} +3 -3
  70. package/src/components/LslStreamInfo.ts +2 -2
  71. package/src/components/{LslInlet.ts → LslStreamInlet.ts} +5 -5
  72. package/src/components/{LslOutlet.ts → LslStreamOutlet.ts} +3 -3
  73. package/src/index.ts +28 -19
  74. package/src/nodeLsl.types.ts +3 -3
  75. package/src/testDoubles/{FakeLiblsl.ts → Liblsl/FakeLiblsl.ts} +1 -1
  76. package/src/testDoubles/{SpyLslInlet.ts → LslInlet/SpyLslInlet.ts} +5 -3
  77. package/src/testDoubles/{FakeLslOutlet.ts → LslOutlet/FakeLslOutlet.ts} +3 -9
  78. package/src/testDoubles/{FakeTimeMarkerOutlet.ts → MarkerOutlet/FakeMarkerOutlet.ts} +4 -4
  79. package/src/testDoubles/{MockTimeMarkerOutlet.ts → MarkerOutlet/MockMarkerOutlet.ts} +3 -2
  80. package/src/testDoubles/MarkerOutlet/SpyMarkerOutlet.ts +24 -0
  81. package/src/testDoubles/{FakeStreamInfo.ts → StreamInfo/FakeStreamInfo.ts} +2 -2
  82. package/src/testDoubles/{SpyLslStreamInfo.ts → StreamInfo/SpyStreamInfo.ts} +4 -2
  83. package/src/testDoubles/generateRandomOutletOptions.ts +1 -1
  84. package/build/__tests__/AbstractNodeLslTest.js.map +0 -1
  85. package/build/__tests__/Liblsl.test.js.map +0 -1
  86. package/build/__tests__/LslInlet.test.js.map +0 -1
  87. package/build/__tests__/LslOutlet.test.js.map +0 -1
  88. package/build/__tests__/SpyLslStreamInfo.d.ts +0 -5
  89. package/build/__tests__/SpyLslStreamInfo.js +0 -17
  90. package/build/__tests__/SpyLslStreamInfo.js.map +0 -1
  91. package/build/__tests__/TimeMarkerOutlet.test.js.map +0 -1
  92. package/build/components/Liblsl.js.map +0 -1
  93. package/build/components/LslInlet.js.map +0 -1
  94. package/build/components/LslOutlet.js.map +0 -1
  95. package/build/components/TimeMarkerOutlet.d.ts +0 -19
  96. package/build/components/TimeMarkerOutlet.js.map +0 -1
  97. package/build/demo.d.ts +0 -1
  98. package/build/demo.js +0 -42
  99. package/build/demo.js.map +0 -1
  100. package/build/testDoubles/FakeLiblsl.js.map +0 -1
  101. package/build/testDoubles/FakeLslOutlet.js.map +0 -1
  102. package/build/testDoubles/FakeLslStreamInfo.d.ts +0 -5
  103. package/build/testDoubles/FakeLslStreamInfo.js +0 -10
  104. package/build/testDoubles/FakeLslStreamInfo.js.map +0 -1
  105. package/build/testDoubles/FakeStreamInfo.js.map +0 -1
  106. package/build/testDoubles/FakeTimeMarkerOutlet.js.map +0 -1
  107. package/build/testDoubles/MockTimeMarkerOutlet.js.map +0 -1
  108. package/build/testDoubles/SpyLslInlet.d.ts +0 -7
  109. package/build/testDoubles/SpyLslInlet.js.map +0 -1
  110. package/build/testDoubles/SpyLslStreamInfo.d.ts +0 -9
  111. package/build/testDoubles/SpyLslStreamInfo.js.map +0 -1
  112. package/build/testDoubles/SpyTimeMarkerOutlet.d.ts +0 -9
  113. package/build/testDoubles/SpyTimeMarkerOutlet.js +0 -19
  114. package/build/testDoubles/SpyTimeMarkerOutlet.js.map +0 -1
  115. package/src/__tests__/AbstractNodeLslTest.ts +0 -50
  116. package/src/__tests__/TimeMarkerOutlet.test.ts +0 -151
  117. package/src/demo.ts +0 -43
  118. package/src/testDoubles/SpyTimeMarkerOutlet.ts +0 -19
  119. /package/build/testDoubles/{FakeLiblsl.js → Liblsl/FakeLiblsl.js} +0 -0
  120. /package/build/testDoubles/{FakeStreamInfo.js → StreamInfo/FakeStreamInfo.js} +0 -0
package/README.md CHANGED
@@ -5,8 +5,8 @@ Lab Streaming Layer (LSL) for synchronized streaming of multi-modal, time-series
5
5
  - [Overview](#overview)
6
6
  - [Installation](#installation)
7
7
  - [Usage](#usage)
8
- - [LslOutlet](#lsloutlet)
9
- - [TimeMarkerOutlet](#timemarkeroutlet)
8
+ - [LslStreamOutlet](#lslstreamoutlet)
9
+ - [EventMarkerOutlet](#eventmarkeroutlet)
10
10
  - [Test Doubles](#test-doubles)
11
11
 
12
12
  ## Overview
@@ -37,14 +37,14 @@ LIBLSL_PATH=/opt/homebrew/Cellar/lsl/1.16.2/lib/liblsl.1.16.2.dylib
37
37
 
38
38
  ## Usage
39
39
 
40
- ### LslOutlet
40
+ ### LslStreamOutlet
41
41
 
42
42
  LSL is often used to stream EEG data over a network. For example, to instantiate an LSL outlet for the [Muse S 2nd generation](https://choosemuse.com/products/muse-s-gen-2) headband:
43
43
 
44
44
  ```typescript
45
- import { LslOutletImpl } from '@neurodevs/node-lsl'
45
+ import { LslStreamOutlet } from '@neurodevs/node-lsl'
46
46
 
47
- const outlet = LslOutletImpl.Outlet({
47
+ const instance = LslStreamOutlet.Create({
48
48
  name: 'Muse S (2nd gen)',
49
49
  type: 'EEG',
50
50
  channelNames: ['TP9', 'AF7', 'AF8', 'TP10', 'AUX'],
@@ -58,29 +58,18 @@ const outlet = LslOutletImpl.Outlet({
58
58
  })
59
59
 
60
60
  // Must be in async function
61
- await outlet.pushSample(...)
61
+ await instance.pushSample(...)
62
62
  ```
63
63
 
64
- ### TimeMarkerOutlet
64
+ ### EventMarkerOutlet
65
65
 
66
- LSL is also often used to push time markers that mark different phases of an experiment or session:
66
+ LSL is also often used to push event markers that mark different phases of an experiment or session. The `pushMarkers` method pushes an event marker, waits for a specified duration, then pushes the next marker. I recommend that each event marker has a duration of at least 100 ms so that LSL receives the markers in the right order.
67
67
 
68
68
  ```typescript
69
- import { TimeMarkerOutletImpl } from '@neurodevs/node-lsl'
69
+ import { EventMarkerOutlet } from '@neurodevs/node-lsl'
70
70
 
71
- const outlet = TimeMarkerOutletImpl.Outlet()
71
+ const instance = EventMarkerOutlet.Create()
72
72
 
73
- // Must be in async function
74
- await outlet.pushSample('phase-1-begin')
75
-
76
- // Wait for phase to end
77
-
78
- await outlet.pushSample('phase-1-end')
79
- ```
80
-
81
- There is also a `pushMarkers` method that pushes a time marker, waits for a specified duration, then pushes the next marker. I recommend that each time marker has a duration of at least 100 ms so that LSL receives the markers in the right order.
82
-
83
- ```typescript
84
73
  const markers = [
85
74
  { name: 'phase-1-begin', durationMs: 30 * 1000 },
86
75
  { name: 'phase-1-end', durationMs: 0.1 * 1000 },
@@ -89,38 +78,28 @@ const markers = [
89
78
  ]
90
79
 
91
80
  // Must be in async function, hangs until complete
92
- await outlet.pushMarkers(markers)
81
+ await instance.pushMarkers(markers)
93
82
  ```
94
83
 
95
- If you then want to stop the time marker outlet early, you simply do:
84
+ If you then want to stop the `EventMarkerOutlet` early, you simply do:
96
85
 
97
86
  ```typescript
98
- outlet.stop()
99
- ```
100
-
101
- You can optionally pass any LslOutlet options to the time marker outlet during instantiation. For example, if you want to override the type:
102
-
103
- ```typescript
104
- import { TimeMarkerOutletImpl } from '@neurodevs/node-lsl'
105
-
106
- const outlet = TimeMarkerOutletImpl.Outlet({
107
- type: 'custom-type'
108
- })
87
+ instance.stop()
109
88
  ```
110
89
 
111
90
  ## Test Doubles
112
91
 
113
92
  This package was developed using test-driven development (TDD). If you also follow TDD, you'll likely want test doubles to fake or mock certain behaviors for these classes.
114
93
 
115
- For example, the `MockTimeMarkerOutlet` class lets you test whether your application appropriately calls its methods without actually doing anything. Set this mock in your test code like this:
94
+ For example, the `MockMarkerOutlet` class lets you test whether your application appropriately calls its methods without actually doing anything. Set this mock in your test code like this:
116
95
 
117
96
  ```typescript
118
- import { TimeMarkerOutletImpl, MockTimeMarkerOutlet } from '@neurodevs/node-lsl'
97
+ import { EventMarkerOutlet, MockMarkerOutlet } from '@neurodevs/node-lsl'
119
98
 
120
99
  // In your tests / beforeEach
121
- TimeMarkerOutletImpl.Class = MockTimeMarkerOutlet
100
+ EventMarkerOutlet.Class = MockMarkerOutlet
122
101
 
123
- const mock = TimeMarkerOutletImpl.Outlet()
102
+ const mock = EventMarkerOutlet.Create()
124
103
 
125
104
  // Do something in your application that should start the outlet
126
105
 
@@ -1,18 +1,19 @@
1
1
  import AbstractSpruceTest from '@sprucelabs/test-utils';
2
- import FakeLiblsl from '../testDoubles/FakeLiblsl';
3
- export default class AbstractNodeLslTest extends AbstractSpruceTest {
2
+ import FakeLiblsl from '../testDoubles/Liblsl/FakeLiblsl';
3
+ export default class AbstractLslTest extends AbstractSpruceTest {
4
4
  protected static fakeLiblsl: FakeLiblsl;
5
5
  protected static beforeEach(): Promise<void>;
6
6
  protected static setFakeLiblsl(): void;
7
- protected static setSpyLslStreamInfo(): void;
7
+ protected static setSpyStreamInfo(): void;
8
8
  protected static setFakeStreamInfo(): void;
9
9
  protected static setSpyLslInlet(): void;
10
- protected static setSpyTimeMarkerOutlet(): void;
11
- protected static readonly channelNames: string[];
12
- protected static readonly infoName: string;
10
+ protected static setFakeLslOutlet(): void;
11
+ protected static setSpyMarkerOutlet(): void;
12
+ protected static readonly name_: string;
13
13
  protected static readonly type: string;
14
14
  protected static readonly sourceId: string;
15
15
  protected static readonly units: string;
16
+ protected static readonly channelNames: string[];
16
17
  protected static readonly chunkSize: number;
17
18
  protected static readonly maxBuffered: number;
18
19
  }
@@ -37,44 +37,50 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  const test_utils_1 = __importStar(require("@sprucelabs/test-utils"));
40
- const Liblsl_1 = __importDefault(require("../components/Liblsl"));
41
- const LslInlet_1 = __importDefault(require("../components/LslInlet"));
40
+ const EventMarkerOutlet_1 = __importDefault(require("../components/EventMarkerOutlet"));
41
+ const LiblslAdapter_1 = __importDefault(require("../components/LiblslAdapter"));
42
42
  const LslStreamInfo_1 = __importDefault(require("../components/LslStreamInfo"));
43
- const TimeMarkerOutlet_1 = __importDefault(require("../components/TimeMarkerOutlet"));
44
- const FakeLiblsl_1 = __importDefault(require("../testDoubles/FakeLiblsl"));
45
- const FakeStreamInfo_1 = __importDefault(require("../testDoubles/FakeStreamInfo"));
46
- const SpyLslInlet_1 = require("../testDoubles/SpyLslInlet");
47
- const SpyLslStreamInfo_1 = __importDefault(require("../testDoubles/SpyLslStreamInfo"));
48
- const SpyTimeMarkerOutlet_1 = __importDefault(require("../testDoubles/SpyTimeMarkerOutlet"));
49
- class AbstractNodeLslTest extends test_utils_1.default {
43
+ const LslStreamInlet_1 = __importDefault(require("../components/LslStreamInlet"));
44
+ const LslStreamOutlet_1 = __importDefault(require("../components/LslStreamOutlet"));
45
+ const FakeLiblsl_1 = __importDefault(require("../testDoubles/Liblsl/FakeLiblsl"));
46
+ const SpyLslInlet_1 = require("../testDoubles/LslInlet/SpyLslInlet");
47
+ const FakeLslOutlet_1 = __importDefault(require("../testDoubles/LslOutlet/FakeLslOutlet"));
48
+ const SpyMarkerOutlet_1 = __importDefault(require("../testDoubles/MarkerOutlet/SpyMarkerOutlet"));
49
+ const FakeStreamInfo_1 = __importDefault(require("../testDoubles/StreamInfo/FakeStreamInfo"));
50
+ const SpyStreamInfo_1 = __importDefault(require("../testDoubles/StreamInfo/SpyStreamInfo"));
51
+ class AbstractLslTest extends test_utils_1.default {
50
52
  static async beforeEach() {
51
53
  await super.beforeEach();
52
54
  this.setFakeLiblsl();
53
55
  }
54
56
  static setFakeLiblsl() {
55
57
  this.fakeLiblsl = new FakeLiblsl_1.default();
56
- Liblsl_1.default.setInstance(this.fakeLiblsl);
58
+ LiblslAdapter_1.default.setInstance(this.fakeLiblsl);
57
59
  }
58
- static setSpyLslStreamInfo() {
59
- LslStreamInfo_1.default.Class = SpyLslStreamInfo_1.default;
60
+ static setSpyStreamInfo() {
61
+ LslStreamInfo_1.default.Class = SpyStreamInfo_1.default;
60
62
  }
61
63
  static setFakeStreamInfo() {
62
64
  LslStreamInfo_1.default.Class = FakeStreamInfo_1.default;
63
65
  FakeStreamInfo_1.default.resetTestDouble();
64
66
  }
65
67
  static setSpyLslInlet() {
66
- LslInlet_1.default.Class = SpyLslInlet_1.SpyLslInlet;
68
+ LslStreamInlet_1.default.Class = SpyLslInlet_1.SpyLslInlet;
67
69
  }
68
- static setSpyTimeMarkerOutlet() {
69
- TimeMarkerOutlet_1.default.Class = SpyTimeMarkerOutlet_1.default;
70
+ static setFakeLslOutlet() {
71
+ LslStreamOutlet_1.default.Class = FakeLslOutlet_1.default;
72
+ FakeLslOutlet_1.default.resetTestDouble();
73
+ }
74
+ static setSpyMarkerOutlet() {
75
+ EventMarkerOutlet_1.default.Class = SpyMarkerOutlet_1.default;
70
76
  }
71
77
  }
72
- AbstractNodeLslTest.channelNames = [(0, test_utils_1.generateId)(), (0, test_utils_1.generateId)()];
73
- AbstractNodeLslTest.infoName = (0, test_utils_1.generateId)();
74
- AbstractNodeLslTest.type = (0, test_utils_1.generateId)();
75
- AbstractNodeLslTest.sourceId = (0, test_utils_1.generateId)();
76
- AbstractNodeLslTest.units = (0, test_utils_1.generateId)();
77
- AbstractNodeLslTest.chunkSize = Math.floor(Math.random() * 100);
78
- AbstractNodeLslTest.maxBuffered = Math.floor(Math.random() * 100);
79
- exports.default = AbstractNodeLslTest;
80
- //# sourceMappingURL=AbstractNodeLslTest.js.map
78
+ AbstractLslTest.name_ = (0, test_utils_1.generateId)();
79
+ AbstractLslTest.type = (0, test_utils_1.generateId)();
80
+ AbstractLslTest.sourceId = (0, test_utils_1.generateId)();
81
+ AbstractLslTest.units = (0, test_utils_1.generateId)();
82
+ AbstractLslTest.channelNames = [(0, test_utils_1.generateId)(), (0, test_utils_1.generateId)()];
83
+ AbstractLslTest.chunkSize = Math.floor(Math.random() * 100);
84
+ AbstractLslTest.maxBuffered = Math.floor(Math.random() * 100);
85
+ exports.default = AbstractLslTest;
86
+ //# sourceMappingURL=AbstractLslTest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AbstractLslTest.js","sourceRoot":"","sources":["../../src/__tests__/AbstractLslTest.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qEAAuE;AACvE,wFAA+D;AAC/D,gFAAuD;AACvD,gFAAuD;AACvD,kFAAyD;AAEzD,oFAA2D;AAC3D,kFAAyD;AACzD,qEAAiE;AACjE,2FAAkE;AAClE,kGAAyE;AACzE,8FAAqE;AACrE,4FAAmE;AAEnE,MAAqB,eAAgB,SAAQ,oBAAkB;IAGjD,MAAM,CAAC,KAAK,CAAC,UAAU;QAC7B,MAAM,KAAK,CAAC,UAAU,EAAE,CAAA;QAExB,IAAI,CAAC,aAAa,EAAE,CAAA;IACxB,CAAC;IAES,MAAM,CAAC,aAAa;QAC1B,IAAI,CAAC,UAAU,GAAG,IAAI,oBAAU,EAAE,CAAA;QAClC,uBAAa,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAC9C,CAAC;IAES,MAAM,CAAC,gBAAgB;QAC7B,uBAAa,CAAC,KAAK,GAAG,uBAAa,CAAA;IACvC,CAAC;IAES,MAAM,CAAC,iBAAiB;QAC9B,uBAAa,CAAC,KAAK,GAAG,wBAAc,CAAA;QACpC,wBAAc,CAAC,eAAe,EAAE,CAAA;IACpC,CAAC;IAES,MAAM,CAAC,cAAc;QAC3B,wBAAc,CAAC,KAAK,GAAG,yBAAW,CAAA;IACtC,CAAC;IAES,MAAM,CAAC,gBAAgB;QAC7B,yBAAe,CAAC,KAAK,GAAG,uBAAa,CAAA;QACrC,uBAAa,CAAC,eAAe,EAAE,CAAA;IACnC,CAAC;IAES,MAAM,CAAC,kBAAkB;QAC/B,2BAAiB,CAAC,KAAK,GAAG,yBAAe,CAAA;IAC7C,CAAC;;AAEyB,qBAAK,GAAG,IAAA,uBAAU,GAAE,CAAA;AACpB,oBAAI,GAAG,IAAA,uBAAU,GAAE,CAAA;AACnB,wBAAQ,GAAG,IAAA,uBAAU,GAAE,CAAA;AACvB,qBAAK,GAAG,IAAA,uBAAU,GAAE,CAAA;AACpB,4BAAY,GAAG,CAAC,IAAA,uBAAU,GAAE,EAAE,IAAA,uBAAU,GAAE,CAAC,CAAA;AAC3C,yBAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAA;AAC3C,2BAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAA;kBA1CtD,eAAe"}
@@ -1,17 +1,18 @@
1
- import AbstractNodeLslTest from './AbstractNodeLslTest';
2
- export default class TimeMarkerOutletTest extends AbstractNodeLslTest {
3
- private static outlet;
1
+ import AbstractLslTest from './AbstractLslTest';
2
+ export default class EventMarkerOutletTest extends AbstractLslTest {
3
+ private static instance;
4
4
  protected static beforeEach(): Promise<void>;
5
- protected static loadsWithTimeMarkerSpecificOptions(): Promise<void>;
5
+ protected static loadsWithEventMarkerSpecificOptions(): Promise<void>;
6
6
  protected static canOverrideDefaultOptions(): Promise<void>;
7
7
  protected static pushingSingleMarkerIncrementsHitCountAndWaitTime(): Promise<void>;
8
8
  protected static pushingTwoMarkersIncrementsHitCountAndWaitTimeTwice(): Promise<void>;
9
- protected static canStopTimeMarkersMidPush(bailIdx: number): Promise<void>;
9
+ protected static canStopEventMarkersMidPush(bailIdx: number): Promise<void>;
10
10
  protected static canStartAgainAfterStopping(): Promise<void>;
11
11
  protected static doesNotWaitIfStopped(): Promise<void>;
12
12
  protected static clearsTheTimeoutOnStop(): Promise<void>;
13
- private static setupTimeMarkerImpl;
13
+ private static get lslOutlet();
14
+ private static setupOutlet;
14
15
  private static pushTotalMarkers;
15
- private static generateDurationMarkerValues;
16
- private static Outlet;
16
+ private static generateDurationMarker;
17
+ private static EventMarkerOutlet;
17
18
  }
@@ -11,24 +11,26 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  const crypto_1 = require("crypto");
13
13
  const test_utils_1 = require("@sprucelabs/test-utils");
14
- const TimeMarkerOutlet_1 = __importDefault(require("../components/TimeMarkerOutlet"));
14
+ const EventMarkerOutlet_1 = __importDefault(require("../components/EventMarkerOutlet"));
15
15
  const generateRandomOutletOptions_1 = __importDefault(require("../testDoubles/generateRandomOutletOptions"));
16
- const AbstractNodeLslTest_1 = __importDefault(require("./AbstractNodeLslTest"));
17
- class TimeMarkerOutletTest extends AbstractNodeLslTest_1.default {
16
+ const FakeLslOutlet_1 = __importDefault(require("../testDoubles/LslOutlet/FakeLslOutlet"));
17
+ const AbstractLslTest_1 = __importDefault(require("./AbstractLslTest"));
18
+ class EventMarkerOutletTest extends AbstractLslTest_1.default {
18
19
  static async beforeEach() {
19
20
  await super.beforeEach();
20
- this.setSpyTimeMarkerOutlet();
21
21
  this.setFakeLiblsl();
22
- this.outlet = await this.Outlet();
22
+ this.setFakeLslOutlet();
23
+ this.setSpyMarkerOutlet();
24
+ this.instance = await this.EventMarkerOutlet();
23
25
  }
24
- static async loadsWithTimeMarkerSpecificOptions() {
25
- test_utils_1.assert.isEqualDeep(this.outlet.passedOptions, {
26
- name: 'Time markers',
26
+ static async loadsWithEventMarkerSpecificOptions() {
27
+ test_utils_1.assert.isEqualDeep(FakeLslOutlet_1.default.callsToConstructor[0].options, {
28
+ name: 'Event markers',
27
29
  type: 'Markers',
28
30
  channelNames: ['Markers'],
29
31
  sampleRate: 0,
30
32
  channelFormat: 'string',
31
- sourceId: 'time-markers',
33
+ sourceId: 'event-markers',
32
34
  manufacturer: 'N/A',
33
35
  unit: 'N/A',
34
36
  chunkSize: 0,
@@ -37,103 +39,106 @@ class TimeMarkerOutletTest extends AbstractNodeLslTest_1.default {
37
39
  }
38
40
  static async canOverrideDefaultOptions() {
39
41
  const options = (0, generateRandomOutletOptions_1.default)();
40
- const outlet = await this.Outlet(options);
41
- test_utils_1.assert.isEqualDeep(outlet.passedOptions, options);
42
+ await this.EventMarkerOutlet(options);
43
+ test_utils_1.assert.isEqualDeep(FakeLslOutlet_1.default.callsToConstructor[1].options, options);
42
44
  }
43
45
  static async pushingSingleMarkerIncrementsHitCountAndWaitTime() {
44
- const markers = [this.generateDurationMarkerValues()];
45
- await this.outlet.pushMarkers(markers);
46
- test_utils_1.assert.isEqual(this.fakeLiblsl.pushSampleStringTimestampHitCount, 1);
47
- test_utils_1.assert.isEqual(this.outlet.totalWaitTimeMs, markers[0].durationMs);
46
+ const markers = [this.generateDurationMarker()];
47
+ await this.instance.pushMarkers(markers);
48
+ const marker = markers[0];
49
+ test_utils_1.assert.isEqual(FakeLslOutlet_1.default.callsToPushSample[0][0], marker.name, 'Pushed the wrong marker!');
50
+ test_utils_1.assert.isEqual(this.instance.totalWaitTimeMs, marker.durationMs);
48
51
  }
49
52
  static async pushingTwoMarkersIncrementsHitCountAndWaitTimeTwice() {
50
53
  const markers = await this.pushTotalMarkers(2);
51
- test_utils_1.assert.isEqual(this.fakeLiblsl.pushSampleStringTimestampHitCount, 2);
52
- test_utils_1.assert.isEqual(this.outlet.totalWaitTimeMs, markers[0].durationMs + markers[1].durationMs);
54
+ test_utils_1.assert.isEqual(FakeLslOutlet_1.default.callsToPushSample.length, 2);
55
+ test_utils_1.assert.isEqual(this.instance.totalWaitTimeMs, markers[0].durationMs + markers[1].durationMs);
53
56
  }
54
- static async canStopTimeMarkersMidPush(bailIdx) {
57
+ static async canStopEventMarkersMidPush(bailIdx) {
55
58
  let hitCount = 0;
56
- this.outlet.pushSample = () => {
59
+ const outlet = this.instance.getLslOutlet();
60
+ outlet.pushSample = () => {
57
61
  hitCount += 1;
58
62
  if (hitCount === bailIdx) {
59
- this.outlet.stop();
63
+ this.instance.stop();
60
64
  }
61
65
  };
62
66
  await this.pushTotalMarkers(10);
63
67
  test_utils_1.assert.isEqual(hitCount, bailIdx);
64
68
  }
65
69
  static async canStartAgainAfterStopping() {
66
- this.outlet.stop();
70
+ this.instance.stop();
67
71
  let hitCount = 0;
68
- this.outlet.pushSample = () => {
72
+ const outlet = this.instance.getLslOutlet();
73
+ outlet.pushSample = () => {
69
74
  hitCount++;
70
75
  };
71
76
  await this.pushTotalMarkers(10);
72
77
  test_utils_1.assert.isEqual(hitCount, 10);
73
78
  }
74
79
  static async doesNotWaitIfStopped() {
75
- await this.setupTimeMarkerImpl();
80
+ await this.setupOutlet();
76
81
  const startMs = Date.now();
77
82
  const promise = this.pushTotalMarkers(2, 1000);
78
- this.outlet.stop();
83
+ this.instance.stop();
79
84
  await promise;
80
85
  const endMs = Date.now();
81
86
  test_utils_1.assert.isBelow(endMs - startMs, 10);
82
87
  }
83
88
  static async clearsTheTimeoutOnStop() {
84
- await this.setupTimeMarkerImpl();
85
- const promise = this.pushTotalMarkers(2, 100);
86
- this.outlet.stop();
87
- this.outlet.pushSample = () => test_utils_1.assert.fail('Should not have been called');
88
- await promise;
89
- await this.wait(100);
89
+ void this.pushTotalMarkers(2, 100);
90
+ this.instance.stop();
91
+ this.lslOutlet.pushSample = () => test_utils_1.assert.fail('Should not have been called');
92
+ }
93
+ static get lslOutlet() {
94
+ return this.instance.getLslOutlet();
90
95
  }
91
- static async setupTimeMarkerImpl() {
92
- TimeMarkerOutlet_1.default.Class = TimeMarkerOutlet_1.default;
93
- this.outlet = await this.Outlet();
96
+ static async setupOutlet() {
97
+ EventMarkerOutlet_1.default.Class = EventMarkerOutlet_1.default;
98
+ this.instance = await this.EventMarkerOutlet();
94
99
  }
95
100
  static async pushTotalMarkers(total, durationMs) {
96
101
  const markers = new Array(total)
97
102
  .fill(null)
98
- .map(() => this.generateDurationMarkerValues(durationMs));
99
- await this.outlet.pushMarkers(markers);
103
+ .map(() => this.generateDurationMarker(durationMs));
104
+ await this.instance.pushMarkers(markers);
100
105
  return markers;
101
106
  }
102
- static generateDurationMarkerValues(durationMs) {
107
+ static generateDurationMarker(durationMs) {
103
108
  return {
104
109
  name: (0, test_utils_1.generateId)(),
105
110
  durationMs: durationMs ?? (0, crypto_1.randomInt)(100, 1000),
106
111
  };
107
112
  }
108
- static async Outlet(options) {
109
- return (await TimeMarkerOutlet_1.default.Create(options));
113
+ static async EventMarkerOutlet(options) {
114
+ return (await EventMarkerOutlet_1.default.Create(options));
110
115
  }
111
116
  }
112
- exports.default = TimeMarkerOutletTest;
117
+ exports.default = EventMarkerOutletTest;
113
118
  __decorate([
114
119
  (0, test_utils_1.test)()
115
- ], TimeMarkerOutletTest, "loadsWithTimeMarkerSpecificOptions", null);
120
+ ], EventMarkerOutletTest, "loadsWithEventMarkerSpecificOptions", null);
116
121
  __decorate([
117
122
  (0, test_utils_1.test)()
118
- ], TimeMarkerOutletTest, "canOverrideDefaultOptions", null);
123
+ ], EventMarkerOutletTest, "canOverrideDefaultOptions", null);
119
124
  __decorate([
120
125
  (0, test_utils_1.test)()
121
- ], TimeMarkerOutletTest, "pushingSingleMarkerIncrementsHitCountAndWaitTime", null);
126
+ ], EventMarkerOutletTest, "pushingSingleMarkerIncrementsHitCountAndWaitTime", null);
122
127
  __decorate([
123
128
  (0, test_utils_1.test)()
124
- ], TimeMarkerOutletTest, "pushingTwoMarkersIncrementsHitCountAndWaitTimeTwice", null);
129
+ ], EventMarkerOutletTest, "pushingTwoMarkersIncrementsHitCountAndWaitTimeTwice", null);
125
130
  __decorate([
126
131
  (0, test_utils_1.test)('can stop on the first marker', 1),
127
132
  (0, test_utils_1.test)('can stop on the second marker', 2),
128
133
  (0, test_utils_1.test)('can stop on the third marker', 3)
129
- ], TimeMarkerOutletTest, "canStopTimeMarkersMidPush", null);
134
+ ], EventMarkerOutletTest, "canStopEventMarkersMidPush", null);
130
135
  __decorate([
131
136
  (0, test_utils_1.test)()
132
- ], TimeMarkerOutletTest, "canStartAgainAfterStopping", null);
137
+ ], EventMarkerOutletTest, "canStartAgainAfterStopping", null);
133
138
  __decorate([
134
139
  (0, test_utils_1.test)()
135
- ], TimeMarkerOutletTest, "doesNotWaitIfStopped", null);
140
+ ], EventMarkerOutletTest, "doesNotWaitIfStopped", null);
136
141
  __decorate([
137
142
  (0, test_utils_1.test)()
138
- ], TimeMarkerOutletTest, "clearsTheTimeoutOnStop", null);
139
- //# sourceMappingURL=TimeMarkerOutlet.test.js.map
143
+ ], EventMarkerOutletTest, "clearsTheTimeoutOnStop", null);
144
+ //# sourceMappingURL=EventMarkerOutlet.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventMarkerOutlet.test.js","sourceRoot":"","sources":["../../src/__tests__/EventMarkerOutlet.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import AbstractSpruceTest from '@sprucelabs/test-utils';
2
- export default class LiblslTest extends AbstractSpruceTest {
1
+ import AbstractLslTest from './AbstractLslTest';
2
+ export default class LiblslAdapterTest extends AbstractLslTest {
3
3
  private static lsl;
4
4
  private static libraryPath?;
5
5
  private static libraryOptions?;