Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4442)

Unified Diff: chrome/test/data/webui/test_api.js

Issue 11363170: Add an accessibility audit test for WebUI pages (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: First, very incomplete pass at doing accessibility check in Javascript only Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/test/data/webui/test_api.js
diff --git a/chrome/test/data/webui/test_api.js b/chrome/test/data/webui/test_api.js
index 03c6721d51d55bf0baf4641caa2e6d9955c31802..5315213496cb072f1f26ba0a57030d43f4c7f107 100644
--- a/chrome/test/data/webui/test_api.js
+++ b/chrome/test/data/webui/test_api.js
@@ -122,6 +122,11 @@ var testing = {};
extraLibraries: [],
/**
+ * FIXME(aboxhall)
+ */
+ runA11yChecks: true,
+
+ /**
* Create a new class to handle |messageNames|, assign it to
* |this.mockHandler|, register its messages and return it.
* @return {Mock} Mock handler class assigned to |this.mockHandler|.
@@ -234,6 +239,7 @@ var testing = {};
function TestCase(name, fixture, body) {
this.name = name;
this.fixture = fixture;
+ this.runA11yChecks = fixture.runA11yChecks;
this.body = body;
}
@@ -264,6 +270,11 @@ var testing = {};
deferred_: false,
/**
+ * FIXME(aboxhall)
+ */
+ runA11yChecks: true,
+
+ /**
* Called at preload time, proxies to the fixture.
* @type {Function}
*/
@@ -585,6 +596,13 @@ var testing = {};
var errors = [];
/**
+ * Hold the accessibility warnings and errors, respectively.
+ * Like errors, cleared when results are reported.
+ */
+ var a11y_warnings = [];
+ var a11y_errors = [];
+
+ /**
* URL to dummy WebUI page for testing framework.
* @type {string}
*/
@@ -605,6 +623,9 @@ var testing = {};
*/
function testDone(result) {
if (!testIsDone) {
+ // FIXME(aboxhall): run a11y check if not disabled; combine with result.
+ var accessibilityOk = runAccessibilityAudit_(a11y_errors, a11y_warnings);
+
testIsDone = true;
if (currentTestCase) {
try {
@@ -618,7 +639,12 @@ var testing = {};
}
currentTestCase = null;
}
- chrome.send('testResult', result ? result : testResult());
+ if (!result)
+ result = testResult();
+ if (!accessibilityOk)
+ result.push(createAccessibilityErrorMessage(a11y_errors,
+ a11y_warnings));
+ chrome.send('testResult', result);
errors.splice(0, errors.length);
} else {
console.warn('testIsDone already');
@@ -793,6 +819,66 @@ var testing = {};
}
/**
+ * FIXME(aboxhall) documentation
+ */
+ function createAccessibilityErrorMessage(a11y_errors, a11y_warnings) {
+ var errorMessage = 'Accessibility ';
+ if (a11y_errors.length > 0)
+ errorMessage += 'Errors ';
+ else
+ errorMessage += 'Warnings ';
+ errorMessage += 'found:\n';
+ for (var i = 0; i < a11y_errors.length; i++)
+ errorMessage += 'Error: ' + a11y_errors[i] + '\n';
+ for (var i = 0; i < a11y_warnings.length; i++)
+ errorMessage += 'Warning: ' + a11y_warnings[i] + '\n';
+ return errorMessage;
+ }
+
+ /**
+ * FIXME(aboxhall) documentation
+ */
+ function assertAccessibilityOk() {
+ helper.registerCall();
+ var a11y_errors = [];
+ var a11y_warnings = [];
+ if (!runAccessibilityAudit_(a11y_errors, a11y_warnings))
+ throw new Error(createAccessibilityErrorMessage(a11y_errors,
+ a11y_warnings));
+ }
+
+ /**
+ * Run an accessibility audit on the current page state.
+ * FIXME(aboxhall) documentation
+ * @type {Function}
+ * @return {boolean} Whether there were any errors or warnings
+ * @private
+ */
+ function runAccessibilityAudit_(errors, warnings) {
+ for (var auditRuleName in axs.AuditRule.specs) {
+ var auditRule = axs.AuditRules.getRule(auditRuleName);
+ if (!auditRule)
+ continue; // Shouldn't happen, but fail silently if it does.
+ if (!auditRule.disabled && !auditRule.requiresConsoleAPI) {
+ var result = auditRule.run();
+ if (result.result == axs.constants.AuditResult.FAIL) {
+ // TODO(aboxhall): more useful error messages (sadly non-trivial)
+ if (auditRule.severity == axs.constants.Severity.Severe)
+ errors.push("Accessibility audit rule " + auditRule.name +
+ " failed");
+ else
+ warnings.push("Accessibility audit rule " + auditRule.name +
+ " failed");
+ }
+ }
+ }
+ // TODO(aboxhall): have strict (no errors or warnings) vs non-strict
+ // (warnings ok)
+ // TODO(aboxhall): some kind of info logging for warnings only??
+ return (errors.length == 0 && warnings.length == 0);
+ }
+
+ /**
* Creates a function based upon a function that thows an exception on
* failure. The new function stuffs any errors into the |errors| array for
* checking by runTest. This allows tests to continue running other checks,
@@ -834,6 +920,7 @@ var testing = {};
* @see runTestFunction
*/
function runTest(isAsync, testFunction, testArguments) {
+ // FIXME(aboxhall): modify to add a11y phase
// Avoid eval() if at all possible, since it will not work on pages
// that have enabled content-security-policy.
var testBody = this[testFunction]; // global object -- not a method.
@@ -1389,6 +1476,7 @@ var testing = {};
exports.expectLT = createExpect(assertLT);
exports.expectNotEquals = createExpect(assertNotEquals);
exports.expectNotReached = createExpect(assertNotReached);
+ exports.expectAccessibilityOk = createExpect(assertAccessibilityOk);
exports.preloadJavascriptLibraries = preloadJavascriptLibraries;
exports.registerMessageCallback = registerMessageCallback;
exports.registerMockGlobals = registerMockGlobals;
« chrome/browser/ui/webui/web_ui_test_handler.cc ('K') | « chrome/js_unittest_vars.gypi ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698