[79a0317] | 1 | chai = require 'chai'
|
---|
| 2 | PrettyError = require '../src/PrettyError'
|
---|
| 3 | defaultStyle = require '../src/defaultStyle'
|
---|
| 4 |
|
---|
| 5 | chai.should()
|
---|
| 6 |
|
---|
| 7 | isFormatted = (exc) ->
|
---|
| 8 | exc.stack.indexOf(' \u001b[0m\u001b[97m\u001b[41m') is 0
|
---|
| 9 |
|
---|
| 10 | error = (what) ->
|
---|
| 11 | if typeof what is 'string'
|
---|
| 12 | return error -> throw Error what
|
---|
| 13 |
|
---|
| 14 | else if what instanceof Function
|
---|
| 15 | try
|
---|
| 16 | do what
|
---|
| 17 | catch e
|
---|
| 18 | return e
|
---|
| 19 |
|
---|
| 20 | throw Error "bad argument for error"
|
---|
| 21 |
|
---|
| 22 | describe "PrettyError", ->
|
---|
| 23 | describe "constructor()", ->
|
---|
| 24 | it "should work", ->
|
---|
| 25 | new PrettyError
|
---|
| 26 |
|
---|
| 27 | describe "getObject", ->
|
---|
| 28 | it "should return a string", ->
|
---|
| 29 | p = new PrettyError
|
---|
| 30 | p.getObject(error "hello").should.be.an 'object'
|
---|
| 31 |
|
---|
| 32 | describe "style", ->
|
---|
| 33 | it "should, by default, return the contents in `default-style`", ->
|
---|
| 34 | p = new PrettyError
|
---|
| 35 | p.style.should.eql defaultStyle()
|
---|
| 36 |
|
---|
| 37 | it "should return different contents after appending some styles", ->
|
---|
| 38 | p = new PrettyError
|
---|
| 39 | p.appendStyle 'some selector': 'display': 'block'
|
---|
| 40 | p.style.should.not.eql defaultStyle()
|
---|
| 41 |
|
---|
| 42 | describe "render()", ->
|
---|
| 43 | it "should work", ->
|
---|
| 44 | p = new PrettyError
|
---|
| 45 | p.skipNodeFiles()
|
---|
| 46 | p.appendStyle 'pretty-error': marginLeft: 4
|
---|
| 47 |
|
---|
| 48 | e = error -> "a".should.equal "b"
|
---|
| 49 | console.log p.render e, no
|
---|
| 50 |
|
---|
| 51 | e2 = error -> Array.split(Object)
|
---|
| 52 | console.log p.render e2, no
|
---|
| 53 |
|
---|
| 54 | e3 = "Plain error message"
|
---|
| 55 | console.log p.render e3, no
|
---|
| 56 |
|
---|
| 57 | e4 =
|
---|
| 58 | message: "Custom error message"
|
---|
| 59 | kind: "Custom Error"
|
---|
| 60 |
|
---|
| 61 | console.log p.render e4, no
|
---|
| 62 |
|
---|
| 63 | e5 =
|
---|
| 64 | message: "Error with custom stack"
|
---|
| 65 | stack: ['line one', 'line two']
|
---|
| 66 | wrapper: 'UnhandledRejection'
|
---|
| 67 |
|
---|
| 68 | console.log p.render e5, no
|
---|
| 69 |
|
---|
| 70 | e6 = error -> PrettyError.someNonExistingFuncion()
|
---|
| 71 | console.log p.render e6, no
|
---|
| 72 |
|
---|
| 73 | it.skip "should render without colors if pe._useColors is false", ->
|
---|
| 74 | p = new PrettyError
|
---|
| 75 | p.withoutColors()
|
---|
| 76 | p.skipNodeFiles()
|
---|
| 77 | p.appendStyle 'pretty-error': marginLeft: 4
|
---|
| 78 |
|
---|
| 79 | e = error -> "a".should.equal "b"
|
---|
| 80 | console.log p.render e, no
|
---|
| 81 |
|
---|
| 82 | describe "start()", ->
|
---|
| 83 | prepareStackTrace = null
|
---|
| 84 |
|
---|
| 85 | beforeEach ->
|
---|
| 86 | {prepareStackTrace} = Error
|
---|
| 87 | Error.prepareStackTrace = null
|
---|
| 88 |
|
---|
| 89 | afterEach ->
|
---|
| 90 | Error.prepareStackTrace = prepareStackTrace
|
---|
| 91 |
|
---|
| 92 | it "throws unformatted error when not started", ->
|
---|
| 93 | try
|
---|
| 94 | throw new Error "foo bar"
|
---|
| 95 | catch exc
|
---|
| 96 |
|
---|
| 97 | isFormatted(exc).should.be.eql false
|
---|
| 98 |
|
---|
| 99 | it "throws formatted the error", ->
|
---|
| 100 | PrettyError.start()
|
---|
| 101 |
|
---|
| 102 | try
|
---|
| 103 | throw new Error "foo bar"
|
---|
| 104 | catch exc
|
---|
| 105 |
|
---|
| 106 | isFormatted(exc).should.be.eql true
|
---|
| 107 | exc.stack.split(/\n/g).length.should.be.above 2
|
---|
| 108 |
|
---|
| 109 | PrettyError.stop()
|
---|