diff options
Diffstat (limited to 'addon-sdk/source/bin/node-scripts/test.docs.js')
-rw-r--r-- | addon-sdk/source/bin/node-scripts/test.docs.js | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/addon-sdk/source/bin/node-scripts/test.docs.js b/addon-sdk/source/bin/node-scripts/test.docs.js new file mode 100644 index 000000000..e6aef516d --- /dev/null +++ b/addon-sdk/source/bin/node-scripts/test.docs.js @@ -0,0 +1,145 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +"use strict"; + +var createHash = require('crypto').createHash; +var fs = require("fs"); +var fsExtra = require("fs-extra") +var path = require("path"); +var Promise = require("promise"); +var chai = require("chai"); +var expect = chai.expect; +var teacher = require("teacher"); + +var rootURI = path.join(__dirname, "..", ".."); + +// get a list of words that fail spell check but are still acceptable +var NEW_WORDS = fs.readFileSync(path.join(__dirname, "words.txt")).toString().trim().split("\n"); + +var CACHE_PATH = path.join(__dirname, "..", "..", "cache", "spellchecks.json"); + +var CACHE = {}; + +try { + CACHE = JSON.parse(fs.readFileSync(CACHE_PATH).toString()); +} +catch (e) {} + +function md5(str) { + return createHash("md5").update(str).digest("utf8"); +} + +function addCacheHash(hash) { + CACHE[hash] = true; + fsExtra.ensureFileSync(CACHE_PATH); + fsExtra.writeJSONSync(CACHE_PATH, CACHE); +} + +describe("Spell Checking", function () { + it("Spellcheck CONTRIBUTING.md", function (done) { + var readme = path.join(rootURI, "CONTRIBUTING.md"); + + fs.readFile(readme, function (err, data) { + if (err) { + throw err; + } + var text = data.toString(); + var hash = md5(text); + + // skip this test if we know we have done the + // exact same test with positive results before + if (CACHE[hash]) { + expect(CACHE[hash]).to.be.equal(true); + return done(); + } + + teacher.check(text, function(err, data) { + expect(err).to.be.equal(null); + + var results = data || []; + results = results.filter(function(result) { + if (NEW_WORDS.indexOf(result.string.toLowerCase()) != -1) { + return false; + } + + // ignore anything that starts with a dash + if (result.string[0] == "-") { + return false; + } + + if (!(new RegExp(result.string)).test(text)) { + return false; + } + + return true; + }) + + if (results.length > 0) { + console.log(results); + } + else { + addCacheHash(hash); + } + + expect(results.length).to.be.equal(0); + + setTimeout(done, 500); + }); + }); + }); + + it("Spellcheck README.md", function (done) { + var readme = path.join(rootURI, "README.md"); + + fs.readFile(readme, function (err, data) { + if (err) { + throw err; + } + var text = data.toString(); + var hash = md5(text); + + // skip this test if we know we have done the + // exact same test with positive results before + if (CACHE[hash]) { + expect(CACHE[hash]).to.be.equal(true); + return done(); + } + + teacher.check(text, function(err, data) { + expect(err).to.be.equal(null); + + var results = data || []; + results = results.filter(function(result) { + if (NEW_WORDS.indexOf(result.string.toLowerCase()) != -1) { + return false; + } + + // ignore anything that starts with a dash + if (result.string[0] == "-") { + return false; + } + + // ignore anything that we don't find in the original text, + // for some reason "bootstrap.js" becomes "bootstrapjs". + if (!(new RegExp(result.string)).test(text)) { + return false; + } + + return true; + }) + + if (results.length > 0) { + console.log(results); + } + else { + addCacheHash(hash); + } + + expect(results.length).to.be.equal(0); + + done(); + }); + }); + }); +}); |