lawl-spec-reporter
Version:
Spec reporter for jasmine, based on jasmine-spec-reporter, outputs in LolSpeak
113 lines (89 loc) • 2.84 kB
text/coffeescript
require('colors')
String.prototype.__defineGetter__ 'stripTime', ->
this.replace /(\d+\.?\d*|\.\d+) SECZ/, '{time}'
typeIsArray = Array.isArray || ( value ) -> return {}.toString.call( value ) is '[object Array]'
equalOrMatch = (actual, expected) ->
expected == actual || (expected.test && expected.test(actual))
addMatchers = ->
beforeEach ->
jasmine.addMatchers
contains: ->
compare: (actual, sequence) ->
sequence = [sequence] unless typeIsArray sequence
i = 0
while i < actual.length - sequence.length + 1
j = 0
while j < sequence.length && equalOrMatch(actual[i + j], sequence[j])
j++
return pass: true if j == sequence.length
i++
pass: false
class Test
constructor: (, ) ->
init: ->
= []
= []
logInSummary = false
console.log = (stuff) =>
stuff = stuff.stripColors.stripTime
logInSummary = true if /^(EXECUTD|\*\*\*\*\*\*\*)/.test stuff
unless logInSummary
.push stuff
else
.push stuff
run: ->
env = new FakeEnv()
.jasmineStarted()
if
env.queue[0]
else
for suite in env.queue
.suiteStarted(suite)
suite
.suiteDone(suite)
.jasmineDone()
execSuite: (suite) ->
for item in suite.queue
if
.specStarted(item)
.specDone(item)
else
.suiteStarted(item)
item
.suiteDone(item)
isSpec: (it) ->
it.queue == undefined
hasOnlyOneSuite: (testFn) ->
(testFn.toString().match(/describe/g) || []).length == 1
class FakeEnv
constructor: (fn) ->
= []
fn.apply(@)
describe: (description, fn) ->
.push(new Suite(description, description, fn))
class Suite
constructor: (, , fn) ->
= []
fn.apply(@)
describe: (description, fn) ->
.push(new Suite(description, + ' ' + description, fn))
it: (description, fn) ->
.push(new Spec(description, + ' ' + description, fn))
xit: (description, fn) ->
spec = new Spec(description, + ' ' + description, fn)
spec.status = 'pending'
.push(spec)
class Spec
constructor: (, , fn) ->
= ''
= []
fn.apply(@)
passed: (message = '') ->
= 'passed'
failed: (message = '') ->
= 'failed'
.push {message, stack: 'Error: Expectation\n{Stacktrace}', passed: false}
global.Test = Test
global.addMatchers = addMatchers