зеркало из https://github.com/mozilla/gecko-dev.git
146 строки
3.7 KiB
JavaScript
146 строки
3.7 KiB
JavaScript
/* 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();
|
|
});
|
|
});
|
|
});
|
|
});
|