diff --git a/lib/cli-engine.js b/lib/cli-engine.js index 2d9299339e6..c878778b680 100644 --- a/lib/cli-engine.js +++ b/lib/cli-engine.js @@ -457,10 +457,6 @@ function CLIEngine(options) { */ this._fileCache = fileEntryCache.create(cacheFile); - if (!this.options.cache) { - this._fileCache.destroy(); - } - // load in additional rules if (this.options.rulePaths) { var cwd = this.options.cwd; @@ -665,6 +661,8 @@ CLIEngine.prototype = { // move to the next file return; } + } else { + fileCache.destroy(); } debug("Processing " + filename); diff --git a/tests/lib/cli-engine.js b/tests/lib/cli-engine.js index 97871f3a9e8..d28ef362d00 100644 --- a/tests/lib/cli-engine.js +++ b/tests/lib/cli-engine.js @@ -1774,6 +1774,7 @@ describe("CLIEngine", function() { assert.isFalse(fs.existsSync(cacheFile), "the cache for eslint was deleted since last run did not used the cache"); }); + it("should not store in the cache a file that failed the test", function() { var cacheFile = getFixturePath(".eslintcache"); @@ -1812,6 +1813,95 @@ describe("CLIEngine", function() { assert.deepEqual(result, cachedResult, "result is the same with or without cache"); }); + it("should not delete cache when executing on text", function() { + var cacheFile = getFixturePath(".eslintcache"); + + engine = new CLIEngine({ + cwd: path.join(fixtureDir, ".."), + useEslintrc: false, + cacheFile: cacheFile, + rules: { + "no-console": 0, + "no-unused-vars": 2 + }, + extensions: ["js"] + }); + + assert.isTrue(fs.existsSync(cacheFile), "the cache for eslint exists"); + + engine.executeOnText("var foo = 'bar';"); + + assert.isTrue(fs.existsSync(cacheFile), "the cache for eslint still exists"); + }); + + it("should not delete cache when executing on text with a provided filename", function() { + var cacheFile = getFixturePath(".eslintcache"); + + engine = new CLIEngine({ + cwd: path.join(fixtureDir, ".."), + useEslintrc: false, + cacheFile: cacheFile, + rules: { + "no-console": 0, + "no-unused-vars": 2 + }, + extensions: ["js"] + }); + + assert.isTrue(fs.existsSync(cacheFile), "the cache for eslint exists"); + + engine.executeOnText("var bar = foo;", "fixtures/passing.js"); + + assert.isTrue(fs.existsSync(cacheFile), "the cache for eslint still exists"); + }); + + it("should not delete cache when executing on files with --cache flag", function() { + var cacheFile = getFixturePath(".eslintcache"); + + engine = new CLIEngine({ + cwd: path.join(fixtureDir, ".."), + useEslintrc: false, + cache: true, + cacheFile: cacheFile, + rules: { + "no-console": 0, + "no-unused-vars": 2 + }, + extensions: ["js"] + }); + + var file = getFixturePath("cli-engine", "console.js"); + + assert.isTrue(fs.existsSync(cacheFile), "the cache for eslint exists"); + + engine.executeOnFiles([file]); + + assert.isTrue(fs.existsSync(cacheFile), "the cache for eslint still exists"); + }); + + it("should delete cache when executing on files without --cache flag", function() { + var cacheFile = getFixturePath(".eslintcache"); + + engine = new CLIEngine({ + cwd: path.join(fixtureDir, ".."), + useEslintrc: false, + cacheFile: cacheFile, + rules: { + "no-console": 0, + "no-unused-vars": 2 + }, + extensions: ["js"] + }); + + var file = getFixturePath("cli-engine", "console.js"); + + assert.isTrue(fs.existsSync(cacheFile), "the cache for eslint exists"); + + engine.executeOnFiles([file]); + + assert.isFalse(fs.existsSync(cacheFile), "the cache for eslint has been deleted"); + }); + describe("cacheFile", function() { it("should use the specified cache file", function() { var customCacheFile = path.resolve(".cache/custom-cache");