From 00a278133964e70904f6e9bdec9a488a4902b28c Mon Sep 17 00:00:00 2001 From: Anders Ekdahl Date: Sat, 7 Mar 2015 19:53:46 +0100 Subject: [PATCH] fix(preprocessor): Lookup patterns once invoked Don't lookup the list of patterns of files to preprocess until the preprocessor is called. This because patterns might be added after the preprocessor is created, and those will be missed if the patterns are looked up too early. Closes #1340 --- lib/preprocessor.js | 2 +- test/unit/preprocessor.spec.coffee | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/lib/preprocessor.js b/lib/preprocessor.js index c7889cc60..c19db9d80 100644 --- a/lib/preprocessor.js +++ b/lib/preprocessor.js @@ -30,10 +30,10 @@ var isBinary = Object.create(null); // TODO(vojta): instantiate preprocessors at the start to show warnings immediately var createPreprocessor = function(config, basePath, injector) { - var patterns = Object.keys(config); var alreadyDisplayedWarnings = Object.create(null); return function(file, done) { + var patterns = Object.keys(config); var thisFileIsBinary = isBinary[path.extname(file.originalPath)]; var preprocessors = []; var nextPreprocessor = function(error, content) { diff --git a/test/unit/preprocessor.spec.coffee b/test/unit/preprocessor.spec.coffee index ae8cedc94..8cda0d3aa 100644 --- a/test/unit/preprocessor.spec.coffee +++ b/test/unit/preprocessor.spec.coffee @@ -39,6 +39,26 @@ describe 'preprocessor', -> done() + it 'should check patterns after creation when invoked', (done) -> + fakePreprocessor = sinon.spy (content, file, done) -> + file.path = file.path + '-preprocessed' + done null, 'new-content' + + injector = new di.Injector [{'preprocessor:fake': ['factory', -> fakePreprocessor]}] + config = {'**/*.txt': ['fake']} + pp = m.createPreprocessor config, null, injector + + file = {originalPath: '/some/a.js', path: 'path'} + + config['**/*.js'] = ['fake'] + + pp file, -> + expect(fakePreprocessor).to.have.been.called + expect(file.path).to.equal 'path-preprocessed' + expect(file.content).to.equal 'new-content' + done() + + it 'should ignore not matching file', (done) -> fakePreprocessor = sinon.spy (content, file, done) -> done null, ''