@neurodevs/node-lsl 10.1.4 → 10.2.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 (104) hide show
  1. package/build/__tests__/AbstractNodeLslTest.d.ts +18 -0
  2. package/build/__tests__/AbstractNodeLslTest.js +80 -0
  3. package/build/__tests__/AbstractNodeLslTest.js.map +1 -0
  4. package/build/__tests__/{implementation/Liblsl.test.d.ts → Liblsl.test.d.ts} +6 -0
  5. package/build/__tests__/{implementation/Liblsl.test.js → Liblsl.test.js} +60 -14
  6. package/build/__tests__/Liblsl.test.js.map +1 -0
  7. package/build/__tests__/LslInlet.test.d.ts +11 -0
  8. package/build/__tests__/LslInlet.test.js +94 -0
  9. package/build/__tests__/LslInlet.test.js.map +1 -0
  10. package/build/__tests__/{behavioral/LslOutlet.test.d.ts → LslOutlet.test.d.ts} +3 -6
  11. package/build/__tests__/{behavioral/LslOutlet.test.js → LslOutlet.test.js} +24 -68
  12. package/build/__tests__/LslOutlet.test.js.map +1 -0
  13. package/build/__tests__/LslStreamInfo.test.d.ts +21 -0
  14. package/build/__tests__/LslStreamInfo.test.js +166 -0
  15. package/build/__tests__/LslStreamInfo.test.js.map +1 -0
  16. package/build/__tests__/SpyLslStreamInfo.d.ts +5 -0
  17. package/build/__tests__/SpyLslStreamInfo.js +17 -0
  18. package/build/__tests__/SpyLslStreamInfo.js.map +1 -0
  19. package/build/__tests__/{behavioral/TimeMarkerOutlet.test.d.ts → TimeMarkerOutlet.test.d.ts} +2 -3
  20. package/build/__tests__/{behavioral/TimeMarkerOutlet.test.js → TimeMarkerOutlet.test.js} +7 -33
  21. package/build/__tests__/TimeMarkerOutlet.test.js.map +1 -0
  22. package/build/{implementations → components}/Liblsl.d.ts +4 -2
  23. package/build/{implementations → components}/Liblsl.js +23 -4
  24. package/build/components/Liblsl.js.map +1 -0
  25. package/build/components/LslInlet.d.ts +31 -0
  26. package/build/components/LslInlet.js +51 -0
  27. package/build/components/LslInlet.js.map +1 -0
  28. package/build/{implementations → components}/LslOutlet.d.ts +20 -9
  29. package/build/components/LslOutlet.js +118 -0
  30. package/build/components/LslOutlet.js.map +1 -0
  31. package/build/components/LslStreamInfo.d.ts +38 -0
  32. package/build/components/LslStreamInfo.js +65 -0
  33. package/build/components/LslStreamInfo.js.map +1 -0
  34. package/build/{implementations → components}/TimeMarkerOutlet.d.ts +2 -1
  35. package/build/{implementations → components}/TimeMarkerOutlet.js +1 -1
  36. package/build/components/TimeMarkerOutlet.js.map +1 -0
  37. package/build/demo.d.ts +1 -0
  38. package/build/demo.js +42 -0
  39. package/build/demo.js.map +1 -0
  40. package/build/index.d.ts +12 -7
  41. package/build/index.js +16 -8
  42. package/build/index.js.map +1 -1
  43. package/build/nodeLsl.types.d.ts +34 -18
  44. package/build/testDoubles/FakeLiblsl.d.ts +11 -3
  45. package/build/testDoubles/FakeLiblsl.js +29 -5
  46. package/build/testDoubles/FakeLiblsl.js.map +1 -1
  47. package/build/testDoubles/FakeLslOutlet.d.ts +4 -2
  48. package/build/testDoubles/FakeLslOutlet.js +2 -1
  49. package/build/testDoubles/FakeLslOutlet.js.map +1 -1
  50. package/build/testDoubles/FakeLslStreamInfo.d.ts +5 -0
  51. package/build/testDoubles/FakeLslStreamInfo.js +10 -0
  52. package/build/testDoubles/FakeLslStreamInfo.js.map +1 -0
  53. package/build/testDoubles/FakeStreamInfo.d.ts +9 -0
  54. package/build/testDoubles/FakeStreamInfo.js +17 -0
  55. package/build/testDoubles/FakeStreamInfo.js.map +1 -0
  56. package/build/testDoubles/FakeTimeMarkerOutlet.d.ts +1 -1
  57. package/build/testDoubles/SpyLslInlet.d.ts +7 -0
  58. package/build/testDoubles/SpyLslInlet.js +20 -0
  59. package/build/testDoubles/SpyLslInlet.js.map +1 -0
  60. package/build/testDoubles/SpyLslStreamInfo.d.ts +9 -0
  61. package/build/testDoubles/SpyLslStreamInfo.js +28 -0
  62. package/build/testDoubles/SpyLslStreamInfo.js.map +1 -0
  63. package/build/testDoubles/SpyTimeMarkerOutlet.d.ts +4 -3
  64. package/build/testDoubles/SpyTimeMarkerOutlet.js +3 -3
  65. package/build/testDoubles/SpyTimeMarkerOutlet.js.map +1 -1
  66. package/build/testDoubles/consts.js.map +1 -0
  67. package/build/{__tests__/support → testDoubles}/generateRandomOutletOptions.d.ts +1 -1
  68. package/build/testDoubles/generateRandomOutletOptions.js.map +1 -0
  69. package/package.json +1 -1
  70. package/src/__tests__/AbstractNodeLslTest.ts +50 -0
  71. package/src/__tests__/{implementation/Liblsl.test.ts → Liblsl.test.ts} +49 -8
  72. package/src/__tests__/LslInlet.test.ts +99 -0
  73. package/src/__tests__/{behavioral/LslOutlet.test.ts → LslOutlet.test.ts} +29 -64
  74. package/src/__tests__/LslStreamInfo.test.ts +209 -0
  75. package/src/__tests__/{behavioral/TimeMarkerOutlet.test.ts → TimeMarkerOutlet.test.ts} +12 -17
  76. package/src/{implementations → components}/Liblsl.ts +29 -5
  77. package/src/components/LslInlet.ts +85 -0
  78. package/src/{implementations → components}/LslOutlet.ts +91 -64
  79. package/src/components/LslStreamInfo.ts +105 -0
  80. package/src/{implementations → components}/TimeMarkerOutlet.ts +3 -1
  81. package/src/demo.ts +43 -0
  82. package/src/index.ts +15 -7
  83. package/src/nodeLsl.types.ts +36 -23
  84. package/src/testDoubles/FakeLiblsl.ts +40 -7
  85. package/src/testDoubles/FakeLslOutlet.ts +5 -2
  86. package/src/testDoubles/FakeStreamInfo.ts +19 -0
  87. package/src/testDoubles/FakeTimeMarkerOutlet.ts +1 -1
  88. package/src/testDoubles/SpyLslInlet.ts +16 -0
  89. package/src/testDoubles/SpyLslStreamInfo.ts +27 -0
  90. package/src/testDoubles/SpyTimeMarkerOutlet.ts +5 -4
  91. package/src/{__tests__/support → testDoubles}/generateRandomOutletOptions.ts +1 -1
  92. package/build/__tests__/behavioral/LslOutlet.test.js.map +0 -1
  93. package/build/__tests__/behavioral/TimeMarkerOutlet.test.js.map +0 -1
  94. package/build/__tests__/implementation/Liblsl.test.js.map +0 -1
  95. package/build/__tests__/support/consts.js.map +0 -1
  96. package/build/__tests__/support/generateRandomOutletOptions.js.map +0 -1
  97. package/build/implementations/Liblsl.js.map +0 -1
  98. package/build/implementations/LslOutlet.js +0 -94
  99. package/build/implementations/LslOutlet.js.map +0 -1
  100. package/build/implementations/TimeMarkerOutlet.js.map +0 -1
  101. /package/build/{__tests__/support → testDoubles}/consts.d.ts +0 -0
  102. /package/build/{__tests__/support → testDoubles}/consts.js +0 -0
  103. /package/build/{__tests__/support → testDoubles}/generateRandomOutletOptions.js +0 -0
  104. /package/src/{__tests__/support → testDoubles}/consts.ts +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SpyLslStreamInfo.js","sourceRoot":"","sources":["../../src/testDoubles/SpyLslStreamInfo.ts"],"names":[],"mappings":";;;;;AAAA,gFAA8E;AAE9E,MAAqB,gBAAiB,SAAQ,uBAAa;IACvD,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,mCAwBC"}
@@ -1,8 +1,9 @@
1
- import { LslOutletOptions } from '../implementations/LslOutlet';
2
- import TimeMarkerOutletImpl from '../implementations/TimeMarkerOutlet';
1
+ import { LslOutletOptions } from '../components/LslOutlet';
2
+ import { StreamInfo } from '../components/LslStreamInfo';
3
+ import TimeMarkerOutletImpl from '../components/TimeMarkerOutlet';
3
4
  export default class SpyTimeMarkerOutlet extends TimeMarkerOutletImpl {
4
5
  passedOptions: LslOutletOptions;
5
6
  totalWaitTimeMs: number;
6
- constructor(options: LslOutletOptions);
7
+ constructor(info: StreamInfo, options: LslOutletOptions);
7
8
  wait(durationMs: number): Promise<void>;
8
9
  }
@@ -3,10 +3,10 @@ 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 TimeMarkerOutlet_1 = __importDefault(require("../implementations/TimeMarkerOutlet"));
6
+ const TimeMarkerOutlet_1 = __importDefault(require("../components/TimeMarkerOutlet"));
7
7
  class SpyTimeMarkerOutlet extends TimeMarkerOutlet_1.default {
8
- constructor(options) {
9
- super(options);
8
+ constructor(info, options) {
9
+ super(info, options);
10
10
  this.passedOptions = options;
11
11
  this.totalWaitTimeMs = 0;
12
12
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SpyTimeMarkerOutlet.js","sourceRoot":"","sources":["../../src/testDoubles/SpyTimeMarkerOutlet.ts"],"names":[],"mappings":";;;;;AACA,2FAAsE;AAEtE,MAAqB,mBAAoB,SAAQ,0BAAoB;IAIjE,YAAmB,OAAyB;QACxC,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,aAAa,GAAG,OAAO,CAAA;QAC5B,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;CACJ;AAdD,sCAcC"}
1
+ {"version":3,"file":"SpyTimeMarkerOutlet.js","sourceRoot":"","sources":["../../src/testDoubles/SpyTimeMarkerOutlet.ts"],"names":[],"mappings":";;;;;AAEA,sFAAiE;AAEjE,MAAqB,mBAAoB,SAAQ,0BAAoB;IAIjE,YAAmB,IAAgB,EAAE,OAAyB;QAC1D,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QACpB,IAAI,CAAC,aAAa,GAAG,OAAO,CAAA;QAC5B,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;CACJ;AAdD,sCAcC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consts.js","sourceRoot":"","sources":["../../src/testDoubles/consts.ts"],"names":[],"mappings":";;;AAAa,QAAA,8BAA8B,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAU,CAAA;AAE/D,QAAA,gCAAgC,GAAG;IAC5C,WAAW;IACX,UAAU;IACV,OAAO;IACP,OAAO;IACP,MAAM;IACN,OAAO;CACD,CAAA;AAEG,QAAA,oBAAoB,GAAG;IAChC,WAAW;IACX,SAAS;IACT,UAAU;IACV,QAAQ;IACR,OAAO;IACP,OAAO;IACP,MAAM;IACN,OAAO;CACD,CAAA;AAEG,QAAA,wBAAwB,GAAG;IACpC,SAAS,EAAE,CAAC;IACZ,OAAO,EAAE,CAAC;IACV,QAAQ,EAAE,CAAC;IACX,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;CACX,CAAA"}
@@ -1,2 +1,2 @@
1
- import { LslOutletOptions } from '../../implementations/LslOutlet';
1
+ import { LslOutletOptions } from '../components/LslOutlet';
2
2
  export default function generateRandomOutletOptions(): LslOutletOptions;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateRandomOutletOptions.js","sourceRoot":"","sources":["../../src/testDoubles/generateRandomOutletOptions.ts"],"names":[],"mappings":";;AAKA,8CAeC;AApBD,mCAAkC;AAClC,uDAAmD;AAEnD,qCAAyD;AAEzD,SAAwB,2BAA2B;IAC/C,MAAM,gBAAgB,GAAG,IAAA,kBAAS,EAAC,uCAA8B,CAAC,MAAM,CAAC,CAAA;IAEzE,OAAO;QACH,IAAI,EAAE,IAAA,uBAAU,GAAE;QAClB,IAAI,EAAE,IAAA,uBAAU,GAAE;QAClB,YAAY,EAAE,IAAI,KAAK,CAAC,IAAA,kBAAS,EAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAA,uBAAU,GAAE,CAAC;QAC5D,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;QAC9B,aAAa,EAAE,uCAA8B,CAAC,gBAAgB,CAAC;QAC/D,QAAQ,EAAE,IAAA,uBAAU,GAAE;QACtB,YAAY,EAAE,IAAA,uBAAU,GAAE;QAC1B,IAAI,EAAE,IAAA,uBAAU,GAAE;QAClB,SAAS,EAAE,IAAA,kBAAS,EAAC,CAAC,EAAE,EAAE,CAAC;QAC3B,WAAW,EAAE,IAAA,kBAAS,EAAC,CAAC,EAAE,EAAE,CAAC;KACZ,CAAA;AACzB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neurodevs/node-lsl",
3
- "version": "10.1.4",
3
+ "version": "10.2.0",
4
4
  "main": "build/index.js",
5
5
  "repository": {
6
6
  "type": "git",
@@ -0,0 +1,50 @@
1
+ import AbstractSpruceTest, { generateId } from '@sprucelabs/test-utils'
2
+ import LiblslImpl from '../components/Liblsl'
3
+ import LslInlet from '../components/LslInlet'
4
+ import LslStreamInfo from '../components/LslStreamInfo'
5
+ import TimeMarkerOutletImpl from '../components/TimeMarkerOutlet'
6
+ import FakeLiblsl from '../testDoubles/FakeLiblsl'
7
+ import FakeStreamInfo from '../testDoubles/FakeStreamInfo'
8
+ import { SpyLslInlet } from '../testDoubles/SpyLslInlet'
9
+ import SpyLslStreamInfo from '../testDoubles/SpyLslStreamInfo'
10
+ import SpyTimeMarkerOutlet from '../testDoubles/SpyTimeMarkerOutlet'
11
+
12
+ export default class AbstractNodeLslTest extends AbstractSpruceTest {
13
+ protected static fakeLiblsl: FakeLiblsl
14
+
15
+ protected static async beforeEach() {
16
+ await super.beforeEach()
17
+
18
+ this.setFakeLiblsl()
19
+ }
20
+
21
+ protected static setFakeLiblsl() {
22
+ this.fakeLiblsl = new FakeLiblsl()
23
+ LiblslImpl.setInstance(this.fakeLiblsl)
24
+ }
25
+
26
+ protected static setSpyLslStreamInfo() {
27
+ LslStreamInfo.Class = SpyLslStreamInfo
28
+ }
29
+
30
+ protected static setFakeStreamInfo() {
31
+ LslStreamInfo.Class = FakeStreamInfo
32
+ FakeStreamInfo.resetTestDouble()
33
+ }
34
+
35
+ protected static setSpyLslInlet() {
36
+ LslInlet.Class = SpyLslInlet
37
+ }
38
+
39
+ protected static setSpyTimeMarkerOutlet() {
40
+ TimeMarkerOutletImpl.Class = SpyTimeMarkerOutlet
41
+ }
42
+
43
+ protected static readonly channelNames = [generateId(), generateId()]
44
+ protected static readonly infoName = generateId()
45
+ protected static readonly type = generateId()
46
+ protected static readonly sourceId = generateId()
47
+ protected static readonly units = generateId()
48
+ protected static readonly chunkSize = Math.floor(Math.random() * 100)
49
+ protected static readonly maxBuffered = Math.floor(Math.random() * 100)
50
+ }
@@ -6,18 +6,19 @@ import AbstractSpruceTest, {
6
6
  generateId,
7
7
  } from '@sprucelabs/test-utils'
8
8
  import { DataType, OpenParams } from 'ffi-rs'
9
- import LiblslImpl from '../../implementations/Liblsl'
9
+ import LiblslImpl from '../components/Liblsl'
10
10
  import {
11
11
  BoundChild,
12
12
  BoundDescription,
13
+ BoundInlet,
13
14
  BoundOutlet,
14
15
  BoundStreamInfo,
15
16
  FfiRsDefineOptions,
16
17
  Liblsl,
17
18
  LiblslBindings,
18
19
  LslChannel,
19
- } from '../../nodeLsl.types'
20
- import FakeLiblsl from '../../testDoubles/FakeLiblsl'
20
+ } from '../nodeLsl.types'
21
+ import FakeLiblsl from '../testDoubles/FakeLiblsl'
21
22
 
22
23
  export default class LiblslTest extends AbstractSpruceTest {
23
24
  private static lsl: Liblsl
@@ -26,12 +27,15 @@ export default class LiblslTest extends AbstractSpruceTest {
26
27
  private static fakeBindings: LiblslBindings
27
28
  private static fakeStreamInfo: BoundStreamInfo
28
29
  private static fakeOutlet: BoundOutlet
30
+ private static fakeInlet: BoundInlet
29
31
  private static fakeDesc: BoundDescription
30
32
  private static fakeChildNamedChannels: BoundChild
31
33
  private static createStreamInfoParams?: any[]
32
34
  private static appendChildParams: any[] = []
33
35
  private static createOutletParams?: any[]
34
36
  private static destroyOutletParams?: any[]
37
+ private static createInletParams?: any[]
38
+ private static destroyInletParams?: any[]
35
39
  private static localClockParams?: any[]
36
40
  private static pushSampleFloatTimestampParams?: any[]
37
41
  private static pushSampleStringTimestampParams?: any[]
@@ -51,6 +55,8 @@ export default class LiblslTest extends AbstractSpruceTest {
51
55
  delete this.createStreamInfoParams
52
56
  delete this.createOutletParams
53
57
  delete this.destroyOutletParams
58
+ delete this.createInletParams
59
+ delete this.destroyInletParams
54
60
  delete this.pushSampleFloatTimestampParams
55
61
  delete this.getDescriptionParams
56
62
  this.appendChildParams = []
@@ -203,6 +209,16 @@ export default class LiblslTest extends AbstractSpruceTest {
203
209
  retType: DataType.Void,
204
210
  paramsType: [DataType.External],
205
211
  },
212
+ lsl_create_inlet: {
213
+ library: 'lsl',
214
+ retType: DataType.External,
215
+ paramsType: [DataType.External, DataType.I32, DataType.I32],
216
+ },
217
+ lsl_destroy_inlet: {
218
+ library: 'lsl',
219
+ retType: DataType.Void,
220
+ paramsType: [DataType.External],
221
+ },
206
222
  lsl_local_clock: {
207
223
  library: 'lsl',
208
224
  retType: DataType.Double,
@@ -395,6 +411,13 @@ export default class LiblslTest extends AbstractSpruceTest {
395
411
  )
396
412
  }
397
413
 
414
+ @test()
415
+ protected static async canCreateInletWithRequiredParams() {
416
+ const { options, inlet } = this.createRandomInlet()
417
+ assert.isEqualDeep(this.createInletParams, Object.values(options))
418
+ assert.isEqual(inlet, this.fakeInlet)
419
+ }
420
+
398
421
  private static createRandomStreamInfo() {
399
422
  return this.lsl.createStreamInfo(
400
423
  this.generateRandomCreateStreamInfoOptions()
@@ -402,14 +425,25 @@ export default class LiblslTest extends AbstractSpruceTest {
402
425
  }
403
426
 
404
427
  private static createRandomOutlet() {
428
+ const options = this.createRandomOptions()
429
+ const outlet = this.lsl.createOutlet(options)
430
+ return { options, outlet }
431
+ }
432
+
433
+ private static createRandomInlet() {
434
+ const options = this.createRandomOptions()
435
+ const inlet = this.lsl.createInlet(options)
436
+ return { options, inlet }
437
+ }
438
+
439
+ private static createRandomOptions() {
405
440
  const info = this.createRandomStreamInfo()
406
441
  const options = {
407
442
  info,
408
443
  chunkSize: randomInt(10),
409
444
  maxBuffered: randomInt(10),
410
445
  }
411
- const outlet = this.lsl.createOutlet(options)
412
- return { options, outlet }
446
+ return options
413
447
  }
414
448
 
415
449
  private static generateRandomChannelValues() {
@@ -441,15 +475,22 @@ export default class LiblslTest extends AbstractSpruceTest {
441
475
  this.createOutletParams = params
442
476
  return this.fakeOutlet
443
477
  },
444
- lsl_destroy_outlet: (params: any[]) => {
445
- this.destroyOutletParams = params
446
- },
447
478
  lsl_push_sample_ft: (params: any[]) => {
448
479
  this.pushSampleFloatTimestampParams = params
449
480
  },
450
481
  lsl_push_sample_strt: (params: any[]) => {
451
482
  this.pushSampleStringTimestampParams = params
452
483
  },
484
+ lsl_destroy_outlet: (params: any[]) => {
485
+ this.destroyOutletParams = params
486
+ },
487
+ lsl_create_inlet: (params: any[]) => {
488
+ this.createInletParams = params
489
+ return this.fakeInlet
490
+ },
491
+ lsl_destroy_inlet: (params: any[]) => {
492
+ this.destroyInletParams = params
493
+ },
453
494
  lsl_local_clock: (params: []) => {
454
495
  this.localClockParams = params
455
496
  return new Date().getTime()
@@ -0,0 +1,99 @@
1
+ import { test, assert, errorAssert } from '@sprucelabs/test-utils'
2
+ import LslInlet, { LslInletOptions } from '../components/LslInlet'
3
+ import FakeStreamInfo from '../testDoubles/FakeStreamInfo'
4
+ import { SpyLslInlet } from '../testDoubles/SpyLslInlet'
5
+ import AbstractNodeLslTest from './AbstractNodeLslTest'
6
+
7
+ export default class LslInletTest extends AbstractNodeLslTest {
8
+ private static instance: SpyLslInlet
9
+
10
+ protected static async beforeEach() {
11
+ await super.beforeEach()
12
+
13
+ this.setSpyLslInlet()
14
+ this.setFakeStreamInfo()
15
+
16
+ this.instance = this.LslInlet()
17
+ }
18
+
19
+ @test()
20
+ protected static async canCreateLslInlet() {
21
+ assert.isTruthy(this.instance, 'Instance should be created!')
22
+ }
23
+
24
+ @test()
25
+ protected static async throwsWithMissingRequiredOptions() {
26
+ const err = assert.doesThrow(
27
+ // @ts-ignore
28
+ () => LslInlet.Create()
29
+ )
30
+ errorAssert.assertError(err, 'MISSING_PARAMETERS', {
31
+ parameters: [
32
+ 'channelNames',
33
+ 'channelFormat',
34
+ 'sampleRate',
35
+ 'chunkSize',
36
+ 'maxBuffered',
37
+ ],
38
+ })
39
+ }
40
+
41
+ @test()
42
+ protected static async createsStreamInfoWithExpectedOptions() {
43
+ assert.isEqualDeep(
44
+ FakeStreamInfo.callsToConstructor[0],
45
+ {
46
+ channelNames: this.channelNames,
47
+ channelFormat: 'float32',
48
+ sampleRate: 0,
49
+ name: this.infoName,
50
+ type: this.type,
51
+ sourceId: this.sourceId,
52
+ },
53
+ 'Stream info should have expected options!'
54
+ )
55
+ }
56
+
57
+ @test()
58
+ protected static async uniqueNameHasSetPrefix() {
59
+ const instance = this.LslInlet({ name: undefined })
60
+
61
+ assert.doesInclude(
62
+ instance.getName(),
63
+ 'lsl-inlet-',
64
+ 'Name should have set prefix!'
65
+ )
66
+ }
67
+
68
+ @test()
69
+ protected static async callsBindingsToCreateLslInlet() {
70
+ const fakeInfo = this.instance.getStreamInfo()
71
+
72
+ assert.isTruthy(fakeInfo, 'Should have created stream info!')
73
+
74
+ assert.isEqualDeep(
75
+ this.fakeLiblsl.lastCreateInletOptions,
76
+ {
77
+ info: fakeInfo.boundStreamInfo,
78
+ chunkSize: this.chunkSize,
79
+ maxBuffered: this.maxBuffered,
80
+ },
81
+ 'Should have called createInlet!'
82
+ )
83
+ }
84
+
85
+ private static LslInlet(options?: Partial<LslInletOptions>) {
86
+ const defaultOptions = {
87
+ channelNames: this.channelNames,
88
+ channelFormat: 'float32',
89
+ sampleRate: 0,
90
+ name: this.infoName,
91
+ type: this.type,
92
+ sourceId: this.sourceId,
93
+ chunkSize: this.chunkSize,
94
+ maxBuffered: this.maxBuffered,
95
+ ...options,
96
+ } as LslInletOptions
97
+ return LslInlet.Create(defaultOptions) as SpyLslInlet
98
+ }
99
+ }
@@ -1,38 +1,29 @@
1
- import AbstractSpruceTest, {
2
- test,
3
- assert,
4
- errorAssert,
5
- generateId,
6
- } from '@sprucelabs/test-utils'
7
- import LiblslImpl from '../../implementations/Liblsl'
8
- import LslOutletImpl, {
9
- LslOutletOptions,
10
- } from '../../implementations/LslOutlet'
11
- import { LslSample } from '../../nodeLsl.types'
12
- import FakeLiblsl from '../../testDoubles/FakeLiblsl'
1
+ import { test, assert, errorAssert, generateId } from '@sprucelabs/test-utils'
2
+ import LslOutletImpl, { LslOutletOptions } from '../components/LslOutlet'
3
+ import { StreamInfo } from '../components/LslStreamInfo'
4
+ import { LslSample } from '../nodeLsl.types'
13
5
  import {
14
- TEST_CHANNEL_FORMATS_MAP,
15
6
  TEST_SUPPORTED_CHANNEL_FORMATS,
16
7
  TEST_UNSUPPORTED_CHANNEL_FORMATS,
17
8
  TestChannelFormat,
18
- } from '../support/consts'
19
- import generateRandomOutletOptions from '../support/generateRandomOutletOptions'
9
+ } from '../testDoubles/consts'
20
10
 
21
- export default class LslOutletTest extends AbstractSpruceTest {
22
- private static fakeLiblsl: FakeLiblsl
11
+ import FakeStreamInfo from '../testDoubles/FakeStreamInfo'
12
+ import generateRandomOutletOptions from '../testDoubles/generateRandomOutletOptions'
13
+ import AbstractNodeLslTest from './AbstractNodeLslTest'
14
+
15
+ export default class LslOutletTest extends AbstractNodeLslTest {
23
16
  private static randomOutletOptions: LslOutletOptions
24
- private static channelFormatIdx: number
25
17
 
26
18
  protected static async beforeEach() {
27
19
  await super.beforeEach()
20
+
28
21
  delete LslOutletImpl.Class
29
- this.randomOutletOptions = generateRandomOutletOptions()
30
22
 
31
- const channelFormat = this.randomOutletOptions.channelFormat
32
- this.channelFormatIdx = TEST_CHANNEL_FORMATS_MAP[channelFormat]
33
- this.fakeLiblsl = new FakeLiblsl()
23
+ this.randomOutletOptions = generateRandomOutletOptions()
34
24
 
35
- LiblslImpl.setInstance(this.fakeLiblsl)
25
+ this.setFakeLiblsl()
26
+ this.setFakeStreamInfo()
36
27
  }
37
28
 
38
29
  @test()
@@ -45,14 +36,14 @@ export default class LslOutletTest extends AbstractSpruceTest {
45
36
  parameters: [
46
37
  'name',
47
38
  'type',
39
+ 'sourceId',
48
40
  'channelNames',
49
- 'sampleRate',
50
41
  'channelFormat',
51
- 'sourceId',
52
- 'manufacturer',
53
- 'unit',
42
+ 'sampleRate',
54
43
  'chunkSize',
55
44
  'maxBuffered',
45
+ 'manufacturer',
46
+ 'unit',
56
47
  ],
57
48
  })
58
49
  }
@@ -183,19 +174,14 @@ export default class LslOutletTest extends AbstractSpruceTest {
183
174
  protected static async constructionCreatesStreamInfo() {
184
175
  await this.Outlet()
185
176
 
186
- const { ...options } = this.randomOutletOptions as any
187
-
188
- options.channelCount = options.channelNames.length
189
-
190
- delete options.manufacturer
191
- delete options.unit
192
- delete options.chunkSize
193
- delete options.maxBuffered
194
- delete options.channelNames
195
-
196
- assert.isEqualDeep(this.fakeLiblsl.lastCreateStreamInfoOptions, {
197
- ...options,
198
- channelFormat: this.channelFormatIdx,
177
+ assert.isEqualDeep(FakeStreamInfo.callsToConstructor[0], {
178
+ channelNames: this.randomOutletOptions.channelNames,
179
+ channelFormat: this.randomOutletOptions.channelFormat,
180
+ sampleRate: this.randomOutletOptions.sampleRate,
181
+ name: this.randomOutletOptions.name,
182
+ type: this.randomOutletOptions.type,
183
+ sourceId: this.randomOutletOptions.sourceId,
184
+ units: this.randomOutletOptions.unit,
199
185
  })
200
186
  }
201
187
 
@@ -207,27 +193,6 @@ export default class LslOutletTest extends AbstractSpruceTest {
207
193
  assert.isInstanceOf(instance, CheckingOutlet)
208
194
  }
209
195
 
210
- @test('can add one label to channels', [generateId()])
211
- @test('can add two labels to channels', [generateId(), generateId()])
212
- protected static async appendsChannelsBasedOnCount(labels: string[]) {
213
- const type = generateId()
214
- const unit = generateId()
215
-
216
- await this.Outlet({ channelNames: labels, type, unit })
217
-
218
- assert.isEqualDeep(
219
- this.fakeLiblsl.lastAppendChannelsToStreamInfoOptions,
220
- {
221
- info: this.fakeLiblsl.streamInfo,
222
- channels: labels.map((label) => ({
223
- label,
224
- type,
225
- unit,
226
- })),
227
- }
228
- )
229
- }
230
-
231
196
  @test()
232
197
  protected static async canDestroyOutlet() {
233
198
  const outlet = await this.Outlet()
@@ -243,7 +208,7 @@ export default class LslOutletTest extends AbstractSpruceTest {
243
208
  outlet.pushSample([2.0])
244
209
  outlet.pushSample([3.0])
245
210
 
246
- assert.isEqual(this.fakeLiblsl.createStreamInfoHitCount, 1)
211
+ assert.isEqual(this.fakeLiblsl.createOutletHitCount, 1)
247
212
  }
248
213
 
249
214
  @test()
@@ -309,7 +274,7 @@ export default class LslOutletTest extends AbstractSpruceTest {
309
274
  }
310
275
 
311
276
  class CheckingOutlet extends LslOutletImpl {
312
- public constructor(options: LslOutletOptions) {
313
- super(options)
277
+ public constructor(info: StreamInfo, options: LslOutletOptions) {
278
+ super(info, options)
314
279
  }
315
280
  }