chai = require 'chai' PrettyError = require '../src/PrettyError' defaultStyle = require '../src/defaultStyle' chai.should() isFormatted = (exc) -> exc.stack.indexOf(' \u001b[0m\u001b[97m\u001b[41m') is 0 error = (what) -> if typeof what is 'string' return error -> throw Error what else if what instanceof Function try do what catch e return e throw Error "bad argument for error" describe "PrettyError", -> describe "constructor()", -> it "should work", -> new PrettyError describe "getObject", -> it "should return a string", -> p = new PrettyError p.getObject(error "hello").should.be.an 'object' describe "style", -> it "should, by default, return the contents in `default-style`", -> p = new PrettyError p.style.should.eql defaultStyle() it "should return different contents after appending some styles", -> p = new PrettyError p.appendStyle 'some selector': 'display': 'block' p.style.should.not.eql defaultStyle() describe "render()", -> it "should work", -> p = new PrettyError p.skipNodeFiles() p.appendStyle 'pretty-error': marginLeft: 4 e = error -> "a".should.equal "b" console.log p.render e, no e2 = error -> Array.split(Object) console.log p.render e2, no e3 = "Plain error message" console.log p.render e3, no e4 = message: "Custom error message" kind: "Custom Error" console.log p.render e4, no e5 = message: "Error with custom stack" stack: ['line one', 'line two'] wrapper: 'UnhandledRejection' console.log p.render e5, no e6 = error -> PrettyError.someNonExistingFuncion() console.log p.render e6, no it.skip "should render without colors if pe._useColors is false", -> p = new PrettyError p.withoutColors() p.skipNodeFiles() p.appendStyle 'pretty-error': marginLeft: 4 e = error -> "a".should.equal "b" console.log p.render e, no describe "start()", -> prepareStackTrace = null beforeEach -> {prepareStackTrace} = Error Error.prepareStackTrace = null afterEach -> Error.prepareStackTrace = prepareStackTrace it "throws unformatted error when not started", -> try throw new Error "foo bar" catch exc isFormatted(exc).should.be.eql false it "throws formatted the error", -> PrettyError.start() try throw new Error "foo bar" catch exc isFormatted(exc).should.be.eql true exc.stack.split(/\n/g).length.should.be.above 2 PrettyError.stop()