summaryrefslogtreecommitdiffstats
path: root/addon-sdk/source/bin/node-scripts/test.docs.js
diff options
context:
space:
mode:
Diffstat (limited to 'addon-sdk/source/bin/node-scripts/test.docs.js')
-rw-r--r--addon-sdk/source/bin/node-scripts/test.docs.js145
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();
+ });
+ });
+ });
+});