11import parser from './parser'
22
33describe ( 'parser' , ( ) => {
4- test ( 'should pass single success' , ( ) => {
5- const example = `
4+ describe ( 'mocha' , ( ) => {
5+ test ( 'should pass single success' , ( ) => {
6+ const example = `
671..1
78ok 1 - Should pass
89`
9- expect ( parser ( example ) ) . toEqual ( {
10- ok : true ,
11- passed : [ { message : 'Should pass' } ] ,
12- failed : [ ] ,
13- logs : [ ] ,
14- summary : { 'Should pass' : true } ,
10+ expect ( parser ( example ) ) . toEqual ( {
11+ ok : true ,
12+ passed : [ { message : 'Should pass' } ] ,
13+ failed : [ ] ,
14+ logs : [ ] ,
15+ summary : { 'Should pass' : true } ,
16+ } )
1517 } )
16- } )
17- test ( 'should detect multiple successes' , ( ) => {
18- const example = `
18+ test ( 'should detect multiple successes' , ( ) => {
19+ const example = `
19201..2
2021ok 1 - Should pass
2122ok 2 - Should also pass
2223`
23- const result = parser ( example )
24- expect ( result ) . toEqual ( {
25- ok : true ,
26- passed : [ { message : 'Should pass' } , { message : 'Should also pass' } ] ,
27- failed : [ ] ,
28- logs : [ ] ,
29- summary : {
30- 'Should pass' : true ,
31- 'Should also pass' : true ,
32- } ,
24+ const result = parser ( example )
25+ expect ( result ) . toEqual ( {
26+ ok : true ,
27+ passed : [ { message : 'Should pass' } , { message : 'Should also pass' } ] ,
28+ failed : [ ] ,
29+ logs : [ ] ,
30+ summary : {
31+ 'Should pass' : true ,
32+ 'Should also pass' : true ,
33+ } ,
34+ } )
3335 } )
34- } )
35- test ( 'should detect failure if no tests passed' , ( ) => {
36- const example = `
36+ test ( 'should detect failure if no tests passed' , ( ) => {
37+ const example = `
3738# Starting...
3839# 1 test suites found.
3940
4041# FAIL __tests__/sum.test.js
4142
4243not ok 1 ● sum › should add two numbers together
4344`
44- expect ( parser ( example ) . ok ) . toBe ( false )
45- } )
46- test ( 'should detect single failure among successes' , ( ) => {
47- const example = `
45+ expect ( parser ( example ) . ok ) . toBe ( false )
46+ } )
47+ test ( 'should detect single failure among successes' , ( ) => {
48+ const example = `
48491..3
4950ok 1 - Should pass
5051not ok 2 - This one fails
5152ok 3 - Also passes
5253`
53- expect ( parser ( example ) . ok ) . toBe ( false )
54- } )
55- test ( 'should return failure message' , ( ) => {
56- const example = `
54+ expect ( parser ( example ) . ok ) . toBe ( false )
55+ } )
56+ test ( 'should return failure message' , ( ) => {
57+ const example = `
57581..4
5859ok 1 - Should pass
5960not ok 2 - First to fail
6061ok 3 - Also passes
6162not ok 4 - Second to fail
6263`
63- expect ( parser ( example ) . failed ) . toEqual ( [ { message : 'First to fail' } , { message : 'Second to fail' } ] )
64- } )
64+ expect ( parser ( example ) . failed ) . toEqual ( [ { message : 'First to fail' } , { message : 'Second to fail' } ] )
65+ } )
6566
66- test ( 'should parse mocha tap example' , ( ) => {
67- const example = `
67+ test ( 'should parse mocha tap example' , ( ) => {
68+ const example = `
68691..3
6970ok 1 itemList data should not be changed
7071ok 2 sumItems shouldn't return NaN
@@ -74,11 +75,11 @@ ok 3 sumItems should total numbers accurately
7475# fail 0
7576# skip 0
7677`
77- expect ( parser ( example ) . ok ) . toBe ( true )
78- } )
78+ expect ( parser ( example ) . ok ) . toBe ( true )
79+ } )
7980
80- test ( 'should return failure message for mocha tap example' , ( ) => {
81- const example = `
81+ test ( 'should return failure message for mocha tap example' , ( ) => {
82+ const example = `
82831..3
8384ok 1 itemList data should not be changed
8485not ok 2 sumItems shouldn't return NaN
@@ -88,10 +89,10 @@ ok 3 sumItems should total numbers accurately
8889# fail 1
8990# skip 0
9091`
91- expect ( parser ( example ) . failed ) . toEqual ( [ { message : "sumItems shouldn't return NaN" } ] )
92- } )
93- test ( 'should capture single error details' , ( ) => {
94- const example = `
92+ expect ( parser ( example ) . failed ) . toEqual ( [ { message : "sumItems shouldn't return NaN" } ] )
93+ } )
94+ test ( 'should capture single error details' , ( ) => {
95+ const example = `
9596not ok 1 package.json should have a valid "author" key
9697# AssertionError [ERR_ASSERTION]: no "author" key provided
9798# at Context.<anonymous> (test/packagejson.test.js:11:12)
@@ -101,14 +102,14 @@ not ok 1 package.json should have a valid "author" key
101102# fail 1
102103# skip 0
103104`
104- const result = parser ( example )
105- expect ( result . failed [ 0 ] . message ) . toBe ( 'package.json should have a valid "author" key' )
106- expect ( result . failed [ 0 ] . details ) . toBe ( `AssertionError [ERR_ASSERTION]: no "author" key provided
105+ const result = parser ( example )
106+ expect ( result . failed [ 0 ] . message ) . toBe ( 'package.json should have a valid "author" key' )
107+ expect ( result . failed [ 0 ] . details ) . toBe ( `AssertionError [ERR_ASSERTION]: no "author" key provided
107108at Context.<anonymous> (test/packagejson.test.js:11:12)
108109at processImmediate (internal/timers.js:439:21)` )
109- } )
110- test ( 'should capture multiple error details' , ( ) => {
111- const example = `
110+ } )
111+ test ( 'should capture multiple error details' , ( ) => {
112+ const example = `
112113not ok 1 package.json should have a valid "author" key
113114# AssertionError [ERR_ASSERTION]: no "author" key provided
114115# at Context.<anonymous> (test/packagejson.test.js:11:12)
@@ -120,16 +121,16 @@ not ok 2 package.json should have a valid "description" key
120121# fail 1
121122# skip 0
122123`
123- const result = parser ( example )
124- expect ( result . failed [ 0 ] . message ) . toBe ( 'package.json should have a valid "author" key' )
125- expect ( result . failed [ 0 ] . details ) . toBe ( `AssertionError [ERR_ASSERTION]: no "author" key provided
124+ const result = parser ( example )
125+ expect ( result . failed [ 0 ] . message ) . toBe ( 'package.json should have a valid "author" key' )
126+ expect ( result . failed [ 0 ] . details ) . toBe ( `AssertionError [ERR_ASSERTION]: no "author" key provided
126127at Context.<anonymous> (test/packagejson.test.js:11:12)
127128at processImmediate (internal/timers.js:439:21)` )
128- expect ( result . failed [ 1 ] . message ) . toBe ( 'package.json should have a valid "description" key' )
129- expect ( result . failed [ 1 ] . details ) . toBe ( `AssertionError [ERR_ASSERTION]: no "description" key provided` )
130- } )
131- test ( 'should capture multiple error details between successes' , ( ) => {
132- const example = `
129+ expect ( result . failed [ 1 ] . message ) . toBe ( 'package.json should have a valid "description" key' )
130+ expect ( result . failed [ 1 ] . details ) . toBe ( `AssertionError [ERR_ASSERTION]: no "description" key provided` )
131+ } )
132+ test ( 'should capture multiple error details between successes' , ( ) => {
133+ const example = `
133134ok 1 first passing test
134135not ok 2 package.json should have a valid "author" key
135136# AssertionError [ERR_ASSERTION]: no "author" key provided
@@ -144,16 +145,16 @@ ok 5 some passing test
144145# fail 1
145146# skip 0
146147`
147- const result = parser ( example )
148- expect ( result . failed [ 0 ] . message ) . toBe ( 'package.json should have a valid "author" key' )
149- expect ( result . failed [ 0 ] . details ) . toBe ( `AssertionError [ERR_ASSERTION]: no "author" key provided
148+ const result = parser ( example )
149+ expect ( result . failed [ 0 ] . message ) . toBe ( 'package.json should have a valid "author" key' )
150+ expect ( result . failed [ 0 ] . details ) . toBe ( `AssertionError [ERR_ASSERTION]: no "author" key provided
150151at Context.<anonymous> (test/packagejson.test.js:11:12)
151152at processImmediate (internal/timers.js:439:21)` )
152- expect ( result . failed [ 1 ] . message ) . toBe ( 'package.json should have a valid "description" key' )
153- expect ( result . failed [ 1 ] . details ) . toBe ( `AssertionError [ERR_ASSERTION]: no "description" key provided` )
154- } )
155- test ( 'should capture logs' , ( ) => {
156- const example = `
153+ expect ( result . failed [ 1 ] . message ) . toBe ( 'package.json should have a valid "description" key' )
154+ expect ( result . failed [ 1 ] . details ) . toBe ( `AssertionError [ERR_ASSERTION]: no "description" key provided` )
155+ } )
156+ test ( 'should capture logs' , ( ) => {
157+ const example = `
1571581..2
158159ok 1 package.json should have "express" installed
159160log 1
@@ -167,23 +168,104 @@ not ok 2 server should log "Hello World"
167168# fail 1
168169# skip 0
169170`
170- expect ( parser ( example ) ) . toEqual ( {
171- ok : false ,
172- passed : [ { message : 'package.json should have "express" installed' } ] ,
173- failed : [
174- {
175- message : 'server should log "Hello World"' ,
176- details : `AssertionError [ERR_ASSERTION]: \"Hello World was not logged
171+ expect ( parser ( example ) ) . toEqual ( {
172+ ok : false ,
173+ passed : [ { message : 'package.json should have "express" installed' } ] ,
174+ failed : [
175+ {
176+ message : 'server should log "Hello World"' ,
177+ details : `AssertionError [ERR_ASSERTION]: \"Hello World was not logged
177178at Context.<anonymous> (test/server.test.js:15:12)
178179at processImmediate (internal/timers.js:439:21)` ,
179- logs : [ 'log 1' , 'log 2' ] ,
180+ logs : [ 'log 1' , 'log 2' ] ,
181+ } ,
182+ ] ,
183+ logs : [ 'log 1' , 'log 2' ] ,
184+ summary : {
185+ 'package.json should have "express" installed' : true ,
186+ 'server should log "Hello World"' : false ,
187+ } ,
188+ } )
189+ } )
190+ } )
191+ describe ( 'tap.py' , ( ) => {
192+ test ( 'should pass with success messages' , ( ) => {
193+ const example = `
194+ # TAP results for MathTest
195+ ok 1 test_add_no_numbers (tests.math_test.MathTest)
196+ ok 2 test_add_one_number (tests.math_test.MathTest)
197+ ok 3 test_add_three_numbers (tests.math_test.MathTest)
198+ ok 4 test_add_two_numbers (tests.math_test.MathTest)
199+ 1..4
200+ `
201+ expect ( parser ( example ) ) . toEqual ( {
202+ ok : true ,
203+ passed : [
204+ { message : 'add no numbers' } ,
205+ { message : 'add one number' } ,
206+ { message : 'add three numbers' } ,
207+ { message : 'add two numbers' } ,
208+ ] ,
209+ failed : [ ] ,
210+ logs : [ ] ,
211+ summary : {
212+ 'add no numbers' : true ,
213+ 'add one number' : true ,
214+ 'add three numbers' : true ,
215+ 'add two numbers' : true ,
216+ } ,
217+ } )
218+ } )
219+ test ( 'should handle fail messages' , ( ) => {
220+ const example = `
221+ # TAP results for MathTest
222+ not ok 1 test_add_no_numbers (tests.math_test.MathTest)
223+ # Traceback (most recent call last):
224+ # Fail Message
225+ # AssertionError: 42 != 0 : Should return 0 with no params
226+ 1..1`
227+ expect ( parser ( example ) ) . toEqual ( {
228+ ok : false ,
229+ passed : [ ] ,
230+ failed : [
231+ {
232+ message : 'add no numbers' ,
233+ details :
234+ 'Traceback (most recent call last):\nFail Message\nAssertionError: 42 != 0 : Should return 0 with no params' ,
235+ } ,
236+ ] ,
237+ logs : [ ] ,
238+ summary : {
239+ 'add no numbers' : false ,
240+ } ,
241+ } )
242+ } )
243+ test ( 'should handle both success and fail messages' , ( ) => {
244+ const example = `
245+ # TAP results for MathTest
246+ ok 1 test_add_no_numbers (tests.math_test.MathTest)
247+ not ok 2 test_add_one_number (tests.math_test.MathTest)
248+ # Traceback (most recent call last):
249+ # Fail Message
250+ # AssertionError: 2 != 1 : Should add one number to 0
251+ 1..2
252+ `
253+ expect ( parser ( example ) ) . toEqual ( {
254+ ok : false ,
255+ passed : [ { message : 'add no numbers' } ] ,
256+ failed : [
257+ {
258+ message : 'add one number' ,
259+ details :
260+ 'Traceback (most recent call last):\nFail Message\nAssertionError: 2 != 1 : Should add one number to 0' ,
261+ } ,
262+ ] ,
263+ logs : [ ] ,
264+ summary : {
265+ 'add no numbers' : true ,
266+ 'add one number' : false ,
180267 } ,
181- ] ,
182- logs : [ 'log 1' , 'log 2' ] ,
183- summary : {
184- 'package.json should have "express" installed' : true ,
185- 'server should log "Hello World"' : false ,
186- } ,
268+ } )
187269 } )
188270 } )
189271} )
0 commit comments