@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/build/index.js CHANGED
@@ -17,40 +17,45 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
17
17
  return (mod && mod.__esModule) ? mod : { "default": mod };
18
18
  };
19
19
  Object.defineProperty(exports, "__esModule", { value: true });
20
- exports.generateRandomOutletOptions = exports.SpyTimeMarkerOutlet = exports.MockTimeMarkerOutlet = exports.FakeTimeMarkerOutlet = exports.FakeLslOutlet = exports.FakeLiblsl = exports.TimeMarkerOutletImpl = exports.LslOutletImpl = exports.FakeStreamInfo = exports.SpyLslStreamInfo = exports.LslStreamInfo = exports.LiblslImpl = void 0;
20
+ exports.generateRandomOutletOptions = exports.SpyMarkerOutlet = exports.MockMarkerOutlet = exports.FakeMarkerOutlet = exports.EventMarkerOutlet = exports.FakeLslOutlet = exports.LslStreamOutlet = exports.FakeStreamInfo = exports.SpyStreamInfo = exports.LslStreamInfo = exports.FakeLiblsl = exports.LiblslAdapter = void 0;
21
21
  __exportStar(require("./nodeLsl.types"), exports);
22
- var Liblsl_1 = require("./components/Liblsl");
23
- Object.defineProperty(exports, "LiblslImpl", { enumerable: true, get: function () { return __importDefault(Liblsl_1).default; } });
24
- __exportStar(require("./components/Liblsl"), exports);
22
+ // Liblsl
23
+ var LiblslAdapter_1 = require("./components/LiblslAdapter");
24
+ Object.defineProperty(exports, "LiblslAdapter", { enumerable: true, get: function () { return __importDefault(LiblslAdapter_1).default; } });
25
+ __exportStar(require("./components/LiblslAdapter"), exports);
26
+ var FakeLiblsl_1 = require("./testDoubles/Liblsl/FakeLiblsl");
27
+ Object.defineProperty(exports, "FakeLiblsl", { enumerable: true, get: function () { return __importDefault(FakeLiblsl_1).default; } });
28
+ __exportStar(require("./testDoubles/Liblsl/FakeLiblsl"), exports);
29
+ // LslStreamInfo
25
30
  var LslStreamInfo_1 = require("./components/LslStreamInfo");
26
31
  Object.defineProperty(exports, "LslStreamInfo", { enumerable: true, get: function () { return __importDefault(LslStreamInfo_1).default; } });
27
32
  __exportStar(require("./components/LslStreamInfo"), exports);
28
- var SpyLslStreamInfo_1 = require("./testDoubles/SpyLslStreamInfo");
29
- Object.defineProperty(exports, "SpyLslStreamInfo", { enumerable: true, get: function () { return __importDefault(SpyLslStreamInfo_1).default; } });
30
- __exportStar(require("./testDoubles/SpyLslStreamInfo"), exports);
31
- var FakeStreamInfo_1 = require("./testDoubles/FakeStreamInfo");
33
+ var SpyStreamInfo_1 = require("./testDoubles/StreamInfo/SpyStreamInfo");
34
+ Object.defineProperty(exports, "SpyStreamInfo", { enumerable: true, get: function () { return __importDefault(SpyStreamInfo_1).default; } });
35
+ __exportStar(require("./testDoubles/StreamInfo/SpyStreamInfo"), exports);
36
+ var FakeStreamInfo_1 = require("./testDoubles/StreamInfo/FakeStreamInfo");
32
37
  Object.defineProperty(exports, "FakeStreamInfo", { enumerable: true, get: function () { return __importDefault(FakeStreamInfo_1).default; } });
33
- var LslOutlet_1 = require("./components/LslOutlet");
34
- Object.defineProperty(exports, "LslOutletImpl", { enumerable: true, get: function () { return __importDefault(LslOutlet_1).default; } });
35
- __exportStar(require("./components/LslOutlet"), exports);
36
- var TimeMarkerOutlet_1 = require("./components/TimeMarkerOutlet");
37
- Object.defineProperty(exports, "TimeMarkerOutletImpl", { enumerable: true, get: function () { return __importDefault(TimeMarkerOutlet_1).default; } });
38
- __exportStar(require("./components/TimeMarkerOutlet"), exports);
39
- var FakeLiblsl_1 = require("./testDoubles/FakeLiblsl");
40
- Object.defineProperty(exports, "FakeLiblsl", { enumerable: true, get: function () { return __importDefault(FakeLiblsl_1).default; } });
41
- __exportStar(require("./testDoubles/FakeLiblsl"), exports);
42
- var FakeLslOutlet_1 = require("./testDoubles/FakeLslOutlet");
38
+ __exportStar(require("./testDoubles/StreamInfo/FakeStreamInfo"), exports);
39
+ // LslStreamOutlet
40
+ var LslStreamOutlet_1 = require("./components/LslStreamOutlet");
41
+ Object.defineProperty(exports, "LslStreamOutlet", { enumerable: true, get: function () { return __importDefault(LslStreamOutlet_1).default; } });
42
+ __exportStar(require("./components/LslStreamOutlet"), exports);
43
+ var FakeLslOutlet_1 = require("./testDoubles/LslOutlet/FakeLslOutlet");
43
44
  Object.defineProperty(exports, "FakeLslOutlet", { enumerable: true, get: function () { return __importDefault(FakeLslOutlet_1).default; } });
44
- __exportStar(require("./testDoubles/FakeLslOutlet"), exports);
45
- var FakeTimeMarkerOutlet_1 = require("./testDoubles/FakeTimeMarkerOutlet");
46
- Object.defineProperty(exports, "FakeTimeMarkerOutlet", { enumerable: true, get: function () { return __importDefault(FakeTimeMarkerOutlet_1).default; } });
47
- __exportStar(require("./testDoubles/FakeTimeMarkerOutlet"), exports);
48
- var MockTimeMarkerOutlet_1 = require("./testDoubles/MockTimeMarkerOutlet");
49
- Object.defineProperty(exports, "MockTimeMarkerOutlet", { enumerable: true, get: function () { return __importDefault(MockTimeMarkerOutlet_1).default; } });
50
- __exportStar(require("./testDoubles/MockTimeMarkerOutlet"), exports);
51
- var SpyTimeMarkerOutlet_1 = require("./testDoubles/SpyTimeMarkerOutlet");
52
- Object.defineProperty(exports, "SpyTimeMarkerOutlet", { enumerable: true, get: function () { return __importDefault(SpyTimeMarkerOutlet_1).default; } });
53
- __exportStar(require("./testDoubles/SpyTimeMarkerOutlet"), exports);
45
+ __exportStar(require("./testDoubles/LslOutlet/FakeLslOutlet"), exports);
46
+ // EventMarkerOutlet
47
+ var EventMarkerOutlet_1 = require("./components/EventMarkerOutlet");
48
+ Object.defineProperty(exports, "EventMarkerOutlet", { enumerable: true, get: function () { return __importDefault(EventMarkerOutlet_1).default; } });
49
+ __exportStar(require("./components/EventMarkerOutlet"), exports);
50
+ var FakeMarkerOutlet_1 = require("./testDoubles/MarkerOutlet/FakeMarkerOutlet");
51
+ Object.defineProperty(exports, "FakeMarkerOutlet", { enumerable: true, get: function () { return __importDefault(FakeMarkerOutlet_1).default; } });
52
+ __exportStar(require("./testDoubles/MarkerOutlet/FakeMarkerOutlet"), exports);
53
+ var MockMarkerOutlet_1 = require("./testDoubles/MarkerOutlet/MockMarkerOutlet");
54
+ Object.defineProperty(exports, "MockMarkerOutlet", { enumerable: true, get: function () { return __importDefault(MockMarkerOutlet_1).default; } });
55
+ __exportStar(require("./testDoubles/MarkerOutlet/MockMarkerOutlet"), exports);
56
+ var SpyMarkerOutlet_1 = require("./testDoubles/MarkerOutlet/SpyMarkerOutlet");
57
+ Object.defineProperty(exports, "SpyMarkerOutlet", { enumerable: true, get: function () { return __importDefault(SpyMarkerOutlet_1).default; } });
58
+ __exportStar(require("./testDoubles/MarkerOutlet/SpyMarkerOutlet"), exports);
54
59
  var generateRandomOutletOptions_1 = require("./testDoubles/generateRandomOutletOptions");
55
60
  Object.defineProperty(exports, "generateRandomOutletOptions", { enumerable: true, get: function () { return __importDefault(generateRandomOutletOptions_1).default; } });
56
61
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,kDAA+B;AAE/B,8CAA2D;AAAlD,qHAAA,OAAO,OAAc;AAC9B,sDAAmC;AAEnC,4DAAqE;AAA5D,+HAAA,OAAO,OAAiB;AACjC,6DAA0C;AAE1C,mEAA4E;AAAnE,qIAAA,OAAO,OAAoB;AACpC,iEAA8C;AAE9C,+DAAwE;AAA/D,iIAAA,OAAO,OAAkB;AAElC,oDAAiE;AAAxD,2HAAA,OAAO,OAAiB;AACjC,yDAAsC;AAEtC,kEAA+E;AAAtE,yIAAA,OAAO,OAAwB;AACxC,gEAA6C;AAE7C,uDAAgE;AAAvD,yHAAA,OAAO,OAAc;AAC9B,2DAAwC;AAExC,6DAAsE;AAA7D,+HAAA,OAAO,OAAiB;AACjC,8DAA2C;AAE3C,2EAAoF;AAA3E,6IAAA,OAAO,OAAwB;AACxC,qEAAkD;AAElD,2EAAoF;AAA3E,6IAAA,OAAO,OAAwB;AACxC,qEAAkD;AAElD,yEAAkF;AAAzE,2IAAA,OAAO,OAAuB;AACvC,oEAAiD;AAEjD,yFAAkG;AAAzF,2JAAA,OAAO,OAA+B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,kDAA+B;AAE/B,SAAS;AAET,4DAAqE;AAA5D,+HAAA,OAAO,OAAiB;AACjC,6DAA0C;AAE1C,8DAAuE;AAA9D,yHAAA,OAAO,OAAc;AAC9B,kEAA+C;AAE/C,gBAAgB;AAEhB,4DAAqE;AAA5D,+HAAA,OAAO,OAAiB;AACjC,6DAA0C;AAE1C,wEAAiF;AAAxE,+HAAA,OAAO,OAAiB;AACjC,yEAAsD;AAEtD,0EAAmF;AAA1E,iIAAA,OAAO,OAAkB;AAClC,0EAAuD;AAEvD,kBAAkB;AAElB,gEAAyE;AAAhE,mIAAA,OAAO,OAAmB;AACnC,+DAA4C;AAE5C,uEAAgF;AAAvE,+HAAA,OAAO,OAAiB;AACjC,wEAAqD;AAErD,oBAAoB;AAEpB,oEAA6E;AAApE,uIAAA,OAAO,OAAqB;AACrC,iEAA8C;AAE9C,gFAAyF;AAAhF,qIAAA,OAAO,OAAoB;AACpC,8EAA2D;AAE3D,gFAAyF;AAAhF,qIAAA,OAAO,OAAoB;AACpC,8EAA2D;AAE3D,8EAAuF;AAA9E,mIAAA,OAAO,OAAmB;AACnC,6EAA0D;AAE1D,yFAAkG;AAAzF,2JAAA,OAAO,OAA+B"}
@@ -1,8 +1,8 @@
1
1
  import { FuncObj, FieldType } from 'ffi-rs';
2
- import { StreamInlet } from './components/LslInlet';
3
- import { LslOutlet } from './components/LslOutlet';
2
+ import { LslInlet } from './components/LslStreamInlet';
3
+ import { LslOutlet } from './components/LslStreamOutlet';
4
4
  import { CHANNEL_FORMATS } from './consts';
5
- export type StreamFixuture = LslOutlet | StreamInlet;
5
+ export type StreamFixuture = LslOutlet | LslInlet;
6
6
  export type ChannelFormat = (typeof CHANNEL_FORMATS)[number];
7
7
  export interface DurationMarker {
8
8
  name: string;
@@ -1,4 +1,4 @@
1
- import { BoundOutlet, BoundStreamInfo, CreateStreamInfoOptions, AppendChannelsToStreamInfoOptions, CreateOutletOptions, PushSampleFloatTimestampOptions, PushSampleStringTimestampOptions, Liblsl, CreateInletOptions, DestroyInletOptions, BoundInlet } from '../nodeLsl.types';
1
+ import { BoundOutlet, BoundStreamInfo, CreateStreamInfoOptions, AppendChannelsToStreamInfoOptions, CreateOutletOptions, PushSampleFloatTimestampOptions, PushSampleStringTimestampOptions, Liblsl, CreateInletOptions, DestroyInletOptions, BoundInlet } from '../../nodeLsl.types';
2
2
  export default class FakeLiblsl implements Liblsl {
3
3
  outlet: BoundOutlet;
4
4
  streamInfo: BoundStreamInfo;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FakeLiblsl.js","sourceRoot":"","sources":["../../../src/testDoubles/Liblsl/FakeLiblsl.ts"],"names":[],"mappings":";;AAcA,MAAqB,UAAU;IAA/B;QACW,WAAM,GAAgB,EAAiB,CAAA;QACvC,eAAU,GAAoB,EAAqB,CAAA;QAUnD,6BAAwB,GAAG,CAAC,CAAA;QAC5B,yBAAoB,GAAG,CAAC,CAAA;QACxB,0BAAqB,GAAG,CAAC,CAAA;QACzB,wBAAmB,GAAG,CAAC,CAAA;QACvB,yBAAoB,GAAG,CAAC,CAAA;QACxB,uBAAkB,GAAG,CAAC,CAAA;QACtB,sCAAiC,GAAG,CAAC,CAAA;IA+DhD,CAAC;IA7DU,gBAAgB,CAAC,OAAgC;QACpD,IAAI,CAAC,wBAAwB,EAAE,CAAA;QAC/B,IAAI,CAAC,2BAA2B,GAAG,OAAO,CAAA;QAC1C,OAAO,IAAI,CAAC,UAAU,CAAA;IAC1B,CAAC;IAEM,0BAA0B,CAC7B,OAA0C;QAE1C,IAAI,CAAC,qCAAqC,GAAG,OAAO,CAAA;IACxD,CAAC;IAEM,wBAAwB,CAAC,OAAwC;QACpE,IAAI,CAAC,mCAAmC,GAAG,OAAO,CAAA;IACtD,CAAC;IAEM,yBAAyB,CAC5B,OAAyC;QAEzC,IAAI,CAAC,oCAAoC,GAAG,OAAO,CAAA;QACnD,IAAI,CAAC,iCAAiC,EAAE,CAAA;IAC5C,CAAC;IAEM,YAAY,CAAC,OAA4B;QAC5C,IAAI,CAAC,oBAAoB,EAAE,CAAA;QAC3B,IAAI,CAAC,uBAAuB,GAAG,OAAO,CAAA;QACtC,OAAO,IAAI,CAAC,MAAM,CAAA;IACtB,CAAC;IAEM,aAAa;QAChB,IAAI,CAAC,qBAAqB,EAAE,CAAA;IAChC,CAAC;IAEM,WAAW,CAAC,OAA2B;QAC1C,IAAI,CAAC,mBAAmB,EAAE,CAAA;QAC1B,IAAI,CAAC,sBAAsB,GAAG,OAAO,CAAA;QACrC,OAAO,EAAgB,CAAA;IAC3B,CAAC;IAEM,YAAY,CAAC,OAA4B;QAC5C,IAAI,CAAC,oBAAoB,EAAE,CAAA;QAC3B,IAAI,CAAC,uBAAuB,GAAG,OAAO,CAAA;IAC1C,CAAC;IAEM,UAAU;QACb,IAAI,CAAC,kBAAkB,EAAE,CAAA;QACzB,OAAO,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAA;IAC/B,CAAC;IAEM,eAAe;QAClB,IAAI,CAAC,2BAA2B,GAAG,SAAS,CAAA;QAC5C,IAAI,CAAC,qCAAqC,GAAG,SAAS,CAAA;QACtD,IAAI,CAAC,uBAAuB,GAAG,SAAS,CAAA;QACxC,IAAI,CAAC,mCAAmC,GAAG,SAAS,CAAA;QACpD,IAAI,CAAC,oCAAoC,GAAG,SAAS,CAAA;QAErD,IAAI,CAAC,wBAAwB,GAAG,CAAC,CAAA;QACjC,IAAI,CAAC,qBAAqB,GAAG,CAAC,CAAA;QAC9B,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAA;QAC3B,IAAI,CAAC,iCAAiC,GAAG,CAAC,CAAA;IAC9C,CAAC;CACJ;AAjFD,6BAiFC"}
@@ -0,0 +1,7 @@
1
+ import { StreamInfo } from '../../components/LslStreamInfo';
2
+ import LslStreamInlet, { LslInletOptions } from '../../components/LslStreamInlet';
3
+ export declare class SpyLslInlet extends LslStreamInlet {
4
+ constructor(info: StreamInfo, options: LslInletOptions);
5
+ getName(): string;
6
+ getStreamInfo(): StreamInfo;
7
+ }
@@ -4,8 +4,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.SpyLslInlet = void 0;
7
- const LslInlet_1 = __importDefault(require("../components/LslInlet"));
8
- class SpyLslInlet extends LslInlet_1.default {
7
+ const LslStreamInlet_1 = __importDefault(require("../../components/LslStreamInlet"));
8
+ class SpyLslInlet extends LslStreamInlet_1.default {
9
9
  constructor(info, options) {
10
10
  super(info, options);
11
11
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SpyLslInlet.js","sourceRoot":"","sources":["../../../src/testDoubles/LslInlet/SpyLslInlet.ts"],"names":[],"mappings":";;;;;;AACA,qFAEwC;AAExC,MAAa,WAAY,SAAQ,wBAAc;IAC3C,YAAmB,IAAgB,EAAE,OAAwB;QACzD,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IACxB,CAAC;IAEM,OAAO;QACV,OAAO,IAAI,CAAC,IAAI,CAAA;IACpB,CAAC;IAEM,aAAa;QAChB,OAAO,IAAI,CAAC,IAAI,CAAA;IACpB,CAAC;CACJ;AAZD,kCAYC"}
@@ -1,9 +1,7 @@
1
- import { LslOutlet, LslOutletOptions } from '../components/LslOutlet';
2
- import { StreamInfo } from '../components/LslStreamInfo';
3
- import { LslSample } from '../nodeLsl.types';
1
+ import { StreamInfo } from '../../components/LslStreamInfo';
2
+ import { LslOutlet, LslOutletOptions } from '../../components/LslStreamOutlet';
3
+ import { LslSample } from '../../nodeLsl.types';
4
4
  export default class FakeLslOutlet implements LslOutlet {
5
- static constructorInfo?: StreamInfo;
6
- static constructorOptions?: LslOutletOptions;
7
5
  static callsToConstructor: CallToConstructor[];
8
6
  static callsToPushSample: LslSample[];
9
7
  static numCallsToDestroy: number;
@@ -2,8 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  class FakeLslOutlet {
4
4
  constructor(info, options) {
5
- FakeLslOutlet.constructorInfo = info;
6
- FakeLslOutlet.constructorOptions = options;
7
5
  FakeLslOutlet.callsToConstructor.push({ info, options });
8
6
  }
9
7
  destroy() {
@@ -13,8 +11,6 @@ class FakeLslOutlet {
13
11
  FakeLslOutlet.callsToPushSample.push(sample);
14
12
  }
15
13
  static resetTestDouble() {
16
- FakeLslOutlet.constructorInfo = undefined;
17
- FakeLslOutlet.constructorOptions = undefined;
18
14
  FakeLslOutlet.callsToConstructor = [];
19
15
  FakeLslOutlet.callsToPushSample = [];
20
16
  FakeLslOutlet.numCallsToDestroy = 0;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FakeLslOutlet.js","sourceRoot":"","sources":["../../../src/testDoubles/LslOutlet/FakeLslOutlet.ts"],"names":[],"mappings":";;AAIA,MAAqB,aAAa;IAK9B,YAAmB,IAAgB,EAAE,OAAyB;QAC1D,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;IAC5D,CAAC;IAEM,OAAO;QACV,aAAa,CAAC,iBAAiB,EAAE,CAAA;IACrC,CAAC;IAEM,UAAU,CAAC,MAAiB;QAC/B,aAAa,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAChD,CAAC;IAEM,MAAM,CAAC,eAAe;QACzB,aAAa,CAAC,kBAAkB,GAAG,EAAE,CAAA;QACrC,aAAa,CAAC,iBAAiB,GAAG,EAAE,CAAA;QACpC,aAAa,CAAC,iBAAiB,GAAG,CAAC,CAAA;IACvC,CAAC;;AApBa,gCAAkB,GAAwB,EAAE,CAAA;AAC5C,+BAAiB,GAAgB,EAAE,CAAA;AACnC,+BAAiB,GAAG,CAAC,CAAA;kBAHlB,aAAa"}
@@ -1,6 +1,6 @@
1
- import { TimeMarkerOutlet } from '../components/TimeMarkerOutlet';
2
- import { DurationMarker } from '../nodeLsl.types';
3
- export default class FakeTimeMarkerOutlet implements TimeMarkerOutlet {
1
+ import { MarkerOutlet } from '../../components/EventMarkerOutlet';
2
+ import { DurationMarker } from '../../nodeLsl.types';
3
+ export default class FakeMarkerOutlet implements MarkerOutlet {
4
4
  pushMarkersCalls: DurationMarker[][];
5
5
  pushSampleCalls: string[][];
6
6
  numStopCalls: number;
@@ -10,5 +10,5 @@ export default class FakeTimeMarkerOutlet implements TimeMarkerOutlet {
10
10
  pushSample(sample: string[]): void;
11
11
  stop(): void;
12
12
  destroy(): void;
13
- resetTestDouble(): void;
13
+ resetSpy(): void;
14
14
  }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- class FakeTimeMarkerOutlet {
3
+ class FakeMarkerOutlet {
4
4
  constructor() {
5
5
  this.pushMarkersCalls = [];
6
6
  this.pushSampleCalls = [];
@@ -19,12 +19,12 @@ class FakeTimeMarkerOutlet {
19
19
  destroy() {
20
20
  this.numDestroyCalls++;
21
21
  }
22
- resetTestDouble() {
22
+ resetSpy() {
23
23
  this.pushMarkersCalls = [];
24
24
  this.pushSampleCalls = [];
25
25
  this.numStopCalls = 0;
26
26
  this.numDestroyCalls = 0;
27
27
  }
28
28
  }
29
- exports.default = FakeTimeMarkerOutlet;
30
- //# sourceMappingURL=FakeTimeMarkerOutlet.js.map
29
+ exports.default = FakeMarkerOutlet;
30
+ //# sourceMappingURL=FakeMarkerOutlet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FakeMarkerOutlet.js","sourceRoot":"","sources":["../../../src/testDoubles/MarkerOutlet/FakeMarkerOutlet.ts"],"names":[],"mappings":";;AAGA,MAAqB,gBAAgB;IAMjC;QACI,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAA;QAC1B,IAAI,CAAC,eAAe,GAAG,EAAE,CAAA;QACzB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAA;QACrB,IAAI,CAAC,eAAe,GAAG,CAAC,CAAA;IAC5B,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,OAAyB;QAC9C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACvC,CAAC;IAEM,UAAU,CAAC,MAAgB;QAC9B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACrC,CAAC;IAEM,IAAI;QACP,IAAI,CAAC,YAAY,EAAE,CAAA;IACvB,CAAC;IAEM,OAAO;QACV,IAAI,CAAC,eAAe,EAAE,CAAA;IAC1B,CAAC;IAEM,QAAQ;QACX,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAA;QAC1B,IAAI,CAAC,eAAe,GAAG,EAAE,CAAA;QACzB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAA;QACrB,IAAI,CAAC,eAAe,GAAG,CAAC,CAAA;IAC5B,CAAC;CACJ;AAnCD,mCAmCC"}
@@ -1,5 +1,6 @@
1
- import { DurationMarker, LslSample, TimeMarkerOutlet } from '..';
2
- export default class MockTimeMarkerOutlet implements TimeMarkerOutlet {
1
+ import { MarkerOutlet } from '../../components/EventMarkerOutlet';
2
+ import { DurationMarker, LslSample } from '../../nodeLsl.types';
3
+ export default class MockMarkerOutlet implements MarkerOutlet {
3
4
  private didPushMarkers;
4
5
  private pushedMarkers?;
5
6
  private didPushSamples;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const test_utils_1 = require("@sprucelabs/test-utils");
4
- class MockTimeMarkerOutlet {
4
+ class MockMarkerOutlet {
5
5
  constructor() {
6
6
  this.didPushMarkers = false;
7
7
  this.didPushSamples = false;
@@ -38,5 +38,5 @@ class MockTimeMarkerOutlet {
38
38
  test_utils_1.assert.isFalse(this.didPushMarkers, `Expected to NOT have pushed markers but did. Try 'outlet.pushMarkers(...)'`);
39
39
  }
40
40
  }
41
- exports.default = MockTimeMarkerOutlet;
42
- //# sourceMappingURL=MockTimeMarkerOutlet.js.map
41
+ exports.default = MockMarkerOutlet;
42
+ //# sourceMappingURL=MockMarkerOutlet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockMarkerOutlet.js","sourceRoot":"","sources":["../../../src/testDoubles/MarkerOutlet/MockMarkerOutlet.ts"],"names":[],"mappings":";;AAAA,uDAA+C;AAI/C,MAAqB,gBAAgB;IAArC;QACY,mBAAc,GAAG,KAAK,CAAA;QAEtB,mBAAc,GAAG,KAAK,CAAA;IAsDlC,CAAC;IAnDU,IAAI,KAAI,CAAC;IACT,OAAO,KAAI,CAAC;IAEZ,UAAU,CAAC,MAAiB;QAC/B,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAA;YAC1B,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;QAC3B,CAAC;QACD,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IACpC,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,OAAyB;QAC9C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAA;QAC1B,IAAI,CAAC,aAAa,GAAG,OAAO,CAAA;IAChC,CAAC;IAEM,oBAAoB,CAAC,OAAqB;QAC7C,mBAAM,CAAC,MAAM,CACT,IAAI,CAAC,cAAc,EACnB,0EAA0E,CAC7E,CAAA;QAED,IAAI,OAAO,EAAE,CAAC;YACV,mBAAM,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;QACnD,CAAC;IACL,CAAC;IAEM,uBAAuB;QAC1B,mBAAM,CAAC,OAAO,CACV,IAAI,CAAC,cAAc,EACnB,2EAA2E,CAC9E,CAAA;IACL,CAAC;IAEM,oBAAoB,CAAC,OAA0B;QAClD,mBAAM,CAAC,MAAM,CACT,IAAI,CAAC,cAAc,EACnB,2EAA2E,CAC9E,CAAA;QAED,IAAI,OAAO,EAAE,CAAC;YACV,mBAAM,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;QACnD,CAAC;IACL,CAAC;IAEM,uBAAuB;QAC1B,mBAAM,CAAC,OAAO,CACV,IAAI,CAAC,cAAc,EACnB,4EAA4E,CAC/E,CAAA;IACL,CAAC;CACJ;AAzDD,mCAyDC"}
@@ -0,0 +1,9 @@
1
+ import EventMarkerOutlet from '../../components/EventMarkerOutlet';
2
+ import { LslOutlet } from '../../components/LslStreamOutlet';
3
+ export default class SpyMarkerOutlet extends EventMarkerOutlet {
4
+ totalWaitTimeMs: number;
5
+ constructor(lslOutlet: LslOutlet);
6
+ wait(durationMs: number): Promise<void>;
7
+ getLslOutlet(): LslOutlet;
8
+ resetTestDouble(): void;
9
+ }
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const EventMarkerOutlet_1 = __importDefault(require("../../components/EventMarkerOutlet"));
7
+ class SpyMarkerOutlet extends EventMarkerOutlet_1.default {
8
+ constructor(lslOutlet) {
9
+ super(lslOutlet);
10
+ this.totalWaitTimeMs = 0;
11
+ }
12
+ async wait(durationMs) {
13
+ this.totalWaitTimeMs += durationMs;
14
+ return Promise.resolve();
15
+ }
16
+ getLslOutlet() {
17
+ return this.lslOutlet;
18
+ }
19
+ resetTestDouble() {
20
+ this.totalWaitTimeMs = 0;
21
+ }
22
+ }
23
+ exports.default = SpyMarkerOutlet;
24
+ //# sourceMappingURL=SpyMarkerOutlet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SpyMarkerOutlet.js","sourceRoot":"","sources":["../../../src/testDoubles/MarkerOutlet/SpyMarkerOutlet.ts"],"names":[],"mappings":";;;;;AAAA,2FAAkE;AAGlE,MAAqB,eAAgB,SAAQ,2BAAiB;IAG1D,YAAmB,SAAoB;QACnC,KAAK,CAAC,SAAS,CAAC,CAAA;QAChB,IAAI,CAAC,eAAe,GAAG,CAAC,CAAA;IAC5B,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,UAAkB;QAChC,IAAI,CAAC,eAAe,IAAI,UAAU,CAAA;QAClC,OAAO,OAAO,CAAC,OAAO,EAAE,CAAA;IAC5B,CAAC;IAEM,YAAY;QACf,OAAO,IAAI,CAAC,SAAS,CAAA;IACzB,CAAC;IAEM,eAAe;QAClB,IAAI,CAAC,eAAe,GAAG,CAAC,CAAA;IAC5B,CAAC;CACJ;AApBD,kCAoBC"}
@@ -1,5 +1,5 @@
1
- import { StreamInfo, StreamInfoOptions } from '../components/LslStreamInfo';
2
- import { BoundStreamInfo } from '../nodeLsl.types';
1
+ import { StreamInfo, StreamInfoOptions } from '../../components/LslStreamInfo';
2
+ import { BoundStreamInfo } from '../../nodeLsl.types';
3
3
  export default class FakeStreamInfo implements StreamInfo {
4
4
  static callsToConstructor: StreamInfoOptions[];
5
5
  static boundStreamInfo: BoundStreamInfo;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FakeStreamInfo.js","sourceRoot":"","sources":["../../../src/testDoubles/StreamInfo/FakeStreamInfo.ts"],"names":[],"mappings":";;AAGA,MAAqB,cAAc;IAI/B,YAAmB,OAA0B;QACzC,cAAc,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACnD,CAAC;IAED,IAAW,eAAe;QACtB,OAAO,cAAc,CAAC,eAAe,CAAA;IACzC,CAAC;IAEM,MAAM,CAAC,eAAe;QACzB,cAAc,CAAC,kBAAkB,GAAG,EAAE,CAAA;IAC1C,CAAC;;AAba,iCAAkB,GAAwB,EAAE,CAAA;AAC5C,8BAAe,GAAG,EAAqB,CAAA;kBAFpC,cAAc"}
@@ -0,0 +1,9 @@
1
+ import LslStreamInfo, { StreamInfoOptions } from '../../components/LslStreamInfo';
2
+ export default class SpyStreamInfo extends LslStreamInfo {
3
+ constructor(options: StreamInfoOptions);
4
+ getStreamInfo(): import("../..").BoundStreamInfo;
5
+ getName(): string;
6
+ getType(): string;
7
+ getSourceId(): string;
8
+ getUnits(): string;
9
+ }
@@ -3,8 +3,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- const LslStreamInfo_1 = __importDefault(require("../components/LslStreamInfo"));
7
- class SpyLslStreamInfo extends LslStreamInfo_1.default {
6
+ const LslStreamInfo_1 = __importDefault(require("../../components/LslStreamInfo"));
7
+ class SpyStreamInfo extends LslStreamInfo_1.default {
8
8
  constructor(options) {
9
9
  super(options);
10
10
  }
@@ -24,5 +24,5 @@ class SpyLslStreamInfo extends LslStreamInfo_1.default {
24
24
  return this.units;
25
25
  }
26
26
  }
27
- exports.default = SpyLslStreamInfo;
28
- //# sourceMappingURL=SpyLslStreamInfo.js.map
27
+ exports.default = SpyStreamInfo;
28
+ //# sourceMappingURL=SpyStreamInfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SpyStreamInfo.js","sourceRoot":"","sources":["../../../src/testDoubles/StreamInfo/SpyStreamInfo.ts"],"names":[],"mappings":";;;;;AAAA,mFAEuC;AAEvC,MAAqB,aAAc,SAAQ,uBAAa;IACpD,YAAmB,OAA0B;QACzC,KAAK,CAAC,OAAO,CAAC,CAAA;IAClB,CAAC;IAEM,aAAa;QAChB,OAAO,IAAI,CAAC,UAAU,CAAA;IAC1B,CAAC;IAEM,OAAO;QACV,OAAO,IAAI,CAAC,IAAI,CAAA;IACpB,CAAC;IAEM,OAAO;QACV,OAAO,IAAI,CAAC,IAAI,CAAA;IACpB,CAAC;IAEM,WAAW;QACd,OAAO,IAAI,CAAC,QAAQ,CAAA;IACxB,CAAC;IAEM,QAAQ;QACX,OAAO,IAAI,CAAC,KAAK,CAAA;IACrB,CAAC;CACJ;AAxBD,gCAwBC"}
@@ -1,2 +1,2 @@
1
- import { LslOutletOptions } from '../components/LslOutlet';
1
+ import { LslOutletOptions } from '../components/LslStreamOutlet';
2
2
  export default function generateRandomOutletOptions(): LslOutletOptions;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neurodevs/node-lsl",
3
- "version": "10.2.1",
3
+ "version": "11.0.0",
4
4
  "main": "build/index.js",
5
5
  "repository": {
6
6
  "type": "git",
@@ -0,0 +1,58 @@
1
+ import AbstractSpruceTest, { generateId } from '@sprucelabs/test-utils'
2
+ import EventMarkerOutlet from '../components/EventMarkerOutlet'
3
+ import LiblslAdapter from '../components/LiblslAdapter'
4
+ import LslStreamInfo from '../components/LslStreamInfo'
5
+ import LslStreamInlet from '../components/LslStreamInlet'
6
+
7
+ import LslStreamOutlet from '../components/LslStreamOutlet'
8
+ 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
+ import FakeStreamInfo from '../testDoubles/StreamInfo/FakeStreamInfo'
13
+ import SpyStreamInfo from '../testDoubles/StreamInfo/SpyStreamInfo'
14
+
15
+ export default class AbstractLslTest extends AbstractSpruceTest {
16
+ protected static fakeLiblsl: FakeLiblsl
17
+
18
+ protected static async beforeEach() {
19
+ await super.beforeEach()
20
+
21
+ this.setFakeLiblsl()
22
+ }
23
+
24
+ protected static setFakeLiblsl() {
25
+ this.fakeLiblsl = new FakeLiblsl()
26
+ LiblslAdapter.setInstance(this.fakeLiblsl)
27
+ }
28
+
29
+ protected static setSpyStreamInfo() {
30
+ LslStreamInfo.Class = SpyStreamInfo
31
+ }
32
+
33
+ protected static setFakeStreamInfo() {
34
+ LslStreamInfo.Class = FakeStreamInfo
35
+ FakeStreamInfo.resetTestDouble()
36
+ }
37
+
38
+ protected static setSpyLslInlet() {
39
+ LslStreamInlet.Class = SpyLslInlet
40
+ }
41
+
42
+ protected static setFakeLslOutlet() {
43
+ LslStreamOutlet.Class = FakeLslOutlet
44
+ FakeLslOutlet.resetTestDouble()
45
+ }
46
+
47
+ protected static setSpyMarkerOutlet() {
48
+ EventMarkerOutlet.Class = SpyMarkerOutlet
49
+ }
50
+
51
+ protected static readonly name_ = generateId()
52
+ protected static readonly type = generateId()
53
+ protected static readonly sourceId = generateId()
54
+ protected static readonly units = generateId()
55
+ protected static readonly channelNames = [generateId(), generateId()]
56
+ protected static readonly chunkSize = Math.floor(Math.random() * 100)
57
+ protected static readonly maxBuffered = Math.floor(Math.random() * 100)
58
+ }
@@ -0,0 +1,165 @@
1
+ import { randomInt } from 'crypto'
2
+ import { assert, generateId, test } from '@sprucelabs/test-utils'
3
+ import EventMarkerOutlet from '../components/EventMarkerOutlet'
4
+ import { LslOutletOptions } from '../components/LslStreamOutlet'
5
+ import generateRandomOutletOptions from '../testDoubles/generateRandomOutletOptions'
6
+ import FakeLslOutlet from '../testDoubles/LslOutlet/FakeLslOutlet'
7
+ import SpyMarkerOutlet from '../testDoubles/MarkerOutlet/SpyMarkerOutlet'
8
+ import AbstractLslTest from './AbstractLslTest'
9
+
10
+ export default class EventMarkerOutletTest extends AbstractLslTest {
11
+ private static instance: SpyMarkerOutlet
12
+
13
+ protected static async beforeEach() {
14
+ await super.beforeEach()
15
+
16
+ this.setFakeLiblsl()
17
+ this.setFakeLslOutlet()
18
+ this.setSpyMarkerOutlet()
19
+
20
+ this.instance = await this.EventMarkerOutlet()
21
+ }
22
+
23
+ @test()
24
+ protected static async loadsWithEventMarkerSpecificOptions() {
25
+ assert.isEqualDeep(FakeLslOutlet.callsToConstructor[0].options, {
26
+ name: 'Event markers',
27
+ type: 'Markers',
28
+ channelNames: ['Markers'],
29
+ sampleRate: 0,
30
+ channelFormat: 'string',
31
+ sourceId: 'event-markers',
32
+ manufacturer: 'N/A',
33
+ unit: 'N/A',
34
+ chunkSize: 0,
35
+ maxBuffered: 0,
36
+ })
37
+ }
38
+
39
+ @test()
40
+ protected static async canOverrideDefaultOptions() {
41
+ const options = generateRandomOutletOptions()
42
+ await this.EventMarkerOutlet(options)
43
+
44
+ assert.isEqualDeep(FakeLslOutlet.callsToConstructor[1].options, options)
45
+ }
46
+
47
+ @test()
48
+ protected static async pushingSingleMarkerIncrementsHitCountAndWaitTime() {
49
+ const markers = [this.generateDurationMarker()]
50
+ await this.instance.pushMarkers(markers)
51
+
52
+ const marker = markers[0]
53
+
54
+ assert.isEqual(
55
+ FakeLslOutlet.callsToPushSample[0][0],
56
+ marker.name,
57
+ 'Pushed the wrong marker!'
58
+ )
59
+
60
+ assert.isEqual(this.instance.totalWaitTimeMs, marker.durationMs)
61
+ }
62
+
63
+ @test()
64
+ protected static async pushingTwoMarkersIncrementsHitCountAndWaitTimeTwice() {
65
+ const markers = await this.pushTotalMarkers(2)
66
+
67
+ assert.isEqual(FakeLslOutlet.callsToPushSample.length, 2)
68
+
69
+ assert.isEqual(
70
+ this.instance.totalWaitTimeMs,
71
+ markers[0].durationMs + markers[1].durationMs
72
+ )
73
+ }
74
+
75
+ @test('can stop on the first marker', 1)
76
+ @test('can stop on the second marker', 2)
77
+ @test('can stop on the third marker', 3)
78
+ protected static async canStopEventMarkersMidPush(bailIdx: number) {
79
+ let hitCount = 0
80
+
81
+ const outlet = this.instance.getLslOutlet()
82
+
83
+ outlet.pushSample = () => {
84
+ hitCount += 1
85
+ if (hitCount === bailIdx) {
86
+ this.instance.stop()
87
+ }
88
+ }
89
+
90
+ await this.pushTotalMarkers(10)
91
+
92
+ assert.isEqual(hitCount, bailIdx)
93
+ }
94
+
95
+ @test()
96
+ protected static async canStartAgainAfterStopping() {
97
+ this.instance.stop()
98
+
99
+ let hitCount = 0
100
+
101
+ const outlet = this.instance.getLslOutlet()
102
+
103
+ outlet.pushSample = () => {
104
+ hitCount++
105
+ }
106
+
107
+ await this.pushTotalMarkers(10)
108
+
109
+ assert.isEqual(hitCount, 10)
110
+ }
111
+
112
+ @test()
113
+ protected static async doesNotWaitIfStopped() {
114
+ await this.setupOutlet()
115
+
116
+ const startMs = Date.now()
117
+ const promise = this.pushTotalMarkers(2, 1000)
118
+ this.instance.stop()
119
+ await promise
120
+ const endMs = Date.now()
121
+
122
+ assert.isBelow(endMs - startMs, 10)
123
+ }
124
+
125
+ @test()
126
+ protected static async clearsTheTimeoutOnStop() {
127
+ void this.pushTotalMarkers(2, 100)
128
+ this.instance.stop()
129
+
130
+ this.lslOutlet.pushSample = () =>
131
+ assert.fail('Should not have been called')
132
+ }
133
+
134
+ private static get lslOutlet() {
135
+ return this.instance.getLslOutlet()
136
+ }
137
+
138
+ private static async setupOutlet() {
139
+ EventMarkerOutlet.Class = EventMarkerOutlet as any
140
+ this.instance = await this.EventMarkerOutlet()
141
+ }
142
+
143
+ private static async pushTotalMarkers(total: number, durationMs?: number) {
144
+ const markers = new Array(total)
145
+ .fill(null)
146
+ .map(() => this.generateDurationMarker(durationMs))
147
+
148
+ await this.instance.pushMarkers(markers)
149
+
150
+ return markers
151
+ }
152
+
153
+ private static generateDurationMarker(durationMs?: number) {
154
+ return {
155
+ name: generateId(),
156
+ durationMs: durationMs ?? randomInt(100, 1000),
157
+ }
158
+ }
159
+
160
+ private static async EventMarkerOutlet(
161
+ options?: Partial<LslOutletOptions>
162
+ ) {
163
+ return (await EventMarkerOutlet.Create(options)) as SpyMarkerOutlet
164
+ }
165
+ }