diff --git a/lib/preprocessor.js b/lib/preprocessor.js index 3e4b3af..9d515e9 100644 --- a/lib/preprocessor.js +++ b/lib/preprocessor.js @@ -1,8 +1,10 @@ -var istanbul = require('istanbul'); +var istanbul = require('istanbul'), + ibrik = require('ibrik'); var createCoveragePreprocessor = function(logger, basePath, reporters) { var log = logger.create('preprocessor.coverage'); - var instrumenter = new istanbul.Instrumenter(); + var jsInstrumenter = new istanbul.Instrumenter(); + var coffeeInstrumenter = new ibrik.Instrumenter(); // if coverage reporter is not used, do not preprocess the files if (reporters.indexOf('coverage') === -1) { @@ -15,10 +17,14 @@ var createCoveragePreprocessor = function(logger, basePath, reporters) { log.debug('Processing "%s".', file.originalPath); var jsPath = file.originalPath.replace(basePath + '/', './'); + var instrumenter = jsPath.match(/\.coffee$/) ? coffeeInstrumenter : jsInstrumenter; + instrumenter.instrument(content, jsPath, function(err, instrumentedCode) { if(err) { log.error('%s\n at %s', err.message, file.originalPath); } + + file.path = file.path.replace(/\.coffee$/, '.js'); done(instrumentedCode); }); }; diff --git a/package.json b/package.json index 73b3db4..b7f7acd 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "author": "SATO taichi ", "dependencies": { "istanbul": "~0.1.41", + "ibrik": "~0.0.4", "dateformat": "~1.0.6" }, "peerDependencies": { diff --git a/test/preprocessor.spec.coffee b/test/preprocessor.spec.coffee index 7b527cc..59728b0 100644 --- a/test/preprocessor.spec.coffee +++ b/test/preprocessor.spec.coffee @@ -12,6 +12,12 @@ describe 'preprocessor', -> } ''' + ORIGINAL_COFFEE_CODE = ''' + if a + something() + else + other() + ''' mockLogger = create: -> error: -> throw new Error(util.format.apply util, arguments) @@ -50,3 +56,17 @@ describe 'preprocessor', -> vm.runInNewContext preprocessedCode, sandbox expect(sandbox.__coverage__).to.have.ownProperty './file.js' done() + + it 'should preprocess the coffee code', (done) -> + process = createPreprocessor mockLogger, '/base/path', ['coverage', 'progress'] + file = new File '/base/path/file.coffee' + + process ORIGINAL_COFFEE_CODE, file, (preprocessedCode) -> + sandbox = + a: true + something: -> + + vm.runInNewContext preprocessedCode, sandbox + expect(file.path).to.equal '/base/path/file.js' + expect(sandbox.__coverage__).to.have.ownProperty './file.coffee' + done()