@mchp-mcc/scf-pic8-opamp-v2 1.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.
@@ -0,0 +1,983 @@
1
+ import { behaviour, direction, pin_row } from "@microchip/pin-standard";
2
+
3
+ import { AppModel } from "../generated_module/src/types/AutoModuleTypes";
4
+ import { getModel, mockState } from "../generated_module/tests/AppModel.test";
5
+ import { mockAssignedModule } from "../generated_module/tests/processor.test";
6
+ import { getDerivedData } from "./DerivedData";
7
+ import { getRowData } from "./PinsLogic";
8
+
9
+ const expectedActionsPosPins = [
10
+ {
11
+ actiontype: "SETACTION",
12
+ state: {
13
+ L: {
14
+ payload: {
15
+ path: "channelSel.pssOpacon3",
16
+ tabId: "main",
17
+ value: "OPA2IN0+",
18
+ },
19
+ type: "[FORM] SUBMIT",
20
+ },
21
+ },
22
+ validFor: "OPA2IN0+",
23
+ },
24
+ {
25
+ actiontype: "SETACTION",
26
+ state: {
27
+ L: {
28
+ payload: {
29
+ path: "channelSel.pssOpacon3",
30
+ tabId: "main",
31
+ value: "OPA2IN1+",
32
+ },
33
+ type: "[FORM] SUBMIT",
34
+ },
35
+ },
36
+ validFor: "OPA2IN1+",
37
+ },
38
+ {
39
+ actiontype: "SETACTION",
40
+ state: {
41
+ L: {
42
+ payload: {
43
+ path: "channelSel.pssOpacon3",
44
+ tabId: "main",
45
+ value: "OPA2IN2+",
46
+ },
47
+ type: "[FORM] SUBMIT",
48
+ },
49
+ },
50
+ validFor: "OPA2IN2+",
51
+ },
52
+ {
53
+ actiontype: "SETACTION",
54
+ state: {
55
+ L: {
56
+ payload: {
57
+ path: "channelSel.pssOpacon3",
58
+ tabId: "main",
59
+ value: "OPA2IN3+",
60
+ },
61
+ type: "[FORM] SUBMIT",
62
+ },
63
+ },
64
+ validFor: "OPA2IN3+",
65
+ },
66
+ {
67
+ actiontype: "ATTRIBACTION",
68
+ state: {
69
+ L: {
70
+ payload: {
71
+ path: "software.cnameAttribforPosPins",
72
+ tabId: "main",
73
+ value: { attribs: ["cname"] },
74
+ },
75
+ type: "[FORM] SUBMIT",
76
+ },
77
+ },
78
+ validFor: ".*",
79
+ },
80
+ {
81
+ actiontype: "ATTRIBACTION",
82
+ state: {
83
+ UL: {
84
+ payload: {
85
+ path: "software.cnameAttribforPosPins",
86
+ tabId: "main",
87
+ value: { attribs: ["cname"] },
88
+ },
89
+ type: "[FORM] SUBMIT",
90
+ },
91
+ },
92
+ validFor: ".*",
93
+ },
94
+ ];
95
+
96
+ describe("Positive Input IN0 Tests", () => {
97
+ const mockModule = mockAssignedModule(mockState());
98
+ const model = getModel(mockModule, getDerivedData) as AppModel;
99
+
100
+ const rowData: pin_row = {
101
+ name: "posPins",
102
+ module: "OPA2",
103
+ function: "OPA2INx+",
104
+ direction: direction.input,
105
+ filter: {
106
+ module: "OPA2",
107
+ aliasReEx: "OPA\\dIN\\d\\+$",
108
+ },
109
+ behaviour: behaviour.SINGLE_PIN_MUX,
110
+ behaviourMeta: {
111
+ lockPinRegEx: "OPA2IN0+",
112
+ },
113
+ };
114
+
115
+ it("Test for OPA2IN0+ pin data", () => {
116
+ expect(getRowData(model, rowData)).toMatchObject(rowData);
117
+ expect(getRowData(model, rowData)?.actions).toEqual(expectedActionsPosPins);
118
+ });
119
+ });
120
+
121
+ describe("Positive Input IN1 Tests", () => {
122
+ let mockModule = mockAssignedModule(mockState());
123
+ mockModule = {
124
+ ...mockModule,
125
+ state: {
126
+ ...mockModule.state,
127
+ main: {
128
+ channelSel: {
129
+ pchOpacon2: "OPA2IN+",
130
+ pssOpacon3: "OPA2IN1+",
131
+ },
132
+ },
133
+ },
134
+ };
135
+ const model = getModel(mockModule, getDerivedData) as AppModel;
136
+
137
+ const rowData: pin_row = {
138
+ name: "posPins",
139
+ module: "OPA2",
140
+ function: "OPA2INx+",
141
+ direction: direction.input,
142
+ filter: {
143
+ module: "OPA2",
144
+ aliasReEx: "OPA\\dIN\\d\\+$",
145
+ },
146
+ behaviour: behaviour.SINGLE_PIN_MUX,
147
+ behaviourMeta: {
148
+ lockPinRegEx: "OPA2IN1+",
149
+ },
150
+ };
151
+
152
+ it("Test for OPA2IN1+ pin data", () => {
153
+ expect(getRowData(model, rowData)).toMatchObject(rowData);
154
+ expect(getRowData(model, rowData)?.actions).toEqual(expectedActionsPosPins);
155
+ });
156
+ });
157
+
158
+ describe("Positive Input IN2 Tests", () => {
159
+ let mockModule = mockAssignedModule(mockState());
160
+ mockModule = {
161
+ ...mockModule,
162
+ state: {
163
+ ...mockModule.state,
164
+ main: {
165
+ channelSel: {
166
+ pchOpacon2: "OPA2IN+",
167
+ pssOpacon3: "OPA2IN2+",
168
+ },
169
+ },
170
+ },
171
+ };
172
+ const model = getModel(mockModule, getDerivedData) as AppModel;
173
+
174
+ const rowData: pin_row = {
175
+ name: "posPins",
176
+ module: "OPA2",
177
+ function: "OPA2INx+",
178
+ direction: direction.input,
179
+ filter: {
180
+ module: "OPA2",
181
+ aliasReEx: "OPA\\dIN\\d\\+$",
182
+ },
183
+ behaviour: behaviour.SINGLE_PIN_MUX,
184
+ behaviourMeta: {
185
+ lockPinRegEx: "OPA2IN2+",
186
+ },
187
+ };
188
+
189
+ it("Test for OPA2IN2+ pin data", () => {
190
+ expect(getRowData(model, rowData)).toMatchObject(rowData);
191
+ expect(getRowData(model, rowData)?.actions).toEqual(expectedActionsPosPins);
192
+ });
193
+ });
194
+
195
+ describe("Positive Input IN3 Tests", () => {
196
+ let mockModule = mockAssignedModule(mockState());
197
+ mockModule = {
198
+ ...mockModule,
199
+ state: {
200
+ ...mockModule.state,
201
+ main: {
202
+ channelSel: {
203
+ pchOpacon2: "OPA2IN+",
204
+ pssOpacon3: "OPA2IN3+",
205
+ },
206
+ },
207
+ },
208
+ };
209
+ const model = getModel(mockModule, getDerivedData) as AppModel;
210
+
211
+ const rowData: pin_row = {
212
+ name: "posPins",
213
+ module: "OPA2",
214
+ function: "OPA2INx+",
215
+ direction: direction.input,
216
+ filter: {
217
+ module: "OPA2",
218
+ aliasReEx: "OPA\\dIN\\d\\+$",
219
+ },
220
+ behaviour: behaviour.SINGLE_PIN_MUX,
221
+ behaviourMeta: {
222
+ lockPinRegEx: "OPA2IN3+",
223
+ },
224
+ };
225
+
226
+ it("Test for OPA2IN3+ pin data", () => {
227
+ expect(getRowData(model, rowData)).toMatchObject(rowData);
228
+ expect(getRowData(model, rowData)?.actions).toEqual(expectedActionsPosPins);
229
+ });
230
+ });
231
+
232
+ describe("Positive Input GSEL Tests", () => {
233
+ let mockModule = mockAssignedModule(mockState());
234
+ mockModule = {
235
+ ...mockModule,
236
+ state: {
237
+ ...mockModule.state,
238
+ main: {
239
+ channelSel: {
240
+ pchOpacon2: "GSEL",
241
+ },
242
+ },
243
+ },
244
+ };
245
+ const model = getModel(mockModule, getDerivedData) as AppModel;
246
+
247
+ const rowData: pin_row = {
248
+ name: "posPins",
249
+ module: "OPA2",
250
+ function: "OPA2INx+",
251
+ direction: direction.input,
252
+ filter: {
253
+ module: "OPA2",
254
+ aliasReEx: "OPA\\dIN\\d\\+$",
255
+ },
256
+ behaviour: behaviour.SINGLE_PIN_MUX,
257
+ behaviourMeta: {
258
+ lockPinRegEx: "OPA2IN1+",
259
+ },
260
+ };
261
+
262
+ it("Test for hiding OPA2INx+ row", () => {
263
+ expect(getRowData(model, rowData)).toBeUndefined();
264
+ expect(getRowData(model, rowData)?.actions).toBeUndefined();
265
+ });
266
+ });
267
+
268
+ const expectedActionsNegPins = [
269
+ {
270
+ actiontype: "SETACTION",
271
+ state: {
272
+ L: {
273
+ payload: {
274
+ path: "channelSel.nssOpacon1",
275
+ tabId: "main",
276
+ value: "OPA2IN0-",
277
+ },
278
+ type: "[FORM] SUBMIT",
279
+ },
280
+ },
281
+ validFor: "OPA2IN0-",
282
+ },
283
+ {
284
+ actiontype: "SETACTION",
285
+ state: {
286
+ L: {
287
+ payload: {
288
+ path: "channelSel.nssOpacon1",
289
+ tabId: "main",
290
+ value: "OPA2IN1-",
291
+ },
292
+ type: "[FORM] SUBMIT",
293
+ },
294
+ },
295
+ validFor: "OPA2IN1-",
296
+ },
297
+ {
298
+ actiontype: "SETACTION",
299
+ state: {
300
+ L: {
301
+ payload: {
302
+ path: "channelSel.nssOpacon1",
303
+ tabId: "main",
304
+ value: "OPA2IN2-",
305
+ },
306
+ type: "[FORM] SUBMIT",
307
+ },
308
+ },
309
+ validFor: "OPA2IN2-",
310
+ },
311
+ {
312
+ actiontype: "SETACTION",
313
+ state: {
314
+ L: {
315
+ payload: {
316
+ path: "channelSel.nssOpacon1",
317
+ tabId: "main",
318
+ value: "OPA2IN3-",
319
+ },
320
+ type: "[FORM] SUBMIT",
321
+ },
322
+ },
323
+ validFor: "OPA2IN3-",
324
+ },
325
+ {
326
+ actiontype: "SETACTION",
327
+ state: {
328
+ UL: {
329
+ payload: { path: "channelSel.nssOpacon1", tabId: "main", value: "Vss" },
330
+ type: "[FORM] SUBMIT",
331
+ },
332
+ },
333
+ validFor: ".*",
334
+ },
335
+ {
336
+ actiontype: "ATTRIBACTION",
337
+ state: {
338
+ L: {
339
+ payload: {
340
+ path: "software.cnameAttribforNegPins",
341
+ tabId: "main",
342
+ value: { attribs: ["cname"] },
343
+ },
344
+ type: "[FORM] SUBMIT",
345
+ },
346
+ },
347
+ validFor: ".*",
348
+ },
349
+ {
350
+ actiontype: "ATTRIBACTION",
351
+ state: {
352
+ UL: {
353
+ payload: {
354
+ path: "software.cnameAttribforNegPins",
355
+ tabId: "main",
356
+ value: { attribs: ["cname"] },
357
+ },
358
+ type: "[FORM] SUBMIT",
359
+ },
360
+ },
361
+ validFor: ".*",
362
+ },
363
+ ];
364
+
365
+ describe("Negative Input IN0 Tests", () => {
366
+ const mockModule = mockAssignedModule(mockState());
367
+ const model = getModel(mockModule, getDerivedData) as AppModel;
368
+
369
+ const rowData: pin_row = {
370
+ name: "negPins",
371
+ module: "OPA2",
372
+ function: "OPA2INx-",
373
+ direction: direction.input,
374
+ filter: {
375
+ module: "OPA2",
376
+ aliasReEx: "OPA\\dIN\\d\\-$",
377
+ },
378
+ behaviour: behaviour.OPTIONAL_PIN_MUX,
379
+ behaviourMeta: {
380
+ lockPinRegEx: "OPA2IN0-",
381
+ },
382
+ };
383
+
384
+ it("Test for OPA2IN0- pin data", () => {
385
+ expect(getRowData(model, rowData)).toMatchObject(rowData);
386
+ expect(getRowData(model, rowData)?.actions).toEqual(expectedActionsNegPins);
387
+ });
388
+ });
389
+
390
+ describe("Negative Input IN1 Tests", () => {
391
+ let mockModule = mockAssignedModule(mockState());
392
+ mockModule = {
393
+ ...mockModule,
394
+ state: {
395
+ ...mockModule.state,
396
+ main: {
397
+ channelSel: {
398
+ nchOpacon2: "OPA2IN-",
399
+ nssOpacon1: "OPA2IN1-",
400
+ },
401
+ },
402
+ },
403
+ };
404
+ const model = getModel(mockModule, getDerivedData) as AppModel;
405
+
406
+ const rowData: pin_row = {
407
+ name: "negPins",
408
+ module: "OPA2",
409
+ function: "OPA2INx-",
410
+ direction: direction.input,
411
+ filter: {
412
+ module: "OPA2",
413
+ aliasReEx: "OPA\\dIN\\d\\-$",
414
+ },
415
+ behaviour: behaviour.OPTIONAL_PIN_MUX,
416
+ behaviourMeta: {
417
+ lockPinRegEx: "OPA2IN1-",
418
+ },
419
+ };
420
+
421
+ it("Test for OPA2IN1- pin data", () => {
422
+ expect(getRowData(model, rowData)).toMatchObject(rowData);
423
+ expect(getRowData(model, rowData)?.actions).toEqual(expectedActionsNegPins);
424
+ });
425
+ });
426
+
427
+ describe("Negative Input IN2 Tests", () => {
428
+ let mockModule = mockAssignedModule(mockState());
429
+ mockModule = {
430
+ ...mockModule,
431
+ state: {
432
+ ...mockModule.state,
433
+ main: {
434
+ channelSel: {
435
+ nchOpacon2: "OPA2IN-",
436
+ nssOpacon1: "OPA2IN2-",
437
+ },
438
+ },
439
+ },
440
+ };
441
+ const model = getModel(mockModule, getDerivedData) as AppModel;
442
+
443
+ const rowData: pin_row = {
444
+ name: "negPins",
445
+ module: "OPA2",
446
+ function: "OPA2INx-",
447
+ direction: direction.input,
448
+ filter: {
449
+ module: "OPA2",
450
+ aliasReEx: "OPA\\dIN\\d\\-$",
451
+ },
452
+ behaviour: behaviour.OPTIONAL_PIN_MUX,
453
+ behaviourMeta: {
454
+ lockPinRegEx: "OPA2IN2-",
455
+ },
456
+ };
457
+
458
+ it("Test for OPA2IN2- pin data", () => {
459
+ expect(getRowData(model, rowData)).toMatchObject(rowData);
460
+ expect(getRowData(model, rowData)?.actions).toEqual(expectedActionsNegPins);
461
+ });
462
+ });
463
+
464
+ describe("Negative Input IN3 Tests", () => {
465
+ let mockModule = mockAssignedModule(mockState());
466
+ mockModule = {
467
+ ...mockModule,
468
+ state: {
469
+ ...mockModule.state,
470
+ main: {
471
+ channelSel: {
472
+ nchOpacon2: "OPA2IN-",
473
+ nssOpacon1: "OPA2IN3-",
474
+ },
475
+ },
476
+ },
477
+ };
478
+ const model = getModel(mockModule, getDerivedData) as AppModel;
479
+
480
+ const rowData: pin_row = {
481
+ name: "negPins",
482
+ module: "OPA2",
483
+ function: "OPA2INx-",
484
+ direction: direction.input,
485
+ filter: {
486
+ module: "OPA2",
487
+ aliasReEx: "OPA\\dIN\\d\\-$",
488
+ },
489
+ behaviour: behaviour.OPTIONAL_PIN_MUX,
490
+ behaviourMeta: {
491
+ lockPinRegEx: "OPA2IN3-",
492
+ },
493
+ };
494
+
495
+ it("Test for OPA2IN3- pin data", () => {
496
+ expect(getRowData(model, rowData)).toMatchObject(rowData);
497
+ expect(getRowData(model, rowData)?.actions).toEqual(expectedActionsNegPins);
498
+ });
499
+ });
500
+
501
+ describe("Negative Input Vss Tests", () => {
502
+ let mockModule = mockAssignedModule(mockState());
503
+ mockModule = {
504
+ ...mockModule,
505
+ state: {
506
+ ...mockModule.state,
507
+ main: {
508
+ channelSel: {
509
+ nchOpacon2: "OPA2IN-",
510
+ nssOpacon1: "Vss",
511
+ },
512
+ },
513
+ },
514
+ };
515
+ const model = getModel(mockModule, getDerivedData) as AppModel;
516
+
517
+ const rowData: pin_row = {
518
+ name: "negPins",
519
+ module: "OPA2",
520
+ function: "OPA2INx-",
521
+ direction: direction.input,
522
+ filter: {
523
+ module: "OPA2",
524
+ aliasReEx: "OPA\\dIN\\d\\-$",
525
+ },
526
+ behaviour: behaviour.OPTIONAL_PIN_MUX,
527
+ behaviourMeta: {
528
+ lockPinRegEx: "^.{0}$",
529
+ },
530
+ };
531
+
532
+ it("Test for Vss pin data", () => {
533
+ expect(getRowData(model, rowData)).toMatchObject(rowData);
534
+ expect(getRowData(model, rowData)?.actions).toEqual(expectedActionsNegPins);
535
+ });
536
+ });
537
+
538
+ describe("OPA2PPS Tests", () => {
539
+ let mockModule = mockAssignedModule(mockState());
540
+ mockModule = {
541
+ ...mockModule,
542
+ state: {
543
+ ...mockModule.state,
544
+ main: {
545
+ overrideSel: {
546
+ orsOpaors: "OPAxORPPS",
547
+ },
548
+ },
549
+ },
550
+ };
551
+
552
+ const model = getModel(mockModule, getDerivedData) as AppModel;
553
+
554
+ const rowData: pin_row = {
555
+ name: "ppsPin",
556
+ module: "OPA2",
557
+ function: "OPA2ORPPS",
558
+ direction: direction.input,
559
+ filter: {
560
+ module: "OPA2",
561
+ aliasReEx: "^OPA\\dOR$",
562
+ },
563
+ behaviour: behaviour.PPS,
564
+ };
565
+
566
+ it("Test for OPA2PPS pin data", () => {
567
+ expect(getRowData(model, rowData)).toMatchObject(rowData);
568
+ });
569
+ });
570
+
571
+ describe("OPA2OUT Tests", () => {
572
+ let mockModule = mockAssignedModule(mockState());
573
+ mockModule = {
574
+ ...mockModule,
575
+ state: {
576
+ ...mockModule.state,
577
+ main: {
578
+ hardware: {
579
+ intoeOpacon3: false,
580
+ },
581
+ },
582
+ },
583
+ };
584
+
585
+ const model = getModel(mockModule, getDerivedData) as AppModel;
586
+
587
+ const rowData: pin_row = {
588
+ name: "outputPin",
589
+ module: "OPA2",
590
+ function: "OPA2OUT",
591
+ direction: direction.input,
592
+ filter: {
593
+ module: "OPA2",
594
+ aliasReEx: "^OPA\\dOUT$",
595
+ },
596
+ behaviour: behaviour.ALWAYS_LOCKED,
597
+ };
598
+
599
+ it("Test for OPA2OUT pin data", () => {
600
+ expect(getRowData(model, rowData)).toMatchObject(rowData);
601
+ });
602
+ });
603
+
604
+ describe("Override test with LFINTOSC", () => {
605
+ let mockModule = mockAssignedModule(mockState());
606
+ mockModule = {
607
+ ...mockModule,
608
+ state: {
609
+ ...mockModule.state,
610
+ main: {
611
+ overrideSel: {
612
+ orsOpaors: "LFINTOSC",
613
+ },
614
+ },
615
+ },
616
+ };
617
+
618
+ const model = getModel(mockModule, getDerivedData) as AppModel;
619
+
620
+ const rowData: pin_row = {
621
+ name: "ppsPin",
622
+ module: "OPA2",
623
+ function: "OPA2ORPPS",
624
+ direction: direction.input,
625
+ filter: {
626
+ module: "OPA2",
627
+ aliasReEx: "^OPA\\dOR$",
628
+ },
629
+ behaviour: behaviour.PPS,
630
+ };
631
+
632
+ it("Test for hiding OPA2ORPPS row", () => {
633
+ expect(getRowData(model, rowData)).toBeUndefined();
634
+ });
635
+ });
636
+
637
+ describe("Negative Input for Inverting PGA Tests", () => {
638
+ let mockModule = mockAssignedModule(mockState());
639
+ mockModule = {
640
+ ...mockModule,
641
+ state: {
642
+ ...mockModule.state,
643
+ main: {
644
+ hardware: {
645
+ customConfig: "Inverting Programmable Gain Amplifier",
646
+ },
647
+ channelSel: {
648
+ nchOpacon2: "GSEL",
649
+ },
650
+ },
651
+ },
652
+ };
653
+ const model = getModel(mockModule, getDerivedData) as AppModel;
654
+
655
+ const rowData: pin_row = {
656
+ name: "negPins",
657
+ module: "OPA2",
658
+ function: "OPA2INx-",
659
+ direction: direction.input,
660
+ filter: {
661
+ module: "OPA2",
662
+ aliasReEx: "OPA\\dIN\\d\\-$",
663
+ },
664
+ behaviour: behaviour.OPTIONAL_PIN_MUX,
665
+ behaviourMeta: {
666
+ lockPinRegEx: "OPA2IN0-",
667
+ },
668
+ };
669
+
670
+ it("Test for GSEL pin data", () => {
671
+ expect(getRowData(model, rowData)).toMatchObject(rowData);
672
+ expect(getRowData(model, rowData)?.actions).toEqual(expectedActionsNegPins);
673
+ });
674
+ });
675
+
676
+ describe("Negative Input GSEL Tests", () => {
677
+ let mockModule = mockAssignedModule(mockState());
678
+ mockModule = {
679
+ ...mockModule,
680
+ state: {
681
+ ...mockModule.state,
682
+ main: {
683
+ channelSel: {
684
+ nchOpacon2: "GSEL",
685
+ },
686
+ },
687
+ },
688
+ };
689
+ const model = getModel(mockModule, getDerivedData) as AppModel;
690
+
691
+ const rowData: pin_row = {
692
+ name: "negPins",
693
+ module: "OPA2",
694
+ function: "OPA2INx-",
695
+ direction: direction.input,
696
+ filter: {
697
+ module: "OPA2",
698
+ aliasReEx: "OPA\\dIN\\d\\-$",
699
+ },
700
+ behaviour: behaviour.OPTIONAL_PIN_MUX,
701
+ behaviourMeta: {
702
+ lockPinRegEx: "^.{0}$",
703
+ },
704
+ };
705
+
706
+ it("Test for hiding OPA2INx- row", () => {
707
+ expect(getRowData(model, rowData)).toBeUndefined();
708
+ expect(getRowData(model, rowData)?.actions).toBeUndefined();
709
+ });
710
+ });
711
+
712
+ describe("Positive Input Tests with pin-standard", () => {
713
+ let mockModule = mockAssignedModule(mockState());
714
+ mockModule = {
715
+ ...mockModule,
716
+ state: {
717
+ ...mockModule.state,
718
+ main: {
719
+ channelSel: {
720
+ pchOpacon2: "OPA2IN+",
721
+ pssOpacon3: "OPA2IN0+",
722
+ },
723
+ },
724
+ },
725
+ imports: {
726
+ ...mockModule.imports,
727
+ pin_standard: {
728
+ interfaceId: {
729
+ name: "pin-standard",
730
+ version: "^0",
731
+ },
732
+ handle: {
733
+ exportId: "mockExportId",
734
+ providerId: "mockProviderId",
735
+ },
736
+ payload: {
737
+ allpins: {
738
+ RA0: {
739
+ OPA2: {
740
+ "OPA2IN3+": {
741
+ alias: "OPA2IN3+",
742
+ },
743
+ "OPA2IN3-": {
744
+ alias: "OPA2IN3-",
745
+ },
746
+ },
747
+ },
748
+ RA2: {
749
+ OPA2: {
750
+ "OPA2IN2+": {
751
+ alias: "OPA2IN2+",
752
+ },
753
+ "OPA2IN2-": {
754
+ alias: "OPA2IN2-",
755
+ },
756
+ },
757
+ },
758
+ RB4: {
759
+ OPA2: {
760
+ "OPA2IN0-": {
761
+ alias: "OPA2IN0-",
762
+ },
763
+ },
764
+ },
765
+ RB5: {
766
+ OPA2: {
767
+ "OPA2IN0+": {
768
+ alias: "OPA2IN0+",
769
+ },
770
+ },
771
+ },
772
+ RC2: {
773
+ OPA2: {
774
+ OPA2OUT: {
775
+ alias: "OPA2OUT",
776
+ },
777
+ },
778
+ },
779
+ RC3: {
780
+ OPA2: {
781
+ "OPA2IN1-": {
782
+ alias: "OPA2IN1-",
783
+ },
784
+ "OPA2IN1+": {
785
+ alias: "OPA2IN1+",
786
+ },
787
+ },
788
+ },
789
+ },
790
+ },
791
+ },
792
+ },
793
+ };
794
+
795
+ const model = getModel(mockModule, getDerivedData) as AppModel;
796
+
797
+ const rowData: pin_row = {
798
+ name: "posPins",
799
+ module: "OPA2",
800
+ function: "OPA2INx+",
801
+ direction: direction.input,
802
+ filter: {
803
+ module: "OPA2",
804
+ aliasReEx: "OPA\\dIN\\d\\+$",
805
+ },
806
+ behaviour: behaviour.SINGLE_PIN_MUX,
807
+ behaviourMeta: {
808
+ lockPinRegEx: "OPA2IN0+",
809
+ },
810
+ attribs: [
811
+ { aliasReEx: "OPA2IN3+", cname: "RA0_IN3" },
812
+ { aliasReEx: "OPA2IN2+", cname: "RA2_IN2" },
813
+ { aliasReEx: "OPA2IN0+", cname: "RB5_IN0" },
814
+ { aliasReEx: "OPA2IN1+", cname: "RC3_IN1" },
815
+ ],
816
+ };
817
+
818
+ it("Test for OPA2IN0+ pin data", () => {
819
+ expect(getRowData(model, rowData)).toMatchObject(rowData);
820
+ expect(getRowData(model, rowData)?.actions).toEqual(expectedActionsPosPins);
821
+ });
822
+ });
823
+
824
+ describe("Negative Input Tests with pin-standard", () => {
825
+ let mockModule = mockAssignedModule(mockState());
826
+ mockModule = {
827
+ ...mockModule,
828
+ state: {
829
+ ...mockModule.state,
830
+ main: {
831
+ channelSel: {
832
+ nchOpacon2: "OPA2IN-",
833
+ nssOpacon1: "OPA2IN0-",
834
+ },
835
+ },
836
+ },
837
+ imports: {
838
+ ...mockModule.imports,
839
+ pin_standard: {
840
+ interfaceId: {
841
+ name: "pin-standard",
842
+ version: "^0",
843
+ },
844
+ handle: {
845
+ exportId: "mockExportId",
846
+ providerId: "mockProviderId",
847
+ },
848
+ payload: {
849
+ allpins: {
850
+ RA0: {
851
+ OPA2: {
852
+ "OPA2IN3+": {
853
+ alias: "OPA2IN3+",
854
+ },
855
+ "OPA2IN3-": {
856
+ alias: "OPA2IN3-",
857
+ },
858
+ },
859
+ },
860
+ RA2: {
861
+ OPA2: {
862
+ "OPA2IN2+": {
863
+ alias: "OPA2IN2+",
864
+ },
865
+ "OPA2IN2-": {
866
+ alias: "OPA2IN2-",
867
+ },
868
+ },
869
+ },
870
+ RB4: {
871
+ OPA2: {
872
+ "OPA2IN0-": {
873
+ alias: "OPA2IN0-",
874
+ },
875
+ },
876
+ },
877
+ RB5: {
878
+ OPA2: {
879
+ "OPA2IN0+": {
880
+ alias: "OPA2IN0+",
881
+ },
882
+ },
883
+ },
884
+ RC2: {
885
+ OPA2: {
886
+ OPA2OUT: {
887
+ alias: "OPA2OUT",
888
+ },
889
+ },
890
+ },
891
+ RC3: {
892
+ OPA2: {
893
+ "OPA2IN1-": {
894
+ alias: "OPA2IN1-",
895
+ },
896
+ "OPA2IN1+": {
897
+ alias: "OPA2IN1+",
898
+ },
899
+ },
900
+ },
901
+ },
902
+ },
903
+ },
904
+ },
905
+ };
906
+
907
+ const model = getModel(mockModule, getDerivedData) as AppModel;
908
+
909
+ const rowData: pin_row = {
910
+ name: "negPins",
911
+ module: "OPA2",
912
+ function: "OPA2INx-",
913
+ direction: direction.input,
914
+ filter: {
915
+ module: "OPA2",
916
+ aliasReEx: "OPA\\dIN\\d\\-$",
917
+ },
918
+ behaviour: behaviour.OPTIONAL_PIN_MUX,
919
+ behaviourMeta: {
920
+ lockPinRegEx: "OPA2IN0-",
921
+ },
922
+ attribs: [
923
+ { aliasReEx: "OPA2IN3-", cname: "RA0_IN3" },
924
+ { aliasReEx: "OPA2IN2-", cname: "RA2_IN2" },
925
+ { aliasReEx: "OPA2IN0-", cname: "RB4_IN0" },
926
+ { aliasReEx: "OPA2IN1-", cname: "RC3_IN1" },
927
+ ],
928
+ };
929
+
930
+ it("Test for OPA2IN0- pin data", () => {
931
+ expect(getRowData(model, rowData)).toMatchObject(rowData);
932
+ expect(getRowData(model, rowData)?.actions).toEqual(expectedActionsNegPins);
933
+ });
934
+ });
935
+
936
+ describe("Undefined pin-standard test", () => {
937
+ let mockModule = mockAssignedModule(mockState());
938
+ mockModule = {
939
+ ...mockModule,
940
+ imports: {
941
+ ...mockModule.imports,
942
+ pin_standard: {
943
+ interfaceId: {
944
+ name: "pin-standard",
945
+ version: "^0",
946
+ },
947
+ payload: undefined,
948
+ },
949
+ scf_pic8_opamp_v2: {
950
+ interfaceId: {
951
+ name: "scf-pic8-opamp-v2",
952
+ version: "^1.0.0",
953
+ },
954
+ handle: {
955
+ exportId: "mockExportId",
956
+ providerId: "mockProviderId",
957
+ },
958
+ payload: undefined,
959
+ },
960
+ },
961
+ };
962
+ const model = getModel(mockModule, getDerivedData) as AppModel;
963
+
964
+ const rowData: pin_row = {
965
+ name: "negPins",
966
+ module: "OPA2",
967
+ function: "OPA2INx-",
968
+ direction: direction.input,
969
+ filter: {
970
+ module: "OPA2",
971
+ aliasReEx: "OPA\\dIN\\d\\-$",
972
+ },
973
+ behaviour: behaviour.OPTIONAL_PIN_MUX,
974
+ behaviourMeta: {
975
+ lockPinRegEx: "OPA2IN0-",
976
+ },
977
+ };
978
+
979
+ it("Test for undefined pins data", () => {
980
+ expect(getRowData(model, rowData)).toBeUndefined();
981
+ expect(getRowData(model, rowData)?.actions).toBeUndefined();
982
+ });
983
+ });