1
- const isTap = / ^ # T A P / m;
2
- const finalTestNumber = / ^ 1 ..( [ 0 - 9 + ] ) $ / m;
3
- const testError = / ^ # E \s + ( .+ ) $ / m;
1
+ const regex = {
2
+ isTap : / ^ # T A P / m,
3
+ test : / ^ [ n o t ] ? o k [ 0 - 9 ] + - / m,
4
+ finalTest : / ^ 1 ..( [ 0 - 9 + ] ) $ / m,
5
+ error : / ^ # E \s + ( .+ ) $ / m,
6
+ log : / ^ (? ! # T A P ) (? ! ( n o t ) ? o k [ 0 - 9 ] + - ) (? ! 1 ..[ 0 - 9 ] + ) (? ! # E \s ) ( .* ) $ /
7
+ } ;
4
8
5
- function formatFailureMessage ( message : string ) : string {
9
+ function formatFeedback ( message : string ) : string {
6
10
return message . split ( '_' ) . join ( ' ' ) ;
7
11
}
8
12
13
+ function log ( data : string ) : void {
14
+ var logs = data . match ( regex . log ) ;
15
+ if ( logs && logs . length > 0 ) {
16
+ logs . forEach ( ( line : string ) => {
17
+ try {
18
+ console . dir ( JSON . parse ( JSON . stringify ( line ) ) ) ;
19
+ } catch ( e ) {
20
+ console . log ( data ) ;
21
+ }
22
+ } ) ;
23
+ }
24
+ }
25
+
9
26
export default function parseTap ( data : string ) : ParseFinal {
10
27
11
- if ( ! data || ! data . match ( isTap ) ) {
28
+ // capture any abnormal data as a log
29
+ log ( data ) ;
30
+
31
+ if ( ! data || ! data . match ( regex . isTap ) ) {
12
32
console . log ( 'No TAP output: ' , data ) ;
13
33
return ;
14
34
}
15
35
16
- if ( ! data . match ( finalTestNumber ) ) {
36
+ if ( ! data . match ( regex . finalTest ) ) {
17
37
console . log ( 'Could not parse final test number: ' , data ) ;
18
38
return ;
19
39
}
20
- let finalTest : number = parseInt ( data . match ( finalTestNumber ) [ 1 ] , 10 ) ;
40
+
41
+ let finalTest : number = parseInt ( data . match ( regex . finalTest ) [ 1 ] , 10 ) ;
21
42
22
43
let final : ParseFinal = null ;
23
44
24
- if ( data . match ( testError ) ) {
45
+ if ( data . match ( regex . error ) ) {
25
46
26
- // fail
47
+ // first FAILing test
27
48
28
49
let failingLineRegex = new RegExp ( `^not ok ${ finalTest } - (.+)$` , 'm' ) ;
29
50
let line : string = data . match ( failingLineRegex ) [ 1 ] ;
@@ -36,21 +57,21 @@ export default function parseTap(data: string): ParseFinal {
36
57
console . log ( 'No matching taskPosition' , data ) ;
37
58
}
38
59
39
- let message : string = formatFailureMessage ( line . match ( / \. t e s t _ ( .+ ) $ / ) [ 1 ] ) ;
60
+ let message : string = formatFeedback ( line . match ( / \. t e s t _ ( .+ ) $ / ) [ 1 ] ) ;
40
61
if ( ! message || typeof message !== 'string' ) {
41
62
console . log ( 'Error with test. There is no valid test message: ' , data ) ;
42
63
message = '' ;
43
64
}
44
65
45
66
final = {
46
67
completed : false ,
47
- msg : formatFailureMessage ( message ) ,
68
+ msg : formatFeedback ( message ) ,
48
69
taskPosition : taskPosition - 1 ,
49
70
timedOut : false // TODO
50
71
} ;
51
72
} else {
52
73
53
- // all pass
74
+ // all tests PASS
54
75
55
76
let finalPassRegex = new RegExp ( `^ok ${ finalTest } - (.+)$` , 'm' ) ;
56
77
let line : string = data . match ( finalPassRegex ) [ 1 ] ;
0 commit comments