cypress-accessibility-checker
Version:
Accessibility Checker for Cypress
148 lines (134 loc) • 4.89 kB
JavaScript
const { ACEngineManager } = require("./ACEngineManager");
const ACConfigManager = require("./common/config/ACConfigManager").ACConfigManager;
const ReporterManager = require("./common/report/ReporterManager").ReporterManager;
const BaselineManager = require("./common/report/BaselineManager").BaselineManager;
const fs = require("fs");
const path = require("path");
let loggerFunction = function (output) {
ACTasks.DEBUG && console.log(output);
};
let loggerCreate = function () {
return logger;
};
let logger = {
debug: loggerFunction,
info: loggerFunction,
error: loggerFunction,
warn: loggerFunction,
create: loggerCreate
};
class MyFS {
writeFileSync(filePath, data) {
let outFile = this.prepFileSync(filePath);
fs.writeFileSync(outFile, data);
}
prepFileSync(filePath) {
let outDir = path.resolve(ACTasks.Config.outputFolder);
let outFile = path.join(outDir, filePath);
if (!fs.existsSync(path.dirname(outFile))) {
fs.mkdirSync(path.dirname(outFile), { recursive: true });
}
return outFile;
}
log(...output) { console.debug(...output) }
info(...output) { console.info(...output) }
error(...output) { console.error(...output) }
loadBaseline(label) {
let baselineFile = path.join(path.join(process.cwd(), ACTasks.Config.baselineFolder), label+".json");
if (fs.existsSync(baselineFile)) {
return require(baselineFile);
}
return null;
}
getChecker() {
return ACEngineManager.getChecker();
}
}
let ACTasks = module.exports = {
DEBUG: false,
initializeConfig: () => {
if (ACTasks.initConfigOnce) return ACTasks.initConfigOnce;
ACTasks.DEBUG && console.log("START 'initialize' function");
return ACTasks.initConfigOnce = ACConfigManager.getConfig()
.then((config) => {
ACTasks.Config = config;
return config;
});
},
getConfig: () => {
return ACTasks.initializeConfig();
},
onRunComplete: () => {
ReporterManager.generateSummaries();
return true;
},
initialize: () => {
if (ACTasks.initOnce) {
return ACTasks.initOnce.then(() => {
if (!ACTasks.ace) {
ACTasks.initOnce = false;
return ACTasks.initialize();
}
})
}
return ACTasks.initOnce = ACTasks.initializeConfig().then(async () => {
if (ACTasks.Config.rulePack.includes("localhost")) {
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
}
// Specify if debug information should be printed or not
ACTasks.DEBUG = ACTasks.Config.DEBUG;
ACEngineManager.engineLoaded = false;
await ACEngineManager.loadEngine();
let absAPI = new MyFS();
let refactorMap = {}
let rules = ACEngineManager.getRulesSync();
if (rules) {
for (const rule of rules) {
if (rule.refactor) {
for (const key in rule.refactor) {
refactorMap[key] = rule;
}
}
}
}
ReporterManager.initialize(ACTasks.Config, absAPI, await ACEngineManager.getRulesets());
BaselineManager.initialize(ACTasks.Config, absAPI, refactorMap);
})
.then(() => {
ACTasks.DEBUG && console.log("END 'initialize' function");
})
},
/**
* This function is responsible for sending the scan results to the karma server accessibility-checker reporter. The
* accessibility-checker reporter is responsible for writing the results to a file. The reporter will also keep track of
* the summary results, on the server side.
*
* @param {Object} results - Provide the full results object which is to be reported/saved to file.
* refer to return in function "aChecker.buildReport" prolog
*
* @return N/A
*
* PRIVATE METHOD
*
* @memberOf this
*/
sendResultsToReporter: function (profile, startScan, url, title, label, results ) {
return ACTasks.initialize().then(() => {
return ReporterManager.addEngineReport(profile, startScan, url, title, label, results);
});
},
/**
* This function is responsible for printing the scan results to console.
*
* @param {Object} results - Provide the results from the scan.
*
* @return {String} resultsString - String representation of the results/violations.
*
* PUBLIC API
*
* @memberOf this
*/
stringifyResults: function (report) {
return ReporterManager.stringifyResults(report);
}
}