spectacular
Version:
Advanced BDD framework for CoffeeScript and JavaScript
83 lines (60 loc) • 2.51 kB
text/coffeescript
## ConsoleReporter
class spectacular.ConsoleReporter
spectacular.EventDispatcher
: (options) ->
reporter = new ConsoleReporter options
f = spectacular.formatters.console
reporter.resultFormatters.push f.ResumeFormatter if options.resume
reporter.resultFormatters.push f.ProfileFormatter if options.profile
reporter.resultFormatters.push f.DurationFormatter
reporter.resultFormatters.push f.SeedFormatter
reporter.resultFormatters.push f.ResultsFormatter
reporter.progressFormatters['documentation'] = f.DocumentationFormatter
reporter.progressFormatters['progress'] = f.ProgressFormatter
reporter.exampleResultsFormatters.push f.ExampleResultsFormatter
reporter
constructor: () ->
= []
= []
= {}
onMessage: (event) => event
onResult: (event) =>
example = event.target
example
onEnd: (event) =>
runnerResults = event.target
runner = runnerResults.runner
options =
printResult = (example, i) =>
res = ''
promise = spectacular.Promise.unit('')
.forEach (formatter) ->
promise = promise.then (result) ->
res += result
new formatter(example, options, i+1).format()
promise.then (result) ->
res + result
errors = runnerResults.errors.map printResult
failures = runnerResults.failures.map printResult
allResults = ['\n\n']
promise = spectacular.Promise.unit([])
if errors.length > 0
promise = promise.then(-> spectacular.Promise.all(errors))
if failures.length > 0
promise = promise.then (results) ->
allResults = allResults.concat results
spectacular.Promise.all(failures)
if .length > 0
promise = promise.then (results) =>
allResults = allResults.concat results
spectacular.Promise.all .map (formatter) ->
new formatter(runner, runnerResults).format()
promise.then (results) =>
allResults = allResults.concat results
new spectacular.Event 'report', allResults.join('') + '\n\n'
.fail (reason) ->
console.log reason.stack
printExampleResult: (example) =>
state = example.result.state
res = new [.format](example, ).format()
new spectacular.Event 'message', res if res?