sportident.js 1.5.3 → 1.7.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 (94) hide show
  1. package/SiCard/BaseSiCard.d.ts +14 -0
  2. package/SiCard/BaseSiCard.d.ts.map +1 -1
  3. package/SiCard/BaseSiCard.js +75 -1
  4. package/SiCard/BaseSiCard.js.map +1 -1
  5. package/SiCard/BaseSiCard.test.js +141 -0
  6. package/SiCard/BaseSiCard.test.js.map +1 -1
  7. package/SiCard/IRaceResultData.d.ts +13 -0
  8. package/SiCard/IRaceResultData.d.ts.map +1 -1
  9. package/SiCard/ISiCard.d.ts +4 -1
  10. package/SiCard/ISiCard.d.ts.map +1 -1
  11. package/SiCard/ISiCardEvents.d.ts +33 -0
  12. package/SiCard/ISiCardEvents.d.ts.map +1 -0
  13. package/SiCard/ISiCardEvents.js +73 -0
  14. package/SiCard/ISiCardEvents.js.map +1 -0
  15. package/SiCard/index.d.ts +1 -0
  16. package/SiCard/index.d.ts.map +1 -1
  17. package/SiCard/index.js +1 -0
  18. package/SiCard/index.js.map +1 -1
  19. package/SiCard/types/FCard.d.ts +1 -0
  20. package/SiCard/types/FCard.d.ts.map +1 -1
  21. package/SiCard/types/FCard.js +3 -0
  22. package/SiCard/types/FCard.js.map +1 -1
  23. package/SiCard/types/ModernSiCard.d.ts +12 -0
  24. package/SiCard/types/ModernSiCard.d.ts.map +1 -1
  25. package/SiCard/types/ModernSiCard.js +72 -14
  26. package/SiCard/types/ModernSiCard.js.map +1 -1
  27. package/SiCard/types/PCard.d.ts +2 -0
  28. package/SiCard/types/PCard.d.ts.map +1 -1
  29. package/SiCard/types/PCard.js +9 -1
  30. package/SiCard/types/PCard.js.map +1 -1
  31. package/SiCard/types/PCard.test.js +1 -1
  32. package/SiCard/types/PCard.test.js.map +1 -1
  33. package/SiCard/types/SIAC.d.ts +42 -2
  34. package/SiCard/types/SIAC.d.ts.map +1 -1
  35. package/SiCard/types/SIAC.js +159 -4
  36. package/SiCard/types/SIAC.js.map +1 -1
  37. package/SiCard/types/SIAC.test.js +236 -18
  38. package/SiCard/types/SIAC.test.js.map +1 -1
  39. package/SiCard/types/SiCard10.test.js +1 -1
  40. package/SiCard/types/SiCard10.test.js.map +1 -1
  41. package/SiCard/types/SiCard11.d.ts.map +1 -1
  42. package/SiCard/types/SiCard11.js +1 -3
  43. package/SiCard/types/SiCard11.js.map +1 -1
  44. package/SiCard/types/SiCard11.test.js +2 -2
  45. package/SiCard/types/SiCard11.test.js.map +1 -1
  46. package/SiCard/types/SiCard5.d.ts +2 -0
  47. package/SiCard/types/SiCard5.d.ts.map +1 -1
  48. package/SiCard/types/SiCard5.js +7 -0
  49. package/SiCard/types/SiCard5.js.map +1 -1
  50. package/SiCard/types/SiCard6.d.ts +2 -0
  51. package/SiCard/types/SiCard6.d.ts.map +1 -1
  52. package/SiCard/types/SiCard6.js +10 -0
  53. package/SiCard/types/SiCard6.js.map +1 -1
  54. package/SiCard/types/SiCard8.d.ts +2 -0
  55. package/SiCard/types/SiCard8.d.ts.map +1 -1
  56. package/SiCard/types/SiCard8.js +9 -1
  57. package/SiCard/types/SiCard8.js.map +1 -1
  58. package/SiCard/types/SiCard8.test.js +1 -1
  59. package/SiCard/types/SiCard8.test.js.map +1 -1
  60. package/SiCard/types/SiCard9.d.ts +2 -0
  61. package/SiCard/types/SiCard9.d.ts.map +1 -1
  62. package/SiCard/types/SiCard9.js +9 -1
  63. package/SiCard/types/SiCard9.js.map +1 -1
  64. package/SiCard/types/SiCard9.test.js +1 -1
  65. package/SiCard/types/SiCard9.test.js.map +1 -1
  66. package/SiCard/types/TCard.d.ts +1 -0
  67. package/SiCard/types/TCard.d.ts.map +1 -1
  68. package/SiCard/types/TCard.js +3 -0
  69. package/SiCard/types/TCard.js.map +1 -1
  70. package/SiStation/CoupledSiStation.d.ts +4 -0
  71. package/SiStation/CoupledSiStation.d.ts.map +1 -1
  72. package/SiStation/CoupledSiStation.js +108 -15
  73. package/SiStation/CoupledSiStation.js.map +1 -1
  74. package/SiStation/CoupledSiStation.test.js +558 -0
  75. package/SiStation/CoupledSiStation.test.js.map +1 -1
  76. package/SiStation/ISiStationEvents.d.ts +33 -0
  77. package/SiStation/ISiStationEvents.d.ts.map +1 -0
  78. package/SiStation/ISiStationEvents.js +73 -0
  79. package/SiStation/ISiStationEvents.js.map +1 -0
  80. package/SiStation/index.d.ts +1 -0
  81. package/SiStation/index.d.ts.map +1 -1
  82. package/SiStation/index.js +15 -0
  83. package/SiStation/index.js.map +1 -1
  84. package/fakes/FakeSiCard/types/FakeSIAC.d.ts +2 -2
  85. package/fakes/FakeSiCard/types/FakeSIAC.d.ts.map +1 -1
  86. package/fakes/FakeSiCard/types/FakeSIAC.js +4 -4
  87. package/fakes/FakeSiCard/types/FakeSIAC.js.map +1 -1
  88. package/index.d.ts +8 -0
  89. package/index.d.ts.map +1 -1
  90. package/package.json +5 -5
  91. package/testUtils.d.ts +1 -0
  92. package/testUtils.d.ts.map +1 -1
  93. package/testUtils.js +5 -1
  94. package/testUtils.js.map +1 -1
@@ -32,6 +32,15 @@ var __importStar = (this && this.__importStar) || (function () {
32
32
  return result;
33
33
  };
34
34
  })();
35
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
36
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
37
+ return new (P || (P = Promise))(function (resolve, reject) {
38
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
39
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
40
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
41
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
42
+ });
43
+ };
35
44
  Object.defineProperty(exports, "__esModule", { value: true });
36
45
  const globals_1 = require("@jest/globals");
37
46
  const testUtils = __importStar(require("../testUtils"));
@@ -39,6 +48,7 @@ const SiDevice_1 = require("../SiDevice/SiDevice");
39
48
  const ISiTargetMultiplexer_1 = require("./ISiTargetMultiplexer");
40
49
  const CoupledSiStation_1 = require("./CoupledSiStation");
41
50
  const SiTargetMultiplexer_1 = require("./SiTargetMultiplexer");
51
+ const constants_1 = require("../constants");
42
52
  testUtils.useFakeTimers();
43
53
  function mockDriver(driver) {
44
54
  return driver;
@@ -68,5 +78,553 @@ function mockDriver(driver) {
68
78
  (0, globals_1.expect)(myCoupledStation2.ident).toBe('Remote-fake-ident');
69
79
  (0, globals_1.expect)(myCoupledStation2.multiplexerTarget).toBe(ISiTargetMultiplexer_1.SiTargetMultiplexerTarget.Remote);
70
80
  });
81
+ (0, globals_1.describe)('getBackupData', () => {
82
+ const createMockMultiplexer = (sendMessageImpl) => ({
83
+ siDevice: { ident: 'mock-device' },
84
+ stations: {},
85
+ sendMessage: sendMessageImpl
86
+ });
87
+ const createBackupPointerResponse = (pointer) => [
88
+ 0x00, 0x00, 0x1c,
89
+ (pointer >> 24) & 0xff, (pointer >> 16) & 0xff,
90
+ 0x00, 0x00, 0x00,
91
+ (pointer >> 8) & 0xff, pointer & 0xff
92
+ ];
93
+ const createOverflowResponse = (hasOverflow) => [
94
+ 0x00, 0x00, 0x3d, hasOverflow ? 0x01 : 0x00
95
+ ];
96
+ const createBackupRecord = (cardNumber, date) => {
97
+ const si0 = cardNumber & 0xff;
98
+ const si1 = (cardNumber >> 8) & 0xff;
99
+ const si2 = (cardNumber >> 16) & 0xff;
100
+ if (date === null) {
101
+ return [si2, si1, si0, 0x00, 0x00, 0x00, 0x00, 0x00];
102
+ }
103
+ const halfday = date.hours >= 12 ? 1 : 0;
104
+ const hours12 = date.hours % 12;
105
+ const time12Seconds = hours12 * 3600 + date.minutes * 60 + date.seconds;
106
+ const dateData3 = (date.year << 2) | ((date.month >> 2) & 0x03);
107
+ const dateData4 = ((date.month & 0x03) << 6) | (date.day << 1) | halfday;
108
+ const timeHigh = (time12Seconds >> 8) & 0xff;
109
+ const timeLow = time12Seconds & 0xff;
110
+ return [si2, si1, si0, dateData3, dateData4, timeHigh, timeLow, date.subseconds];
111
+ };
112
+ const date = (year, month, day, hours, minutes, seconds, subseconds) => ({ year, month, day, hours, minutes, seconds, subseconds });
113
+ const expectDateMatch = (parsed, expected) => {
114
+ (0, globals_1.expect)(parsed).toBeDefined();
115
+ if (!parsed)
116
+ return;
117
+ (0, globals_1.expect)(parsed.getFullYear()).toBe(2000 + expected.year);
118
+ (0, globals_1.expect)(parsed.getMonth() + 1).toBe(expected.month);
119
+ (0, globals_1.expect)(parsed.getDate()).toBe(expected.day);
120
+ (0, globals_1.expect)(parsed.getHours()).toBe(expected.hours);
121
+ (0, globals_1.expect)(parsed.getMinutes()).toBe(expected.minutes);
122
+ (0, globals_1.expect)(parsed.getSeconds()).toBe(expected.seconds);
123
+ const expectedMs = Math.floor((expected.subseconds * 1000) / 256);
124
+ (0, globals_1.expect)(parsed.getMilliseconds()).toBe(expectedMs);
125
+ };
126
+ const createBackupDataResponse = (address, records) => [
127
+ 0x00, 0x31,
128
+ (address >> 16) & 0xff, (address >> 8) & 0xff, address & 0xff,
129
+ ...records.flat()
130
+ ];
131
+ (0, globals_1.test)('reads multiple records with correct dates and order', () => __awaiter(void 0, void 0, void 0, function* () {
132
+ const dates = [
133
+ date(26, 3, 15, 10, 30, 45, 128),
134
+ date(26, 3, 15, 10, 31, 12, 64),
135
+ date(26, 3, 15, 10, 31, 55, 192),
136
+ date(26, 3, 15, 10, 32, 33, 32),
137
+ date(26, 3, 15, 10, 33, 8, 255),
138
+ ];
139
+ const cardNumbers = [1234567, 2345678, 3456789, 4567890, 5678901];
140
+ const backupPointer = 0x0100 + dates.length * constants_1.proto.REC_LEN;
141
+ const multiplexer = createMockMultiplexer((_target, message) => __awaiter(void 0, void 0, void 0, function* () {
142
+ if (message.command === constants_1.proto.cmd.GET_SYS_VAL && message.parameters[0] === 0x1c) {
143
+ return [createBackupPointerResponse(backupPointer)];
144
+ }
145
+ if (message.command === constants_1.proto.cmd.GET_SYS_VAL && message.parameters[0] === 0x3d) {
146
+ return [createOverflowResponse(false)];
147
+ }
148
+ if (message.command === constants_1.proto.cmd.GET_BACKUP) {
149
+ const records = cardNumbers.map((cn, i) => createBackupRecord(cn, dates[i]));
150
+ return [createBackupDataResponse(0x0100, records)];
151
+ }
152
+ return [[]];
153
+ }));
154
+ const station = new CoupledSiStation_1.CoupledSiStation(multiplexer, ISiTargetMultiplexer_1.SiTargetMultiplexerTarget.Remote);
155
+ const resultPromise = station.getBackupData();
156
+ yield testUtils.advanceTimersByTimeAsync(300);
157
+ const result = yield resultPromise;
158
+ (0, globals_1.expect)(result.length).toBe(5);
159
+ for (let i = 0; i < 5; i++) {
160
+ (0, globals_1.expect)(result[i].cardNumber).toBe(cardNumbers[i]);
161
+ expectDateMatch(result[i].date, dates[i]);
162
+ }
163
+ }));
164
+ (0, globals_1.test)('handles records with invalid date', () => __awaiter(void 0, void 0, void 0, function* () {
165
+ const validD = date(26, 6, 20, 14, 45, 30, 100);
166
+ const backupPointer = 0x0100 + 16;
167
+ const multiplexer = createMockMultiplexer((_target, message) => __awaiter(void 0, void 0, void 0, function* () {
168
+ if (message.command === constants_1.proto.cmd.GET_SYS_VAL && message.parameters[0] === 0x1c) {
169
+ return [createBackupPointerResponse(backupPointer)];
170
+ }
171
+ if (message.command === constants_1.proto.cmd.GET_SYS_VAL && message.parameters[0] === 0x3d) {
172
+ return [createOverflowResponse(false)];
173
+ }
174
+ if (message.command === constants_1.proto.cmd.GET_BACKUP) {
175
+ return [createBackupDataResponse(0x0100, [
176
+ createBackupRecord(1234567, validD),
177
+ createBackupRecord(2345678, null)
178
+ ])];
179
+ }
180
+ return [[]];
181
+ }));
182
+ const station = new CoupledSiStation_1.CoupledSiStation(multiplexer, ISiTargetMultiplexer_1.SiTargetMultiplexerTarget.Remote);
183
+ const resultPromise = station.getBackupData();
184
+ yield testUtils.advanceTimersByTimeAsync(300);
185
+ const result = yield resultPromise;
186
+ (0, globals_1.expect)(result.length).toBe(2);
187
+ (0, globals_1.expect)(result[0].cardNumber).toBe(1234567);
188
+ expectDateMatch(result[0].date, validD);
189
+ (0, globals_1.expect)(result[1].cardNumber).toBe(2345678);
190
+ (0, globals_1.expect)(result[1].date).toBeUndefined();
191
+ }));
192
+ (0, globals_1.test)('emits progress events', () => __awaiter(void 0, void 0, void 0, function* () {
193
+ const d1 = date(26, 1, 10, 9, 0, 0, 0);
194
+ const d2 = date(26, 1, 10, 9, 0, 1, 50);
195
+ const backupPointer = 0x0100 + 16;
196
+ const progressEvents = [];
197
+ const multiplexer = createMockMultiplexer((_target, message) => __awaiter(void 0, void 0, void 0, function* () {
198
+ if (message.command === constants_1.proto.cmd.GET_SYS_VAL && message.parameters[0] === 0x1c) {
199
+ return [createBackupPointerResponse(backupPointer)];
200
+ }
201
+ if (message.command === constants_1.proto.cmd.GET_SYS_VAL && message.parameters[0] === 0x3d) {
202
+ return [createOverflowResponse(false)];
203
+ }
204
+ if (message.command === constants_1.proto.cmd.GET_BACKUP) {
205
+ return [createBackupDataResponse(0x0100, [
206
+ createBackupRecord(1111111, d1),
207
+ createBackupRecord(2222222, d2)
208
+ ])];
209
+ }
210
+ return [[]];
211
+ }));
212
+ const station = new CoupledSiStation_1.CoupledSiStation(multiplexer, ISiTargetMultiplexer_1.SiTargetMultiplexerTarget.Remote);
213
+ station.addEventListener('backupReadProgress', (e) => progressEvents.push(e.percentage));
214
+ const resultPromise = station.getBackupData();
215
+ yield testUtils.advanceTimersByTimeAsync(300);
216
+ yield resultPromise;
217
+ (0, globals_1.expect)(progressEvents.length).toBeGreaterThan(0);
218
+ (0, globals_1.expect)(progressEvents[0]).toBe(0);
219
+ (0, globals_1.expect)(progressEvents[progressEvents.length - 1]).toBe(100);
220
+ }));
221
+ (0, globals_1.test)('emits start and complete events', () => __awaiter(void 0, void 0, void 0, function* () {
222
+ const d = date(26, 5, 1, 8, 15, 0, 200);
223
+ const backupPointer = 0x0100 + 8;
224
+ let startReceived = false;
225
+ let completeRecords = 0;
226
+ const multiplexer = createMockMultiplexer((_target, message) => __awaiter(void 0, void 0, void 0, function* () {
227
+ if (message.command === constants_1.proto.cmd.GET_SYS_VAL && message.parameters[0] === 0x1c) {
228
+ return [createBackupPointerResponse(backupPointer)];
229
+ }
230
+ if (message.command === constants_1.proto.cmd.GET_SYS_VAL && message.parameters[0] === 0x3d) {
231
+ return [createOverflowResponse(false)];
232
+ }
233
+ if (message.command === constants_1.proto.cmd.GET_BACKUP) {
234
+ return [createBackupDataResponse(0x0100, [createBackupRecord(1234567, d)])];
235
+ }
236
+ return [[]];
237
+ }));
238
+ const station = new CoupledSiStation_1.CoupledSiStation(multiplexer, ISiTargetMultiplexer_1.SiTargetMultiplexerTarget.Remote);
239
+ station.addEventListener('backupReadStart', () => { startReceived = true; });
240
+ station.addEventListener('backupReadComplete', (e) => { completeRecords = e.totalRecords; });
241
+ const resultPromise = station.getBackupData();
242
+ yield testUtils.advanceTimersByTimeAsync(300);
243
+ yield resultPromise;
244
+ (0, globals_1.expect)(startReceived).toBe(true);
245
+ (0, globals_1.expect)(completeRecords).toBe(1);
246
+ }));
247
+ (0, globals_1.test)('retries backup pointer read on failure', () => __awaiter(void 0, void 0, void 0, function* () {
248
+ const d = date(26, 2, 28, 16, 0, 0, 10);
249
+ const backupPointer = 0x0100 + 8;
250
+ let pointerAttempts = 0;
251
+ const multiplexer = createMockMultiplexer((_target, message) => __awaiter(void 0, void 0, void 0, function* () {
252
+ if (message.command === constants_1.proto.cmd.GET_SYS_VAL && message.parameters[0] === 0x1c) {
253
+ pointerAttempts++;
254
+ if (pointerAttempts <= 3)
255
+ throw new Error('fail');
256
+ return [createBackupPointerResponse(backupPointer)];
257
+ }
258
+ if (message.command === constants_1.proto.cmd.GET_SYS_VAL && message.parameters[0] === 0x3d) {
259
+ return [createOverflowResponse(false)];
260
+ }
261
+ if (message.command === constants_1.proto.cmd.GET_BACKUP) {
262
+ return [createBackupDataResponse(0x0100, [createBackupRecord(1234567, d)])];
263
+ }
264
+ return [[]];
265
+ }));
266
+ const station = new CoupledSiStation_1.CoupledSiStation(multiplexer, ISiTargetMultiplexer_1.SiTargetMultiplexerTarget.Remote);
267
+ const resultPromise = station.getBackupData();
268
+ for (let i = 0; i < 10; i++)
269
+ yield testUtils.advanceTimersByTimeAsync(500);
270
+ const result = yield resultPromise;
271
+ (0, globals_1.expect)(pointerAttempts).toBeGreaterThan(1);
272
+ (0, globals_1.expect)(result.length).toBe(1);
273
+ }));
274
+ (0, globals_1.test)('retries overflow flag read on failure', () => __awaiter(void 0, void 0, void 0, function* () {
275
+ const d = date(26, 7, 4, 12, 30, 0, 80);
276
+ const backupPointer = 0x0100 + 8;
277
+ let overflowAttempts = 0;
278
+ const multiplexer = createMockMultiplexer((_target, message) => __awaiter(void 0, void 0, void 0, function* () {
279
+ if (message.command === constants_1.proto.cmd.GET_SYS_VAL && message.parameters[0] === 0x1c) {
280
+ return [createBackupPointerResponse(backupPointer)];
281
+ }
282
+ if (message.command === constants_1.proto.cmd.GET_SYS_VAL && message.parameters[0] === 0x3d) {
283
+ overflowAttempts++;
284
+ if (overflowAttempts <= 2)
285
+ throw new Error('fail');
286
+ return [createOverflowResponse(false)];
287
+ }
288
+ if (message.command === constants_1.proto.cmd.GET_BACKUP) {
289
+ return [createBackupDataResponse(0x0100, [createBackupRecord(1234567, d)])];
290
+ }
291
+ return [[]];
292
+ }));
293
+ const station = new CoupledSiStation_1.CoupledSiStation(multiplexer, ISiTargetMultiplexer_1.SiTargetMultiplexerTarget.Remote);
294
+ const resultPromise = station.getBackupData();
295
+ for (let i = 0; i < 5; i++)
296
+ yield testUtils.advanceTimersByTimeAsync(100);
297
+ yield testUtils.advanceTimersByTimeAsync(300);
298
+ const result = yield resultPromise;
299
+ (0, globals_1.expect)(overflowAttempts).toBeGreaterThan(1);
300
+ (0, globals_1.expect)(result.length).toBe(1);
301
+ }));
302
+ (0, globals_1.test)('retries data block before reducing block size', () => __awaiter(void 0, void 0, void 0, function* () {
303
+ const d = date(26, 8, 15, 7, 45, 30, 150);
304
+ const backupPointer = 0x0100 + 8;
305
+ let attempts = 0;
306
+ const multiplexer = createMockMultiplexer((_target, message) => __awaiter(void 0, void 0, void 0, function* () {
307
+ if (message.command === constants_1.proto.cmd.GET_SYS_VAL && message.parameters[0] === 0x1c) {
308
+ return [createBackupPointerResponse(backupPointer)];
309
+ }
310
+ if (message.command === constants_1.proto.cmd.GET_SYS_VAL && message.parameters[0] === 0x3d) {
311
+ return [createOverflowResponse(false)];
312
+ }
313
+ if (message.command === constants_1.proto.cmd.GET_BACKUP) {
314
+ attempts++;
315
+ if (attempts <= 3)
316
+ throw new Error('NAK');
317
+ return [createBackupDataResponse(0x0100, [createBackupRecord(1234567, d)])];
318
+ }
319
+ return [[]];
320
+ }));
321
+ const station = new CoupledSiStation_1.CoupledSiStation(multiplexer, ISiTargetMultiplexer_1.SiTargetMultiplexerTarget.Remote);
322
+ const resultPromise = station.getBackupData();
323
+ for (let i = 0; i < 6; i++)
324
+ yield testUtils.advanceTimersByTimeAsync(100);
325
+ const result = yield resultPromise;
326
+ (0, globals_1.expect)(attempts).toBeGreaterThan(1);
327
+ (0, globals_1.expect)(result.length).toBe(1);
328
+ }));
329
+ (0, globals_1.test)('reduces block size after max retries', () => __awaiter(void 0, void 0, void 0, function* () {
330
+ const d = date(26, 9, 1, 11, 11, 11, 111);
331
+ const backupPointer = 0x0100 + 256;
332
+ let attempts = 0;
333
+ const blockSizes = [];
334
+ const multiplexer = createMockMultiplexer((_target, message) => __awaiter(void 0, void 0, void 0, function* () {
335
+ if (message.command === constants_1.proto.cmd.GET_SYS_VAL && message.parameters[0] === 0x1c) {
336
+ return [createBackupPointerResponse(backupPointer)];
337
+ }
338
+ if (message.command === constants_1.proto.cmd.GET_SYS_VAL && message.parameters[0] === 0x3d) {
339
+ return [createOverflowResponse(false)];
340
+ }
341
+ if (message.command === constants_1.proto.cmd.GET_BACKUP) {
342
+ attempts++;
343
+ blockSizes.push(message.parameters[3]);
344
+ if (attempts <= 6)
345
+ throw new Error('NAK');
346
+ return [createBackupDataResponse(0x0100, [createBackupRecord(1234567, d)])];
347
+ }
348
+ return [[]];
349
+ }));
350
+ const station = new CoupledSiStation_1.CoupledSiStation(multiplexer, ISiTargetMultiplexer_1.SiTargetMultiplexerTarget.Remote);
351
+ const resultPromise = station.getBackupData();
352
+ for (let i = 0; i < 20; i++)
353
+ yield testUtils.advanceTimersByTimeAsync(100);
354
+ const result = yield resultPromise;
355
+ const uniqueSizes = [...new Set(blockSizes)];
356
+ (0, globals_1.expect)(uniqueSizes.length).toBeGreaterThan(1);
357
+ (0, globals_1.expect)(result.length).toBeGreaterThanOrEqual(1);
358
+ }));
359
+ (0, globals_1.test)('rejects when station cannot be accessed', () => __awaiter(void 0, void 0, void 0, function* () {
360
+ let errorReceived = false;
361
+ let caughtError;
362
+ const multiplexer = createMockMultiplexer((_target, message) => __awaiter(void 0, void 0, void 0, function* () {
363
+ if (message.command === constants_1.proto.cmd.GET_SYS_VAL && message.parameters[0] === 0x1c) {
364
+ throw new Error('fail');
365
+ }
366
+ return [[]];
367
+ }));
368
+ const station = new CoupledSiStation_1.CoupledSiStation(multiplexer, ISiTargetMultiplexer_1.SiTargetMultiplexerTarget.Remote);
369
+ station.addEventListener('backupReadError', () => { errorReceived = true; });
370
+ const resultPromise = station.getBackupData().catch((err) => { caughtError = err; });
371
+ for (let i = 0; i < 25; i++)
372
+ yield testUtils.advanceTimersByTimeAsync(500);
373
+ yield resultPromise;
374
+ (0, globals_1.expect)(caughtError === null || caughtError === void 0 ? void 0 : caughtError.message).toBe('Unable to access coupled si station!');
375
+ (0, globals_1.expect)(errorReceived).toBe(true);
376
+ }));
377
+ (0, globals_1.test)('rejects when backup data cannot be read', () => __awaiter(void 0, void 0, void 0, function* () {
378
+ const backupPointer = 0x0100 + 8;
379
+ let errorReceived = false;
380
+ let caughtError;
381
+ const multiplexer = createMockMultiplexer((_target, message) => __awaiter(void 0, void 0, void 0, function* () {
382
+ if (message.command === constants_1.proto.cmd.GET_SYS_VAL && message.parameters[0] === 0x1c) {
383
+ return [createBackupPointerResponse(backupPointer)];
384
+ }
385
+ if (message.command === constants_1.proto.cmd.GET_SYS_VAL && message.parameters[0] === 0x3d) {
386
+ return [createOverflowResponse(false)];
387
+ }
388
+ if (message.command === constants_1.proto.cmd.GET_BACKUP) {
389
+ throw new Error('NAK');
390
+ }
391
+ return [[]];
392
+ }));
393
+ const station = new CoupledSiStation_1.CoupledSiStation(multiplexer, ISiTargetMultiplexer_1.SiTargetMultiplexerTarget.Remote);
394
+ station.addEventListener('backupReadError', () => { errorReceived = true; });
395
+ const resultPromise = station.getBackupData().catch((err) => { caughtError = err; });
396
+ for (let i = 0; i < 100; i++)
397
+ yield testUtils.advanceTimersByTimeAsync(100);
398
+ yield resultPromise;
399
+ (0, globals_1.expect)(caughtError === null || caughtError === void 0 ? void 0 : caughtError.message).toBe('Unable to read backup data');
400
+ (0, globals_1.expect)(errorReceived).toBe(true);
401
+ }));
402
+ (0, globals_1.test)('turnOff=false does not send OFF command', () => __awaiter(void 0, void 0, void 0, function* () {
403
+ const d = date(26, 10, 31, 23, 59, 59, 255);
404
+ const backupPointer = 0x0100 + 8;
405
+ let offReceived = false;
406
+ const multiplexer = createMockMultiplexer((_target, message) => __awaiter(void 0, void 0, void 0, function* () {
407
+ if (message.command === constants_1.proto.cmd.GET_SYS_VAL && message.parameters[0] === 0x1c) {
408
+ return [createBackupPointerResponse(backupPointer)];
409
+ }
410
+ if (message.command === constants_1.proto.cmd.GET_SYS_VAL && message.parameters[0] === 0x3d) {
411
+ return [createOverflowResponse(false)];
412
+ }
413
+ if (message.command === constants_1.proto.cmd.GET_BACKUP) {
414
+ return [createBackupDataResponse(0x0100, [createBackupRecord(1234567, d)])];
415
+ }
416
+ if (message.command === constants_1.proto.cmd.OFF) {
417
+ offReceived = true;
418
+ }
419
+ return [[]];
420
+ }));
421
+ const station = new CoupledSiStation_1.CoupledSiStation(multiplexer, ISiTargetMultiplexer_1.SiTargetMultiplexerTarget.Remote);
422
+ const resultPromise = station.getBackupData(false);
423
+ yield testUtils.runPromises();
424
+ yield resultPromise;
425
+ (0, globals_1.expect)(offReceived).toBe(false);
426
+ }));
427
+ (0, globals_1.test)('turnOff=true sends OFF command', () => __awaiter(void 0, void 0, void 0, function* () {
428
+ const d = date(26, 11, 11, 11, 11, 11, 11);
429
+ const backupPointer = 0x0100 + 8;
430
+ let offReceived = false;
431
+ const multiplexer = createMockMultiplexer((_target, message) => __awaiter(void 0, void 0, void 0, function* () {
432
+ if (message.command === constants_1.proto.cmd.GET_SYS_VAL && message.parameters[0] === 0x1c) {
433
+ return [createBackupPointerResponse(backupPointer)];
434
+ }
435
+ if (message.command === constants_1.proto.cmd.GET_SYS_VAL && message.parameters[0] === 0x3d) {
436
+ return [createOverflowResponse(false)];
437
+ }
438
+ if (message.command === constants_1.proto.cmd.GET_BACKUP) {
439
+ return [createBackupDataResponse(0x0100, [createBackupRecord(1234567, d)])];
440
+ }
441
+ if (message.command === constants_1.proto.cmd.OFF) {
442
+ offReceived = true;
443
+ }
444
+ return [[]];
445
+ }));
446
+ const station = new CoupledSiStation_1.CoupledSiStation(multiplexer, ISiTargetMultiplexer_1.SiTargetMultiplexerTarget.Remote);
447
+ const resultPromise = station.getBackupData();
448
+ yield testUtils.advanceTimersByTimeAsync(300);
449
+ yield resultPromise;
450
+ (0, globals_1.expect)(offReceived).toBe(true);
451
+ }));
452
+ (0, globals_1.test)('returns empty array when no data', () => __awaiter(void 0, void 0, void 0, function* () {
453
+ const backupPointer = 0x0100;
454
+ const multiplexer = createMockMultiplexer((_target, message) => __awaiter(void 0, void 0, void 0, function* () {
455
+ if (message.command === constants_1.proto.cmd.GET_SYS_VAL && message.parameters[0] === 0x1c) {
456
+ return [createBackupPointerResponse(backupPointer)];
457
+ }
458
+ if (message.command === constants_1.proto.cmd.GET_SYS_VAL && message.parameters[0] === 0x3d) {
459
+ return [createOverflowResponse(false)];
460
+ }
461
+ return [[]];
462
+ }));
463
+ const station = new CoupledSiStation_1.CoupledSiStation(multiplexer, ISiTargetMultiplexer_1.SiTargetMultiplexerTarget.Remote);
464
+ const resultPromise = station.getBackupData();
465
+ yield testUtils.advanceTimersByTimeAsync(300);
466
+ const result = yield resultPromise;
467
+ (0, globals_1.expect)(result.length).toBe(0);
468
+ }));
469
+ (0, globals_1.test)('reads overflow flag from station', () => __awaiter(void 0, void 0, void 0, function* () {
470
+ const d = date(26, 12, 25, 0, 0, 0, 1);
471
+ const backupPointer = 0x0118;
472
+ let overflowRequested = false;
473
+ const multiplexer = createMockMultiplexer((_target, message) => __awaiter(void 0, void 0, void 0, function* () {
474
+ if (message.command === constants_1.proto.cmd.GET_SYS_VAL && message.parameters[0] === 0x1c) {
475
+ return [createBackupPointerResponse(backupPointer)];
476
+ }
477
+ if (message.command === constants_1.proto.cmd.GET_SYS_VAL && message.parameters[0] === 0x3d) {
478
+ overflowRequested = true;
479
+ return [createOverflowResponse(false)];
480
+ }
481
+ if (message.command === constants_1.proto.cmd.GET_BACKUP) {
482
+ return [createBackupDataResponse(0x0100, [createBackupRecord(1234567, d)])];
483
+ }
484
+ return [[]];
485
+ }));
486
+ const station = new CoupledSiStation_1.CoupledSiStation(multiplexer, ISiTargetMultiplexer_1.SiTargetMultiplexerTarget.Remote);
487
+ const resultPromise = station.getBackupData();
488
+ yield testUtils.advanceTimersByTimeAsync(300);
489
+ yield resultPromise;
490
+ (0, globals_1.expect)(overflowRequested).toBe(true);
491
+ }));
492
+ (0, globals_1.test)('assumes no overflow when flag read fails', () => __awaiter(void 0, void 0, void 0, function* () {
493
+ const d = date(26, 1, 1, 0, 0, 1, 128);
494
+ const backupPointer = 0x0100 + 8;
495
+ const multiplexer = createMockMultiplexer((_target, message) => __awaiter(void 0, void 0, void 0, function* () {
496
+ if (message.command === constants_1.proto.cmd.GET_SYS_VAL && message.parameters[0] === 0x1c) {
497
+ return [createBackupPointerResponse(backupPointer)];
498
+ }
499
+ if (message.command === constants_1.proto.cmd.GET_SYS_VAL && message.parameters[0] === 0x3d) {
500
+ throw new Error('fail');
501
+ }
502
+ if (message.command === constants_1.proto.cmd.GET_BACKUP) {
503
+ return [createBackupDataResponse(0x0100, [createBackupRecord(1234567, d)])];
504
+ }
505
+ return [[]];
506
+ }));
507
+ const station = new CoupledSiStation_1.CoupledSiStation(multiplexer, ISiTargetMultiplexer_1.SiTargetMultiplexerTarget.Remote);
508
+ const resultPromise = station.getBackupData();
509
+ for (let i = 0; i < 10; i++)
510
+ yield testUtils.advanceTimersByTimeAsync(100);
511
+ yield testUtils.advanceTimersByTimeAsync(300);
512
+ const result = yield resultPromise;
513
+ (0, globals_1.expect)(result.length).toBe(1);
514
+ }));
515
+ (0, globals_1.test)('reads many records across multiple chunks with correct order', () => __awaiter(void 0, void 0, void 0, function* () {
516
+ const records = [];
517
+ for (let i = 0; i < 20; i++) {
518
+ records.push({
519
+ cardNumber: 1000000 + i,
520
+ date: date(26, 6, 15, 10, i, i * 2, i * 10)
521
+ });
522
+ }
523
+ const backupPointer = 0x0100 + records.length * constants_1.proto.REC_LEN;
524
+ const multiplexer = createMockMultiplexer((_target, message) => __awaiter(void 0, void 0, void 0, function* () {
525
+ if (message.command === constants_1.proto.cmd.GET_SYS_VAL && message.parameters[0] === 0x1c) {
526
+ return [createBackupPointerResponse(backupPointer)];
527
+ }
528
+ if (message.command === constants_1.proto.cmd.GET_SYS_VAL && message.parameters[0] === 0x3d) {
529
+ return [createOverflowResponse(false)];
530
+ }
531
+ if (message.command === constants_1.proto.cmd.GET_BACKUP) {
532
+ const addr = (message.parameters[0] << 16) | (message.parameters[1] << 8) | message.parameters[2];
533
+ const len = message.parameters[3];
534
+ const startIndex = (addr - 0x0100) / constants_1.proto.REC_LEN;
535
+ const numRecords = len / constants_1.proto.REC_LEN;
536
+ const chunk = records.slice(startIndex, startIndex + numRecords);
537
+ const bytes = chunk.map(r => createBackupRecord(r.cardNumber, r.date));
538
+ return [createBackupDataResponse(addr, bytes)];
539
+ }
540
+ return [[]];
541
+ }));
542
+ const station = new CoupledSiStation_1.CoupledSiStation(multiplexer, ISiTargetMultiplexer_1.SiTargetMultiplexerTarget.Remote);
543
+ const resultPromise = station.getBackupData();
544
+ yield testUtils.advanceTimersByTimeAsync(300);
545
+ const result = yield resultPromise;
546
+ (0, globals_1.expect)(result.length).toBe(20);
547
+ for (let i = 0; i < 20; i++) {
548
+ (0, globals_1.expect)(result[i].cardNumber).toBe(records[i].cardNumber);
549
+ expectDateMatch(result[i].date, records[i].date);
550
+ }
551
+ }));
552
+ (0, globals_1.test)('reads wraparound data with overflow=true', () => __awaiter(void 0, void 0, void 0, function* () {
553
+ const backupMaxLocation = 0x200000;
554
+ const recordsAfterWrap = 5;
555
+ const recordsBeforeWrap = 3;
556
+ const backupPointer = 0x0100 + recordsAfterWrap * constants_1.proto.REC_LEN;
557
+ const allRecords = [];
558
+ for (let i = 0; i < recordsBeforeWrap; i++) {
559
+ allRecords.push({
560
+ cardNumber: 2000000 + i,
561
+ date: date(26, 6, 1, 9, i, 0, i * 30),
562
+ address: backupMaxLocation - (recordsBeforeWrap - i) * constants_1.proto.REC_LEN
563
+ });
564
+ }
565
+ for (let i = 0; i < recordsAfterWrap; i++) {
566
+ allRecords.push({
567
+ cardNumber: 3000000 + i,
568
+ date: date(26, 6, 1, 10, i, 0, i * 30),
569
+ address: 0x0100 + i * constants_1.proto.REC_LEN
570
+ });
571
+ }
572
+ const multiplexer = createMockMultiplexer((_target, message) => __awaiter(void 0, void 0, void 0, function* () {
573
+ if (message.command === constants_1.proto.cmd.GET_SYS_VAL && message.parameters[0] === 0x1c) {
574
+ return [createBackupPointerResponse(backupPointer)];
575
+ }
576
+ if (message.command === constants_1.proto.cmd.GET_SYS_VAL && message.parameters[0] === 0x3d) {
577
+ return [createOverflowResponse(true)];
578
+ }
579
+ if (message.command === constants_1.proto.cmd.GET_BACKUP) {
580
+ const addr = (message.parameters[0] << 16) | (message.parameters[1] << 8) | message.parameters[2];
581
+ const len = message.parameters[3];
582
+ const matchingRecords = allRecords.filter(r => r.address >= addr && r.address < addr + len);
583
+ const bytes = matchingRecords.map(r => createBackupRecord(r.cardNumber, r.date));
584
+ return [createBackupDataResponse(addr, bytes)];
585
+ }
586
+ return [[]];
587
+ }));
588
+ const station = new CoupledSiStation_1.CoupledSiStation(multiplexer, ISiTargetMultiplexer_1.SiTargetMultiplexerTarget.Remote);
589
+ const resultPromise = station.getBackupData();
590
+ for (let i = 0; i < 50; i++)
591
+ yield testUtils.advanceTimersByTimeAsync(100);
592
+ const result = yield resultPromise;
593
+ (0, globals_1.expect)(result.length).toBe(recordsBeforeWrap + recordsAfterWrap);
594
+ for (let i = 0; i < allRecords.length; i++) {
595
+ (0, globals_1.expect)(result[i].cardNumber).toBe(allRecords[i].cardNumber);
596
+ expectDateMatch(result[i].date, allRecords[i].date);
597
+ }
598
+ }));
599
+ (0, globals_1.test)('PM times are parsed correctly', () => __awaiter(void 0, void 0, void 0, function* () {
600
+ const pmDate = date(26, 4, 20, 14, 30, 45, 200);
601
+ const amDate = date(26, 4, 20, 2, 30, 45, 200);
602
+ const backupPointer = 0x0100 + 16;
603
+ const multiplexer = createMockMultiplexer((_target, message) => __awaiter(void 0, void 0, void 0, function* () {
604
+ if (message.command === constants_1.proto.cmd.GET_SYS_VAL && message.parameters[0] === 0x1c) {
605
+ return [createBackupPointerResponse(backupPointer)];
606
+ }
607
+ if (message.command === constants_1.proto.cmd.GET_SYS_VAL && message.parameters[0] === 0x3d) {
608
+ return [createOverflowResponse(false)];
609
+ }
610
+ if (message.command === constants_1.proto.cmd.GET_BACKUP) {
611
+ return [createBackupDataResponse(0x0100, [
612
+ createBackupRecord(1111111, amDate),
613
+ createBackupRecord(2222222, pmDate)
614
+ ])];
615
+ }
616
+ return [[]];
617
+ }));
618
+ const station = new CoupledSiStation_1.CoupledSiStation(multiplexer, ISiTargetMultiplexer_1.SiTargetMultiplexerTarget.Remote);
619
+ const resultPromise = station.getBackupData();
620
+ yield testUtils.advanceTimersByTimeAsync(300);
621
+ const result = yield resultPromise;
622
+ (0, globals_1.expect)(result.length).toBe(2);
623
+ expectDateMatch(result[0].date, amDate);
624
+ expectDateMatch(result[1].date, pmDate);
625
+ (0, globals_1.expect)(result[0].date.getHours()).toBe(2);
626
+ (0, globals_1.expect)(result[1].date.getHours()).toBe(14);
627
+ }));
628
+ });
71
629
  });
72
630
  //# sourceMappingURL=CoupledSiStation.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CoupledSiStation.test.js","sourceRoot":"","sources":["../../src/SiStation/CoupledSiStation.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAuD;AACvD,wDAA0C;AAG1C,mDAAgD;AAChD,iEAAmE;AACnE,yDAAsD;AACtD,+DAA4D;AAE5D,SAAS,CAAC,aAAa,EAAE,CAAC;AAE1B,SAAS,UAAU,CAAC,MAA8D;IACjF,OAAO,MAAkE,CAAC;AAC3E,CAAC;AAED,IAAA,kBAAQ,EAAC,kBAAkB,EAAE,GAAG,EAAE;IACjC,IAAA,cAAI,EAAC,cAAc,EAAE,GAAG,EAAE;QACzB,MAAM,YAAY,GAAG,IAAI,mBAAQ,CAAC,cAAc,EAAE;YACjD,MAAM,EAAE,UAAU,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;SAC5C,CAAC,CAAC;QACH,MAAM,iBAAiB,GAAG,mCAAgB,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QACtE,IAAA,gBAAM,EAAC,iBAAiB,YAAY,mCAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjE,IAAA,gBAAM,EAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QACzE,IAAA,gBAAM,EAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,gDAAyB,CAAC,MAAM,CAAC,CAAC;QACnF,MAAM,iBAAiB,GAAG,mCAAgB,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QACtE,IAAA,gBAAM,EAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAClD,IAAA,gBAAM,EAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QACzE,IAAA,gBAAM,EAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,gDAAyB,CAAC,MAAM,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;IACH,IAAA,cAAI,EAAC,yBAAyB,EAAE,GAAG,EAAE;QACpC,MAAM,mBAAmB,GAAG,IAAI,yCAAmB,CAAC,EAAE,KAAK,EAAE,YAAY,EAA6C,CAAC,CAAC;QACxH,MAAM,iBAAiB,GAAG,mCAAgB,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,CAAC;QACxF,IAAA,gBAAM,EAAC,iBAAiB,YAAY,mCAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjE,IAAA,gBAAM,EAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAC1D,IAAA,gBAAM,EAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,gDAAyB,CAAC,MAAM,CAAC,CAAC;QACnF,MAAM,iBAAiB,GAAG,mCAAgB,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,CAAC;QACxF,IAAA,gBAAM,EAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAClD,IAAA,gBAAM,EAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAC1D,IAAA,gBAAM,EAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,gDAAyB,CAAC,MAAM,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"CoupledSiStation.test.js","sourceRoot":"","sources":["../../src/SiStation/CoupledSiStation.test.ts"],"names":[],"mappings":"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"}