coffeelint-multiple-callback
Version:
Coffeelint rule that checks for callbacks being called multiple times
109 lines (84 loc) • 2.52 kB
text/coffeescript
fs = require 'fs'
expect = require('chai').expect
CoffeeScript = require 'coffee-script'
Rule = require '../index'
_ = require 'lodash'
getFixtureAST = (fixture)->
source = fs.readFileSync("#{__dirname}/fixtures/#{fixture}.coffee").toString()
return CoffeeScript.nodes source
describe 'lint the things', ->
getErrors = (fixture)=>
= new Rule()
.errors = []
astApi =
config: use_strict: {}
createError: (e) -> e
.lintAST getFixtureAST(fixture), astApi
.errors.sort (a, b)->
return a.lineNumber > b.lineNumber
return
hasErrorAtLine = (line_number)=>
error_at_line = _.find .errors, (obj)->
obj.lineNumber is line_number
if error_at_line
return true
return false
checkFixtureForHits = (fixture)=>
fixture_source = fs.readFileSync("#{__dirname}/fixtures/#{fixture}.coffee").toString()
fixture_nodes = CoffeeScript.nodes fixture_source
= new Rule()
.errors = []
astApi =
config: use_strict: {}
createError: (e) -> e
.lintAST fixture_nodes, astApi
.errors.sort (a, b)->
return a.lineNumber > b.lineNumber
regex_is_hit = /#\s*HIT\s*$/i
_.each fixture_source.split('\n'), (line_content, key)=>
line_number = key + 1
if regex_is_hit.test line_content
expectHasErrorAtLine line_number
else
expectHasNoErrorAtLine line_number
return
return
expectHasErrorAtLine = (line_number)=>
has_err = hasErrorAtLine line_number
expect(has_err, "Could not find HIT at line #{line_number}").to.be.true
return
expectHasNoErrorAtLine = (line_number)=>
has_err = hasErrorAtLine line_number
expect(has_err, "Found unexpected HIT at line #{line_number}").to.be.false
return
it 'basic', =>
getErrors('basic')
# console.log .errors
checkFixtureForHits('basic')
return
it 'mocha', =>
getErrors('mocha')
# console.log .errors
checkFixtureForHits('mocha')
return
it 'express', =>
getErrors('express')
# console.log .errors
checkFixtureForHits('express')
return
it 'async', =>
getErrors('async')
# console.log .errors
checkFixtureForHits('async')
return
it 'lodash', =>
getErrors('lodash')
# console.log .errors
checkFixtureForHits('lodash')
return
it 'ifcb', =>
getErrors('ifcb')
# console.log .errors
checkFixtureForHits('ifcb')
return
return