bootcamp
Version:
A pure Sass testing framework in the style of Jasmine
102 lines (76 loc) • 2.1 kB
text/coffeescript
'use strict'
fs = require 'fs'
module.exports =
test: (filepath) ->
error = null
file = fs.readFileSync filepath, 'utf8'
###
# Get Camp
###
camp = file.match /\/\* >> Bootcamp >> \*\/((.|\n|\r)*)\/\* << Bootcamp << \*\//
unless camp?
return incomplete: true, error: 'No Test Suite Found'
else
camp = camp[1]
###
# Get Results
###
results = camp.match /Test Results \{((.|\n|\r)*)\}/
unless results?
return incomplete: true, error: 'No Test Results Found'
else
results = results[1]
###
# Get Specs
###
specs = camp.replace( results, '' ).replace( /Test Results \{\}|\{|\}|;|:/g, '' )
###
# method: getProperty
###
getProperty = (property, force) ->
values = results.match new RegExp property + ': ((.|\n|\r)*?);', 'g'
property = []
if force and !values? then return property
unless values?
error = incomplete: true, error: "No #{property} Found"
return false
else
for value in values
value = value.replace(/;/, '')
value = value.replace(/(.*:)/, '')
value = value.trim()
value = parseInt value unless isNaN value
property.push value
return property
###
# Get Properties
###
success = getProperty('Success').indexOf('true') > -1
stats = getProperty 'Stats'
tests = getProperty 'Tests'
asserts = getProperty 'Asserts'
passed = getProperty 'Passed'
failed = getProperty 'Failed'
skipped = getProperty 'Skipped'
errors = getProperty 'Error', true
###
# Return Any Errors
###
return error if error
###
# Return Final Values
###
return {
camp: camp
results: results
specs: specs
success: success
stats: stats
details: "#{tests} Tests, #{asserts} assertions, #{failed} failures, #{skipped} skipped"
tests: tests
asserts: asserts
passed: passed
failed: failed
skipped: skipped
errors: errors
}