1 |
|
2 |
|
3 | import 'babel-polyfill'
|
4 |
|
5 | import File from '../../src/File'
|
6 | import ParseLaTeXLog from '../../src/Rules/ParseLaTeXLog'
|
7 | import { initializeRule } from '../helpers'
|
8 |
|
9 | import type { RuleDefinition } from '../helpers'
|
10 |
|
11 | async function initialize ({
|
12 | RuleClass = ParseLaTeXLog,
|
13 | filePath = 'error-warning.tex',
|
14 | parameters = [{
|
15 | filePath: 'error-warning.log'
|
16 | }],
|
17 | ...rest }: RuleDefinition = {}) {
|
18 | return initializeRule({ RuleClass, filePath, parameters, ...rest })
|
19 | }
|
20 |
|
21 | describe('ParseLaTeXLog', () => {
|
22 | it('verifies that all log messages are successfully parsed.', async (done) => {
|
23 | const sourceName = 'error-warning.tex'
|
24 | const logName = 'error-warning.log'
|
25 | const { rule } = await initialize()
|
26 | const messages = [{
|
27 | name: 'pdfTeX',
|
28 | severity: 'info',
|
29 | text: 'expl3 2017/05/29 L3 programming layer (loader)',
|
30 | source: {
|
31 | file: sourceName
|
32 | },
|
33 | log: {
|
34 | file: logName,
|
35 | range: {
|
36 | start: 27,
|
37 | end: 27
|
38 | }
|
39 | }
|
40 | }, {
|
41 | name: 'pdfTeX',
|
42 | severity: 'info',
|
43 | text: 'expl3 2017/05/29 L3 programming layer (code)',
|
44 | source: {
|
45 | file: sourceName
|
46 | },
|
47 | log: {
|
48 | file: logName,
|
49 | range: {
|
50 | start: 29,
|
51 | end: 29
|
52 | }
|
53 | }
|
54 | }, {
|
55 | severity: 'info',
|
56 | name: 'pdfTeX',
|
57 | category: 'LaTeX Font',
|
58 | text: 'Checking defaults for OML/cmm/m/it',
|
59 | source: {
|
60 | file: sourceName,
|
61 | range: {
|
62 | start: 5,
|
63 | end: 5
|
64 | }
|
65 | },
|
66 | log: {
|
67 | file: logName,
|
68 | range: {
|
69 | start: 177,
|
70 | end: 177
|
71 | }
|
72 | }
|
73 | }, {
|
74 | severity: 'info',
|
75 | name: 'pdfTeX',
|
76 | category: 'LaTeX Font',
|
77 | text: '... okay',
|
78 | source: {
|
79 | file: sourceName,
|
80 | range: {
|
81 | start: 5,
|
82 | end: 5
|
83 | }
|
84 | },
|
85 | log: {
|
86 | file: logName,
|
87 | range: {
|
88 | start: 178,
|
89 | end: 178
|
90 | }
|
91 | }
|
92 | }, {
|
93 | severity: 'info',
|
94 | name: 'pdfTeX',
|
95 | category: 'LaTeX Font',
|
96 | text: 'Checking defaults for T1/cmr/m/n',
|
97 | source: {
|
98 | file: sourceName,
|
99 | range: {
|
100 | start: 5,
|
101 | end: 5
|
102 | }
|
103 | },
|
104 | log: {
|
105 | file: logName,
|
106 | range: {
|
107 | start: 179,
|
108 | end: 179
|
109 | }
|
110 | }
|
111 | }, {
|
112 | severity: 'info',
|
113 | name: 'pdfTeX',
|
114 | category: 'LaTeX Font',
|
115 | text: '... okay',
|
116 | source: {
|
117 | file: sourceName,
|
118 | range: {
|
119 | start: 5,
|
120 | end: 5
|
121 | }
|
122 | },
|
123 | log: {
|
124 | file: logName,
|
125 | range: {
|
126 | start: 180,
|
127 | end: 180
|
128 | }
|
129 | }
|
130 | }, {
|
131 | severity: 'info',
|
132 | name: 'pdfTeX',
|
133 | category: 'LaTeX Font',
|
134 | text: 'Checking defaults for OT1/cmr/m/n',
|
135 | source: {
|
136 | file: sourceName,
|
137 | range: {
|
138 | start: 5,
|
139 | end: 5
|
140 | }
|
141 | },
|
142 | log: {
|
143 | file: logName,
|
144 | range: {
|
145 | start: 181,
|
146 | end: 181
|
147 | }
|
148 | }
|
149 | }, {
|
150 | severity: 'info',
|
151 | name: 'pdfTeX',
|
152 | category: 'LaTeX Font',
|
153 | text: '... okay',
|
154 | source: {
|
155 | file: sourceName,
|
156 | range: {
|
157 | start: 5,
|
158 | end: 5
|
159 | }
|
160 | },
|
161 | log: {
|
162 | file: logName,
|
163 | range: {
|
164 | start: 182,
|
165 | end: 182
|
166 | }
|
167 | }
|
168 | }, {
|
169 | severity: 'info',
|
170 | name: 'pdfTeX',
|
171 | category: 'LaTeX Font',
|
172 | text: 'Checking defaults for OMS/cmsy/m/n',
|
173 | source: {
|
174 | file: sourceName,
|
175 | range: {
|
176 | start: 5,
|
177 | end: 5
|
178 | }
|
179 | },
|
180 | log: {
|
181 | file: logName,
|
182 | range: {
|
183 | start: 183,
|
184 | end: 183
|
185 | }
|
186 | }
|
187 | }, {
|
188 | severity: 'info',
|
189 | name: 'pdfTeX',
|
190 | category: 'LaTeX Font',
|
191 | text: '... okay',
|
192 | source: {
|
193 | file: sourceName,
|
194 | range: {
|
195 | start: 5,
|
196 | end: 5
|
197 | }
|
198 | },
|
199 | log: {
|
200 | file: logName,
|
201 | range: {
|
202 | start: 184,
|
203 | end: 184
|
204 | }
|
205 | }
|
206 | }, {
|
207 | severity: 'info',
|
208 | name: 'pdfTeX',
|
209 | category: 'LaTeX Font',
|
210 | text: 'Checking defaults for OMX/cmex/m/n',
|
211 | source: {
|
212 | file: sourceName,
|
213 | range: {
|
214 | start: 5,
|
215 | end: 5
|
216 | }
|
217 | },
|
218 | log: {
|
219 | file: logName,
|
220 | range: {
|
221 | start: 185,
|
222 | end: 185
|
223 | }
|
224 | }
|
225 | }, {
|
226 | severity: 'info',
|
227 | name: 'pdfTeX',
|
228 | category: 'LaTeX Font',
|
229 | text: '... okay',
|
230 | source: {
|
231 | file: sourceName,
|
232 | range: {
|
233 | start: 5,
|
234 | end: 5
|
235 | }
|
236 | },
|
237 | log: {
|
238 | file: logName,
|
239 | range: {
|
240 | start: 186,
|
241 | end: 186
|
242 | }
|
243 | }
|
244 | }, {
|
245 | severity: 'info',
|
246 | name: 'pdfTeX',
|
247 | category: 'LaTeX Font',
|
248 | text: 'Checking defaults for U/cmr/m/n',
|
249 | source: {
|
250 | file: sourceName,
|
251 | range: {
|
252 | start: 5,
|
253 | end: 5
|
254 | }
|
255 | },
|
256 | log: {
|
257 | file: logName,
|
258 | range: {
|
259 | start: 187,
|
260 | end: 187
|
261 | }
|
262 | }
|
263 | }, {
|
264 | severity: 'info',
|
265 | name: 'pdfTeX',
|
266 | category: 'LaTeX Font',
|
267 | text: '... okay',
|
268 | source: {
|
269 | file: sourceName,
|
270 | range: {
|
271 | start: 5,
|
272 | end: 5
|
273 | }
|
274 | },
|
275 | log: {
|
276 | file: logName,
|
277 | range: {
|
278 | start: 188,
|
279 | end: 188
|
280 | }
|
281 | }
|
282 | }, {
|
283 | severity: 'error',
|
284 | name: 'pdfTeX',
|
285 | category: 'LaTeX',
|
286 | text: 'There\'s no line here to end',
|
287 | log: {
|
288 | file: logName,
|
289 | range: {
|
290 | start: 190,
|
291 | end: 190
|
292 | }
|
293 | },
|
294 | source: {
|
295 | file: sourceName,
|
296 | range: {
|
297 | start: 12,
|
298 | end: 12
|
299 | }
|
300 | }
|
301 | }, {
|
302 | severity: 'info',
|
303 | name: 'pdfTeX',
|
304 | category: 'LaTeX Font',
|
305 | text: 'External font `cmex10\' loaded for size <14.4>.',
|
306 | source: {
|
307 | file: sourceName,
|
308 | range: {
|
309 | start: 17,
|
310 | end: 17
|
311 | }
|
312 | },
|
313 | log: {
|
314 | file: logName,
|
315 | range: {
|
316 | start: 202,
|
317 | end: 203
|
318 | }
|
319 | }
|
320 | }, {
|
321 | severity: 'info',
|
322 | name: 'pdfTeX',
|
323 | category: 'LaTeX Font',
|
324 | text: 'External font `cmex10\' loaded for size <7>.',
|
325 | source: {
|
326 | file: sourceName,
|
327 | range: {
|
328 | start: 17,
|
329 | end: 17
|
330 | }
|
331 | },
|
332 | log: {
|
333 | file: logName,
|
334 | range: {
|
335 | start: 204,
|
336 | end: 205
|
337 | }
|
338 | }
|
339 | }, {
|
340 | severity: 'info',
|
341 | name: 'pdfTeX',
|
342 | category: 'LaTeX Font',
|
343 | text: 'External font `cmex10\' loaded for size <8>.',
|
344 | source: {
|
345 | file: sourceName,
|
346 | range: {
|
347 | start: 17,
|
348 | end: 17
|
349 | }
|
350 | },
|
351 | log: {
|
352 | file: logName,
|
353 | range: {
|
354 | start: 206,
|
355 | end: 207
|
356 | }
|
357 | }
|
358 | }, {
|
359 | severity: 'info',
|
360 | name: 'pdfTeX',
|
361 | category: 'LaTeX Font',
|
362 | text: 'External font `cmex10\' loaded for size <6>.',
|
363 | source: {
|
364 | file: sourceName,
|
365 | range: {
|
366 | start: 17,
|
367 | end: 17
|
368 | }
|
369 | },
|
370 | log: {
|
371 | file: logName,
|
372 | range: {
|
373 | start: 208,
|
374 | end: 209
|
375 | }
|
376 | }
|
377 | }, {
|
378 | severity: 'info',
|
379 | name: 'pdfTeX',
|
380 | category: 'LaTeX Font',
|
381 | text: 'External font `cmex10\' loaded for size <5>.',
|
382 | source: {
|
383 | file: sourceName,
|
384 | range: {
|
385 | start: 17,
|
386 | end: 17
|
387 | }
|
388 | },
|
389 | log: {
|
390 | file: logName,
|
391 | range: {
|
392 | start: 210,
|
393 | end: 211
|
394 | }
|
395 | }
|
396 | }, {
|
397 | severity: 'error',
|
398 | name: 'pdfTeX',
|
399 | text: 'Argument of \\@sect has an extra }',
|
400 | log: {
|
401 | file: logName,
|
402 | range: {
|
403 | start: 212,
|
404 | end: 212
|
405 | }
|
406 | },
|
407 | source: {
|
408 | file: sourceName,
|
409 | range: {
|
410 | start: 17,
|
411 | end: 17
|
412 | }
|
413 | }
|
414 | }, {
|
415 | severity: 'error',
|
416 | name: 'pdfTeX',
|
417 | text: 'Paragraph ended before \\@sect was complete',
|
418 | log: {
|
419 | file: logName,
|
420 | range: {
|
421 | start: 227,
|
422 | end: 227
|
423 | }
|
424 | },
|
425 | source: {
|
426 | file: sourceName,
|
427 | range: {
|
428 | start: 17,
|
429 | end: 17
|
430 | }
|
431 | }
|
432 | }, {
|
433 | severity: 'error',
|
434 | name: 'pdfTeX',
|
435 | text: 'Extra alignment tab has been changed to \\cr',
|
436 | log: {
|
437 | file: logName,
|
438 | range: {
|
439 | start: 236,
|
440 | end: 236
|
441 | }
|
442 | },
|
443 | source: {
|
444 | file: sourceName,
|
445 | range: {
|
446 | start: 26,
|
447 | end: 26
|
448 | }
|
449 | }
|
450 | }, {
|
451 | severity: 'error',
|
452 | name: 'pdfTeX',
|
453 | category: 'Class foo',
|
454 | text: 'Significant class issue',
|
455 | log: {
|
456 | file: logName,
|
457 | range: {
|
458 | start: 246,
|
459 | end: 246
|
460 | }
|
461 | },
|
462 | source: {
|
463 | file: sourceName,
|
464 | range: {
|
465 | start: 30,
|
466 | end: 30
|
467 | }
|
468 | }
|
469 | }, {
|
470 | severity: 'warning',
|
471 | name: 'pdfTeX',
|
472 | category: 'Class foo',
|
473 | text: 'Class issue',
|
474 | source: {
|
475 | file: sourceName,
|
476 | range: {
|
477 | start: 31,
|
478 | end: 31
|
479 | }
|
480 | },
|
481 | log: {
|
482 | file: logName,
|
483 | range: {
|
484 | start: 257,
|
485 | end: 257
|
486 | }
|
487 | }
|
488 | }, {
|
489 | severity: 'warning',
|
490 | name: 'pdfTeX',
|
491 | category: 'Class foo',
|
492 | text: 'Nebulous class issue.',
|
493 | source: {
|
494 | file: sourceName
|
495 | },
|
496 | log: {
|
497 | file: logName,
|
498 | range: {
|
499 | start: 260,
|
500 | end: 260
|
501 | }
|
502 | }
|
503 | }, {
|
504 | severity: 'info',
|
505 | name: 'pdfTeX',
|
506 | category: 'Class foo',
|
507 | text: 'Insignificant class issue',
|
508 | source: {
|
509 | file: sourceName,
|
510 | range: {
|
511 | start: 33,
|
512 | end: 33
|
513 | }
|
514 | },
|
515 | log: {
|
516 | file: logName,
|
517 | range: {
|
518 | start: 262,
|
519 | end: 262
|
520 | }
|
521 | }
|
522 | }, {
|
523 | severity: 'error',
|
524 | name: 'pdfTeX',
|
525 | category: 'Package bar',
|
526 | text: 'Significant package issue',
|
527 | log: {
|
528 | file: logName,
|
529 | range: {
|
530 | start: 264,
|
531 | end: 264
|
532 | }
|
533 | },
|
534 | source: {
|
535 | file: sourceName,
|
536 | range: {
|
537 | start: 36,
|
538 | end: 36
|
539 | }
|
540 | }
|
541 | }, {
|
542 | severity: 'warning',
|
543 | name: 'pdfTeX',
|
544 | category: 'Package bar',
|
545 | text: 'Package issue',
|
546 | source: {
|
547 | file: sourceName,
|
548 | range: {
|
549 | start: 37,
|
550 | end: 37
|
551 | }
|
552 | },
|
553 | log: {
|
554 | file: logName,
|
555 | range: {
|
556 | start: 275,
|
557 | end: 275
|
558 | }
|
559 | }
|
560 | }, {
|
561 | severity: 'warning',
|
562 | name: 'pdfTeX',
|
563 | category: 'Package bar',
|
564 | text: 'Nebulous package issue.',
|
565 | source: {
|
566 | file: sourceName
|
567 | },
|
568 | log: {
|
569 | file: logName,
|
570 | range: {
|
571 | start: 278,
|
572 | end: 278
|
573 | }
|
574 | }
|
575 | }, {
|
576 | severity: 'info',
|
577 | name: 'pdfTeX',
|
578 | category: 'Package bar',
|
579 | text: 'Insignificant package issue',
|
580 | source: {
|
581 | file: sourceName,
|
582 | range: {
|
583 | start: 39,
|
584 | end: 39
|
585 | }
|
586 | },
|
587 | log: {
|
588 | file: logName,
|
589 | range: {
|
590 | start: 280,
|
591 | end: 280
|
592 | }
|
593 | }
|
594 | }, {
|
595 | severity: 'error',
|
596 | name: 'pdfTeX',
|
597 | category: 'foo',
|
598 | source: {
|
599 | file: sourceName,
|
600 | range: {
|
601 | start: 47,
|
602 | end: 47
|
603 | }
|
604 | },
|
605 | text: '"bar"\nThe blind spot behind a submarine which makes a good hidding spot for other submarines.\nSee the foo documentation for further information.',
|
606 | log: {
|
607 | file: logName,
|
608 | range: {
|
609 | start: 282,
|
610 | end: 292
|
611 | }
|
612 | }
|
613 | }, {
|
614 | severity: 'warning',
|
615 | name: 'pdfTeX',
|
616 | category: 'foo',
|
617 | source: {
|
618 | file: sourceName,
|
619 | range: {
|
620 | start: 48,
|
621 | end: 48
|
622 | }
|
623 | },
|
624 | text: '"bar"\nThe blind spot behind a submarine which makes a good hidding spot for other submarines.',
|
625 | log: {
|
626 | file: logName,
|
627 | range: {
|
628 | start: 303,
|
629 | end: 308
|
630 | }
|
631 | }
|
632 | }, {
|
633 | severity: 'info',
|
634 | name: 'pdfTeX',
|
635 | category: 'foo',
|
636 | source: {
|
637 | file: sourceName,
|
638 | range: {
|
639 | start: 49,
|
640 | end: 49
|
641 | }
|
642 | },
|
643 | text: '"bar"\nThe blind spot behind a submarine which makes a good hidding spot for other submarines.',
|
644 | log: {
|
645 | file: logName,
|
646 | range: {
|
647 | start: 309,
|
648 | end: 314
|
649 | }
|
650 | }
|
651 | }, {
|
652 | severity: 'error',
|
653 | name: 'pdfTeX',
|
654 | category: 'LaTeX',
|
655 | text: 'File `sub/wibble.tex\' not found',
|
656 | source: {
|
657 | file: sourceName
|
658 | },
|
659 | log: {
|
660 | file: logName,
|
661 | range: {
|
662 | start: 318,
|
663 | end: 318
|
664 | }
|
665 | }
|
666 | }, {
|
667 | severity: 'error',
|
668 | name: 'pdfTeX',
|
669 | text: 'Emergency stop',
|
670 | log: {
|
671 | file: logName,
|
672 | range: {
|
673 | start: 324,
|
674 | end: 324
|
675 | }
|
676 | },
|
677 | source: {
|
678 | file: sourceName,
|
679 | range: {
|
680 | start: 54,
|
681 | end: 54
|
682 | }
|
683 | }
|
684 | }]
|
685 | const parsedLogPath = 'error-warning.log-ParsedLaTeXLog'
|
686 |
|
687 | await rule.parse()
|
688 |
|
689 | const parsedLog: ?File = await rule.getFile(parsedLogPath)
|
690 |
|
691 | expect(parsedLog).toBeDefined()
|
692 | if (!parsedLog) return
|
693 |
|
694 | expect(parsedLog.value).toBeDefined()
|
695 | if (!parsedLog.value) return
|
696 |
|
697 | expect(parsedLog.value.messages).toEqual(messages)
|
698 |
|
699 | done()
|
700 | })
|
701 | })
|