@sie-js/vkp 1.0.6 → 2.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.
package/src/index.test.js DELETED
@@ -1,403 +0,0 @@
1
- import { vkpParse } from './index.js';
2
-
3
- test('warn: useless pragma', () => {
4
- let vkp = vkpParse(`#pragma enable warn_no_old_on_apply`);
5
- expect(vkp.valid).toBe(true);
6
- expect(vkp.warnings.length).toBe(1);
7
- expect(vkp.warnings[0]).toHaveProperty("message", "Useless \"#pragma enable warn_no_old_on_apply\" has no effect at line 1 col 1\nYou can safely remove this line.");
8
- });
9
-
10
- test('warn: uncanceled pragma', () => {
11
- let vkp = vkpParse(`#pragma disable warn_no_old_on_apply`);
12
- expect(vkp.valid).toBe(true);
13
- expect(vkp.warnings.length).toBe(1);
14
- expect(vkp.warnings[0]).toHaveProperty("message", "Uncanceled pragma \"warn_no_old_on_apply\" at line 1 col 1\nPlease put \"#pragma enable warn_no_old_on_apply\" at the end of the patch.");
15
- });
16
-
17
- test('warn: uncanceled offset', () => {
18
- let vkp = vkpParse(`+123`);
19
- expect(vkp.valid).toBe(true);
20
- expect(vkp.warnings.length).toBe(1);
21
- expect(vkp.warnings[0]).toHaveProperty("message", "Uncanceled offset +123 at line 1 col 1\nPlease put \"+0\" at the end of the patch.");
22
- });
23
-
24
- test('warn: bad comments', () => {
25
- let vkp = vkpParse(`
26
- */
27
- /* comment...
28
- `);
29
- expect(vkp.valid).toBe(true);
30
- expect(vkp.warnings.length).toBe(2);
31
- expect(vkp.warnings[0]).toHaveProperty("message", "Trailing multiline comment end at line 2 col 3");
32
- expect(vkp.warnings[1]).toHaveProperty("message", "Unfinished multiline comment at line 3 col 3");
33
- });
34
-
35
- test('warn: no old data', () => {
36
- let vkp = vkpParse(`
37
- AA: BB
38
- `);
39
- expect(vkp.valid).toBe(true);
40
- expect(vkp.warnings.length).toBe(1);
41
- expect(vkp.warnings[0]).toHaveProperty("message", "Old data is not specified at line 2 col 7\nUndo operation is impossible!");
42
- });
43
-
44
- test('error: space after number', () => { // thanks Viktor89
45
- let vkp = vkpParse(`
46
- AAAA: BB 0i123; comment
47
- AAAA: BB 0x12; comment
48
- AAAA: BB CC; comment
49
- `);
50
- expect(vkp.valid).toBe(false);
51
- expect(vkp.warnings.length).toBe(0);
52
- expect(vkp.errors.length).toBe(2);
53
- expect(vkp.errors[0]).toHaveProperty("message", "No whitespace between number and comment at line 2 col 17");
54
- expect(vkp.errors[1]).toHaveProperty("message", "No whitespace between number and comment at line 3 col 16");
55
- });
56
-
57
- test('error: placeholder', () => {
58
- let vkp = vkpParse(`AAAA: BB XX`);
59
- expect(vkp.valid).toBe(false);
60
- expect(vkp.warnings.length).toBe(0);
61
- expect(vkp.errors.length).toBe(1);
62
- expect(vkp.errors[0]).toHaveProperty("message", "Found placeholder instead of real patch data at line 1 col 10");
63
- });
64
-
65
- test('error: invalid hex data', () => {
66
- let vkp = vkpParse(`AAAA: BB B`);
67
- expect(vkp.valid).toBe(false);
68
- expect(vkp.warnings.length).toBe(0);
69
- expect(vkp.errors.length).toBe(1);
70
- expect(vkp.errors[0]).toHaveProperty("message", "Hex data (B) must be even length at line 1 col 10");
71
- });
72
-
73
- test('error: old data is less than new data', () => {
74
- let vkp = vkpParse(`AAAA: BB BBCC`);
75
- expect(vkp.valid).toBe(false);
76
- expect(vkp.warnings.length).toBe(0);
77
- expect(vkp.errors.length).toBe(1);
78
- expect(vkp.errors[0]).toHaveProperty("message", "Old data (1 bytes) is less than new data (2 bytes) at line 1 col 7");
79
- });
80
-
81
- test('error: comment tokens in string', () => {
82
- let vkp = vkpParse(`
83
- AAAA: AABBCCDDEE "//"
84
- AAAA: AABBCCDDEE "/*"
85
- AAAA: AABBCCDDEE "\\/\\/"
86
- AAAA: AABBCCDDEE "\\/\\*"
87
- `);
88
- expect(vkp.valid).toBe(false);
89
- expect(vkp.warnings.length).toBe(0);
90
- expect(vkp.errors.length).toBe(2);
91
- expect(vkp.errors[0]).toHaveProperty("message", "Unescaped // is not allowed in string: \"//\" at line 2 col 20\nEscape these ambiguous characters like this: \\/* or \\/\\/.");
92
- expect(vkp.errors[1]).toHaveProperty("message", "Unescaped /* is not allowed in string: \"/*\" at line 3 col 20\nEscape these ambiguous characters like this: \\/* or \\/\\/.");
93
- });
94
-
95
- test('error: number ranges', () => {
96
- let vkp = vkpParse(`
97
- AAAA: AABBCCDDEE 0i0,0i999
98
- AAAA: AABBCCDDEE 0i0,0i99999
99
- AAAA: AABBCCDDEE 0i0,0i99999999
100
- AAAA: AABBCCDDEE 0i0,0i9999999999
101
- AAAA: AABBCCDDEE 0i0,0i9999999999999
102
- AAAA: AABBCCDDEE 0i0,0i999999999999999
103
- AAAA: AABBCCDDEE 0i0,0i99999999999999999
104
- AAAA: AABBCCDDEE 0i0,0i99999999999999999999
105
-
106
- AAAA: AABBCCDDEE 0i0,0i-999
107
- AAAA: AABBCCDDEE 0i0,0i-99999
108
- AAAA: AABBCCDDEE 0i0,0i-99999999
109
- AAAA: AABBCCDDEE 0i0,0i-9999999999
110
- AAAA: AABBCCDDEE 0i0,0i-9999999999999
111
- AAAA: AABBCCDDEE 0i0,0i-999999999999999
112
- AAAA: AABBCCDDEE 0i0,0i-99999999999999999
113
- AAAA: AABBCCDDEE 0i0,0i-99999999999999999999
114
- `);
115
- expect(vkp.valid).toBe(false);
116
- expect(vkp.warnings.length).toBe(0);
117
- expect(vkp.errors.length).toBe(16);
118
- expect(vkp.errors[0]).toHaveProperty("message", "Number 0i999 exceeds allowed range 0 ... 255 at line 2 col 24");
119
- expect(vkp.errors[1]).toHaveProperty("message", "Number 0i99999 exceeds allowed range 0 ... 65535 at line 3 col 24");
120
- expect(vkp.errors[2]).toHaveProperty("message", "Number 0i99999999 exceeds allowed range 0 ... 16777215 at line 4 col 24");
121
- expect(vkp.errors[3]).toHaveProperty("message", "Number 0i9999999999 exceeds allowed range 0 ... 4294967295 at line 5 col 24");
122
- expect(vkp.errors[4]).toHaveProperty("message", "Number 0i9999999999999 exceeds allowed range 0 ... 1099511627775 at line 6 col 24");
123
- expect(vkp.errors[5]).toHaveProperty("message", "Number 0i999999999999999 exceeds allowed range 0 ... 281474976710655 at line 7 col 24");
124
- expect(vkp.errors[6]).toHaveProperty("message", "Number 0i99999999999999999 exceeds allowed range 0 ... 72057594037927935 at line 8 col 24");
125
- expect(vkp.errors[7]).toHaveProperty("message", "Number 0i99999999999999999999 exceeds allowed range 0 ... 18446744073709551615 at line 9 col 24");
126
- expect(vkp.errors[8]).toHaveProperty("message", "Number 0i-999 exceeds allowed range -127 ... +127 at line 11 col 24");
127
- expect(vkp.errors[9]).toHaveProperty("message", "Number 0i-99999 exceeds allowed range -32767 ... +32767 at line 12 col 24");
128
- expect(vkp.errors[10]).toHaveProperty("message", "Number 0i-99999999 exceeds allowed range -8388607 ... +8388607 at line 13 col 24");
129
- expect(vkp.errors[11]).toHaveProperty("message", "Number 0i-9999999999 exceeds allowed range -2147483647 ... +2147483647 at line 14 col 24");
130
- expect(vkp.errors[12]).toHaveProperty("message", "Number 0i-9999999999999 exceeds allowed range -549755813887 ... +549755813887 at line 15 col 24");
131
- expect(vkp.errors[13]).toHaveProperty("message", "Number 0i-999999999999999 exceeds allowed range -140737488355327 ... +140737488355327 at line 16 col 24");
132
- expect(vkp.errors[14]).toHaveProperty("message", "Number 0i-99999999999999999 exceeds allowed range -36028797018963967 ... +36028797018963967 at line 17 col 24");
133
- expect(vkp.errors[15]).toHaveProperty("message", "Number 0i-99999999999999999999 exceeds allowed range -9223372036854775807 ... +9223372036854775807 at line 18 col 24");
134
- });
135
-
136
- test('error: bad numbers', () => {
137
- let vkp = vkpParse(`
138
- AAAA: AABBCCDDEE 0i0,0n1234
139
- AAAA: AABBCCDDEE 0i0,0n111111111111111111111111111111111
140
- `);
141
- expect(vkp.valid).toBe(false);
142
- expect(vkp.warnings.length).toBe(0);
143
- expect(vkp.errors.length).toBe(2);
144
- expect(vkp.errors[0]).toHaveProperty("message", "Syntax error at line 2 col 24");
145
- expect(vkp.errors[1]).toHaveProperty("message", "Number 0n111111111111111111111111111111111 exceeds allowed range 0n0 ... 0n11111111111111111111111111111111 at line 3 col 24");
146
- });
147
-
148
- test('error: bad decimal numbers', () => {
149
- let vkp = vkpParse(`
150
- 00000000: FF,FF,FF 0i+000,0i+00,0i+0
151
- 00000000: FFFF 0i+0000
152
- 00000000: FFFFFF 0i+0000000
153
- 00000000: FFFFFFFF 0i+000000000
154
- 00000000: FFFFFFFFFF 0i+000000000000
155
- 00000000: FFFFFFFFFFFF 0i+00000000000000
156
- 00000000: FFFFFFFFFFFFFF 0i+0000000000000000
157
- 00000000: FFFFFFFFFFFFFFFF 0i+0000000000000000000
158
- `);
159
- expect(vkp.valid).toBe(false);
160
- expect(vkp.warnings.length).toBe(0);
161
- expect(vkp.errors.length).toBe(7);
162
- const hint = "Must be: 3 (for BYTE), 5 (for WORD), 8 (for 3 BYTES), 10 (for DWORD), 13 (for 5 BYTES), 15 (for 6 BYTES), 17 (for 7 BYTES), " +
163
- "20 (for 8 BYTES).Use leading zeroes to match the number of digits.";
164
- expect(vkp.errors[0]).toHaveProperty("message", "The wrong number of digits in integer (0i+0000) at line 3 col 18\n" + hint);
165
- expect(vkp.errors[1]).toHaveProperty("message", "The wrong number of digits in integer (0i+0000000) at line 4 col 20\n" + hint);
166
- expect(vkp.errors[2]).toHaveProperty("message", "The wrong number of digits in integer (0i+000000000) at line 5 col 22\n" + hint);
167
- expect(vkp.errors[3]).toHaveProperty("message", "The wrong number of digits in integer (0i+000000000000) at line 6 col 24\n" + hint);
168
- expect(vkp.errors[4]).toHaveProperty("message", "The wrong number of digits in integer (0i+00000000000000) at line 7 col 26\n" + hint);
169
- expect(vkp.errors[5]).toHaveProperty("message", "The wrong number of digits in integer (0i+0000000000000000) at line 8 col 28\n" + hint);
170
- expect(vkp.errors[6]).toHaveProperty("message", "The wrong number of digits in integer (0i+0000000000000000000) at line 9 col 30\n" + hint);
171
- });
172
-
173
- test('error: bad address & offset', () => {
174
- let vkp = vkpParse(`
175
- +AAAAAAAAA
176
- AAAAAAAAA: AA BB
177
- `);
178
- expect(vkp.valid).toBe(false);
179
- expect(vkp.warnings.length).toBe(0);
180
- expect(vkp.errors.length).toBe(2);
181
- expect(vkp.errors[0]).toHaveProperty("message", "Offset +AAAAAAAAA exceeds allowed range 00000000 ... FFFFFFFF at line 2 col 3");
182
- expect(vkp.errors[1]).toHaveProperty("message", "Address AAAAAAAAA: exceeds allowed range 00000000 ... FFFFFFFF at line 3 col 3");
183
- });
184
-
185
- test('error: bad string', () => {
186
- let vkp = vkpParse(`
187
- AAAAAAAA: FFFFFFFFFFFFFFFF "\\xAA"
188
- AAAAAAAA: FFFFFFFFFFFFFFFF "\\u1234"
189
- AAAAAAAA: FFFFFFFFFFFFFFFF "\\777"
190
- AAAAAAAA: FFFFFFFFFFFFFFFF "\\jam"
191
- `);
192
- expect(vkp.valid).toBe(false);
193
- expect(vkp.warnings.length).toBe(0);
194
- expect(vkp.errors.length).toBe(4);
195
- expect(vkp.errors[0]).toHaveProperty("message", "Bad escape sequence (\\xAA) at line 2 col 31\nAllowed range: \\x00-\\x7F.");
196
- expect(vkp.errors[1]).toHaveProperty("message", "Unknown escape sequence (\\u1234) at line 3 col 31");
197
- expect(vkp.errors[2]).toHaveProperty("message", "Unknown escape sequence (\\777) at line 4 col 31");
198
- expect(vkp.errors[3]).toHaveProperty("message", "Unknown escape sequence (\\j) at line 5 col 31");
199
- });
200
-
201
- test('data: valid address & offset', () => {
202
- let vkp = vkpParse(`
203
- -123450
204
- A8123456: AA BB
205
- +0
206
- `);
207
- expect(vkp.valid).toBe(true);
208
- expect(vkp.warnings.length).toBe(0);
209
- expect(vkp.errors.length).toBe(0);
210
- expect(vkp.writes.length).toBe(1);
211
- expect(vkp.writes[0].addr).toBe(0xA8000006);
212
- });
213
-
214
- test('data: HEX bytes', () => {
215
- let vkp = vkpParse(`00000000: FFFFFFFFFFFFFFFF DEAD926E,DE,AD,92,6E`);
216
- expect(vkp.valid).toBe(true);
217
- expect(vkp.warnings.length).toBe(0);
218
- expect(vkp.errors.length).toBe(0);
219
- expect(vkp.writes.length).toBe(1);
220
- expect(vkp.writes[0].new.toString('hex')).toBe('dead926edead926e');
221
- });
222
-
223
- test('data: HEX numbers', () => {
224
- let vkp = vkpParse(`00000000: FFFFFFFFFFFFFFFFFFFFFFFF 0xDEAD926E,0xDEAD,0x92,0x6E,0x1,0x2,0x123`);
225
- expect(vkp.valid).toBe(true);
226
- expect(vkp.warnings.length).toBe(0);
227
- expect(vkp.errors.length).toBe(0);
228
- expect(vkp.writes.length).toBe(1);
229
- expect(vkp.writes[0].new.toString('hex')).toBe('6e92addeadde926e01022301');
230
- });
231
-
232
- test('data: binary numbers', () => {
233
- let vkp = vkpParse(`00000000: FFFFFFFFFFFFFFFFFFFFFF 0n11011110101011011011111011101111,0n11011110,0n1101111010101101,0n100100011010001010110`);
234
- expect(vkp.valid).toBe(true);
235
- expect(vkp.warnings.length).toBe(0);
236
- expect(vkp.errors.length).toBe(0);
237
- expect(vkp.writes.length).toBe(1);
238
- expect(vkp.writes[0].new.toString('hex')).toBe('efbeaddedeadde563412');
239
- });
240
-
241
- test('data: unsigned decimal numbers', () => {
242
- let vkp = vkpParse(`
243
- 00000000: FF 0i18
244
- 00000000: FFFF 0i04660
245
- 00000000: FFFFFF 0i01193046
246
- 00000000: FFFFFFFF 0i0305419896
247
- 00000000: FFFFFFFFFF 0i0078187493530
248
- 00000000: FFFFFFFFFFFF 0i020015998343868
249
- 00000000: FFFFFFFFFFFFFF 0i05124095576030430
250
- 00000000: FFFFFFFFFFFFFFFF 0i01311768467463790320
251
- `);
252
- expect(vkp.valid).toBe(true);
253
- expect(vkp.warnings.length).toBe(0);
254
- expect(vkp.errors.length).toBe(0);
255
- expect(vkp.writes.length).toBe(8);
256
- expect(vkp.writes[0].new.toString('hex')).toBe('12');
257
- expect(vkp.writes[1].new.toString('hex')).toBe('3412');
258
- expect(vkp.writes[2].new.toString('hex')).toBe('563412');
259
- expect(vkp.writes[3].new.toString('hex')).toBe('78563412');
260
- expect(vkp.writes[4].new.toString('hex')).toBe('9a78563412');
261
- expect(vkp.writes[5].new.toString('hex')).toBe('bc9a78563412');
262
- expect(vkp.writes[6].new.toString('hex')).toBe('debc9a78563412');
263
- expect(vkp.writes[7].new.toString('hex')).toBe('f0debc9a78563412');
264
- });
265
-
266
- test('data: positive decimal numbers', () => {
267
- let vkp = vkpParse(`
268
- ; middle value
269
- 00000000: FF 0i+18
270
- 00000000: FFFF 0i+04660
271
- 00000000: FFFFFF 0i+01193046
272
- 00000000: FFFFFFFF 0i+0305419896
273
- 00000000: FFFFFFFFFF 0i+0078187493530
274
- 00000000: FFFFFFFFFFFF 0i+020015998343868
275
- 00000000: FFFFFFFFFFFFFF 0i+05124095576030430
276
- 00000000: FFFFFFFFFFFFFFFF 0i+01311768467463790320
277
-
278
- ; max value
279
- 00000000: FF 0i+127
280
- 00000000: FFFF 0i+32767
281
- 00000000: FFFFFF 0i+08388607
282
- 00000000: FFFFFFFF 0i+2147483647
283
- 00000000: FFFFFFFFFF 0i+0549755813887
284
- 00000000: FFFFFFFFFFFF 0i+140737488355327
285
- 00000000: FFFFFFFFFFFFFF 0i+36028797018963967
286
- 00000000: FFFFFFFFFFFFFFFF 0i+09223372036854775807
287
-
288
- ; min value
289
- 00000000: FF 0i+000
290
- 00000000: FFFF 0i+00000
291
- 00000000: FFFFFF 0i+00000000
292
- 00000000: FFFFFFFF 0i+0000000000
293
- 00000000: FFFFFFFFFF 0i+0000000000000
294
- 00000000: FFFFFFFFFFFF 0i+000000000000000
295
- 00000000: FFFFFFFFFFFFFF 0i+00000000000000000
296
- 00000000: FFFFFFFFFFFFFFFF 0i+00000000000000000000
297
- `);
298
- expect(vkp.valid).toBe(true);
299
- expect(vkp.warnings.length).toBe(0);
300
- expect(vkp.errors.length).toBe(0);
301
- expect(vkp.writes.length).toBe(24);
302
- expect(vkp.writes[0].new.toString('hex')).toBe('12');
303
- expect(vkp.writes[1].new.toString('hex')).toBe('3412');
304
- expect(vkp.writes[2].new.toString('hex')).toBe('563412');
305
- expect(vkp.writes[3].new.toString('hex')).toBe('78563412');
306
- expect(vkp.writes[4].new.toString('hex')).toBe('9a78563412');
307
- expect(vkp.writes[5].new.toString('hex')).toBe('bc9a78563412');
308
- expect(vkp.writes[6].new.toString('hex')).toBe('debc9a78563412');
309
- expect(vkp.writes[7].new.toString('hex')).toBe('f0debc9a78563412');
310
- expect(vkp.writes[8].new.toString('hex')).toBe('7f');
311
- expect(vkp.writes[9].new.toString('hex')).toBe('ff7f');
312
- expect(vkp.writes[10].new.toString('hex')).toBe('ffff7f');
313
- expect(vkp.writes[11].new.toString('hex')).toBe('ffffff7f');
314
- expect(vkp.writes[12].new.toString('hex')).toBe('ffffffff7f');
315
- expect(vkp.writes[13].new.toString('hex')).toBe('ffffffffff7f');
316
- expect(vkp.writes[14].new.toString('hex')).toBe('ffffffffffff7f');
317
- expect(vkp.writes[15].new.toString('hex')).toBe('ffffffffffffff7f');
318
- expect(vkp.writes[16].new.toString('hex')).toBe('00');
319
- expect(vkp.writes[17].new.toString('hex')).toBe('0000');
320
- expect(vkp.writes[18].new.toString('hex')).toBe('000000');
321
- expect(vkp.writes[19].new.toString('hex')).toBe('00000000');
322
- expect(vkp.writes[20].new.toString('hex')).toBe('0000000000');
323
- expect(vkp.writes[21].new.toString('hex')).toBe('000000000000');
324
- expect(vkp.writes[22].new.toString('hex')).toBe('00000000000000');
325
- expect(vkp.writes[23].new.toString('hex')).toBe('0000000000000000');
326
- });
327
-
328
- test('data: negative decimal numbers', () => {
329
- let vkp = vkpParse(`
330
- ; middle value
331
- 00000000: FF 0i-18
332
- 00000000: FFFF 0i-04660
333
- 00000000: FFFFFF 0i-01193046
334
- 00000000: FFFFFFFF 0i-0305419896
335
- 00000000: FFFFFFFFFF 0i-0078187493530
336
- 00000000: FFFFFFFFFFFF 0i-020015998343868
337
- 00000000: FFFFFFFFFFFFFF 0i-05124095576030430
338
- 00000000: FFFFFFFFFFFFFFFF 0i-01311768467463790320
339
-
340
- ; min value
341
- 00000000: FF 0i-127
342
- 00000000: FFFF 0i-32767
343
- 00000000: FFFFFF 0i-08388607
344
- 00000000: FFFFFFFF 0i-2147483647
345
- 00000000: FFFFFFFFFF 0i-0549755813887
346
- 00000000: FFFFFFFFFFFF 0i-140737488355327
347
- 00000000: FFFFFFFFFFFFFF 0i-36028797018963967
348
- 00000000: FFFFFFFFFFFFFFFF 0i-09223372036854775807
349
-
350
- ; max value
351
- 00000000: FF 0i-001
352
- 00000000: FFFF 0i-00001
353
- 00000000: FFFFFF 0i-00000001
354
- 00000000: FFFFFFFF 0i-0000000001
355
- 00000000: FFFFFFFFFF 0i-0000000000001
356
- 00000000: FFFFFFFFFFFF 0i-000000000000001
357
- 00000000: FFFFFFFFFFFFFF 0i-00000000000000001
358
- 00000000: FFFFFFFFFFFFFFFF 0i-00000000000000000001
359
- `);
360
- expect(vkp.valid).toBe(true);
361
- expect(vkp.warnings.length).toBe(0);
362
- expect(vkp.errors.length).toBe(0);
363
- expect(vkp.writes.length).toBe(24);
364
- expect(vkp.writes[0].new.toString('hex')).toBe('ee');
365
- expect(vkp.writes[1].new.toString('hex')).toBe('cced');
366
- expect(vkp.writes[2].new.toString('hex')).toBe('aacbed');
367
- expect(vkp.writes[3].new.toString('hex')).toBe('88a9cbed');
368
- expect(vkp.writes[4].new.toString('hex')).toBe('6687a9cbed');
369
- expect(vkp.writes[5].new.toString('hex')).toBe('446587a9cbed');
370
- expect(vkp.writes[6].new.toString('hex')).toBe('22436587a9cbed');
371
- expect(vkp.writes[7].new.toString('hex')).toBe('1021436587a9cbed');
372
- expect(vkp.writes[8].new.toString('hex')).toBe('81');
373
- expect(vkp.writes[9].new.toString('hex')).toBe('0180');
374
- expect(vkp.writes[10].new.toString('hex')).toBe('010080');
375
- expect(vkp.writes[11].new.toString('hex')).toBe('01000080');
376
- expect(vkp.writes[12].new.toString('hex')).toBe('0100000080');
377
- expect(vkp.writes[13].new.toString('hex')).toBe('010000000080');
378
- expect(vkp.writes[14].new.toString('hex')).toBe('01000000000080');
379
- expect(vkp.writes[15].new.toString('hex')).toBe('0100000000000080');
380
- expect(vkp.writes[16].new.toString('hex')).toBe('ff');
381
- expect(vkp.writes[17].new.toString('hex')).toBe('ffff');
382
- expect(vkp.writes[18].new.toString('hex')).toBe('ffffff');
383
- expect(vkp.writes[19].new.toString('hex')).toBe('ffffffff');
384
- expect(vkp.writes[20].new.toString('hex')).toBe('ffffffffff');
385
- expect(vkp.writes[21].new.toString('hex')).toBe('ffffffffffff');
386
- expect(vkp.writes[22].new.toString('hex')).toBe('ffffffffffffff');
387
- expect(vkp.writes[23].new.toString('hex')).toBe('ffffffffffffffff');
388
- });
389
-
390
- test('data: string', () => {
391
- let vkp = vkpParse(`
392
- 00000000: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF "ололо\\
393
- \\0\\177\\100test\\x50\\x20\\a\\b\\t\\r\\n\\v\\f\\e\\\\\\/"
394
- 00000000: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 'ололо\\
395
- \\0\\177\\100\\uABCDtest\\xAB\\xCD\\a\\b\\t\\r\\n\\v\\f\\e\\\\\\/'
396
- `);
397
- expect(vkp.valid).toBe(true);
398
- expect(vkp.warnings.length).toBe(0);
399
- expect(vkp.errors.length).toBe(0);
400
- expect(vkp.writes.length).toBe(2);
401
- expect(vkp.writes[0].new.toString('hex')).toBe('eeebeeebee007f407465737450200708090d0a0b0c1b5c2f');
402
- expect(vkp.writes[1].new.toString('hex')).toBe('3e043b043e043b043e0400007f004000cdab7400650073007400ab00cd000700080009000d000a000b000c001b005c002f00');
403
- });
package/src/lexer.js DELETED
@@ -1,46 +0,0 @@
1
- import moo from 'moo';
2
- import iconv from 'iconv-lite';
3
- import { VkpParseError } from './VkpParseError.js';
4
-
5
- const RE_PLACEHOLDERS = [
6
- /(?:0x)?(?:[a-fA-F0-9]*(?:XX|xx|YY|yy|ZZ|zz|HH|hh|nn|NN|Nn|MS|ML|\?\?)[a-fA-F0-9]*)+(?!\w)/,
7
- /(?:0i[+-]?)(?:[0-9]*(?:[xyz?]+)[0-9]*)+(?!\w)/
8
- ];
9
-
10
- export const TOKEN = {
11
- WHITESPACE: 1,
12
- PRAGMA: 2,
13
- COMMENT: 3,
14
- OFFSET: 4,
15
- ADDRESS: 5,
16
- NUMBER: 6,
17
- DATA: 7,
18
- PLACEHOLDER: 8,
19
- STRING: 9,
20
- COMMA: 10,
21
- LINE_ESCAPE: 11,
22
- MULTILINE_COMMENT: 12,
23
- UNFINISHED_COMMENT: 13,
24
- TRAILING_COMMENT_END: 14,
25
- NEWLINE: 15,
26
- ERROR: 16,
27
- };
28
-
29
- export const LEXER = moo.compile([
30
- { type: TOKEN.WHITESPACE, match: /[ \t]+/, lineBreaks: false },
31
- { type: TOKEN.PRAGMA, match: /#pragma[ \t\w]+/, lineBreaks: false },
32
- { type: TOKEN.COMMENT, match: /(?:\/\/|;|#).*?$/, lineBreaks: false },
33
- { type: TOKEN.OFFSET, match: /[+-](?:0[xX])?[a-fA-F0-9]+/, lineBreaks: false },
34
- { type: TOKEN.ADDRESS, match: /(?:0[xX])?[a-fA-F0-9]+:/, lineBreaks: false },
35
- { type: TOKEN.NUMBER, match: [/0x[a-fA-F0-9]+(?:\b|$)/, /0n[10]+(?:\b|$)/, /0i[+-]?[0-9]+(?!\w)/], lineBreaks: false },
36
- { type: TOKEN.DATA, match: /[a-fA-F0-9]+\b/, lineBreaks: false },
37
- { type: TOKEN.PLACEHOLDER, match: RE_PLACEHOLDERS, lineBreaks: false },
38
- { type: TOKEN.STRING, match: /(?:"(?:\\[^]|[^"\\])*?"|'(?:\\[^]|[^"\\])*?')/, lineBreaks: true },
39
- { type: TOKEN.COMMA, match: /,/, lineBreaks: false },
40
- { type: TOKEN.LINE_ESCAPE, match: /\\(?:\r\n|\n)/, lineBreaks: true },
41
- { type: TOKEN.MULTILINE_COMMENT, match: /\/\*[^]*?\*\//, lineBreaks: true },
42
- { type: TOKEN.UNFINISHED_COMMENT, match: /\/\*[^]*$/, lineBreaks: true },
43
- { type: TOKEN.TRAILING_COMMENT_END, match: /\*\//, lineBreaks: false },
44
- { type: TOKEN.NEWLINE, match: /(?:\r\n|\n)/, lineBreaks: true },
45
- { type: TOKEN.ERROR, match: /.+?$/, lineBreaks: false },
46
- ]);