diff --git a/lib/data/parse-command-csv-row.js b/lib/data/parse-command-csv-row.js index 0265cfa65..7ea3f321d 100644 --- a/lib/data/parse-command-csv-row.js +++ b/lib/data/parse-command-csv-row.js @@ -3,6 +3,8 @@ 'use strict'; +const { setDefaultAssertionPriority } = require('../util/assertion-exception'); + /** * @param {AriaATCSV.Command} commandRow * @returns {AriaATParsed.Command} @@ -186,7 +188,7 @@ function findValuesByKeys(commandsMapping, keysToFind = []) { return result; } -function parseCommandCSVRowV2({ commands }, commandsJson) { +function parseCommandCSVRowV2({ commands }, commandsJson, assertions) { const commandsParsed = []; const flattenedCommandsJson = flattenObject(commandsJson); @@ -195,7 +197,10 @@ function parseCommandCSVRowV2({ commands }, commandsJson) { const commandKVs = findValuesByKeys(flattenedCommandsJson, [command.command]); const assertionExceptions = command.assertionExceptions.length - ? sanitizeWhitespace(command.assertionExceptions).split(' ') + ? setDefaultAssertionPriority( + sanitizeWhitespace(command.assertionExceptions), + assertions + ).split(' ') : []; const commands = commandKVs.map(e => ({ diff --git a/lib/data/parse-test-csv-row.js b/lib/data/parse-test-csv-row.js index 4fdd791ce..c20ec8e77 100644 --- a/lib/data/parse-test-csv-row.js +++ b/lib/data/parse-test-csv-row.js @@ -3,6 +3,8 @@ 'use strict'; +const { setDefaultAssertionPriority } = require('../util/assertion-exception'); + /** * @param {AriaATCSV.Test} testRow * @returns {AriaATParsed.Test} @@ -216,12 +218,16 @@ function parseTestCSVRowV2({ tests, assertions, scripts, commands }) { at => at.key === key && at.settings === (command.settings || 'defaultMode') ) ) { + const assertionExceptions = setDefaultAssertionPriority( + command.assertionExceptions, + assertions + ); const commandInfo = { testId: command.testId, command: command.command, settings: command.settings || 'defaultMode', presentationNumber: Number(command.presentationNumber), - assertionExceptions: command.assertionExceptions, + assertionExceptions: assertionExceptions, }; // Test level commandInfo, useful for getting assertionExceptions and diff --git a/lib/data/process-test-directory/index.js b/lib/data/process-test-directory/index.js index 4723175df..f3b8d4d35 100644 --- a/lib/data/process-test-directory/index.js +++ b/lib/data/process-test-directory/index.js @@ -197,7 +197,7 @@ const processTestDirectory = async config => { } const validCommandKeys = /^(?:testId|command|settings|assertionExceptions|presentationNumber)$/; - const assertionsExceptionsFormat = /^([0123]:[a-zA-Z-\d]+\s*)+$/; + const assertionsExceptionsFormat = /^(([0123]:)?[a-zA-Z-\d]+\s*)+$/; const settingsFormat = /^[A-Za-z0-9-\s]+$/; function validateCommandsKeys(row) { // example header: @@ -557,7 +557,8 @@ const processTestDirectory = async config => { { commands: parsedAtCommandsCsvs, }, - commandsJson + commandsJson, + assertionsCsv ); const { references: { aria, htmlAam }, diff --git a/lib/util/assertion-exception.js b/lib/util/assertion-exception.js new file mode 100644 index 000000000..88a6a65f7 --- /dev/null +++ b/lib/util/assertion-exception.js @@ -0,0 +1,38 @@ +/** + * Generates the assertionException string with a default priority prefix + * @param {String} assertionException + * @param {Number} defaultPriority + * @returns {String} + */ +function setDefaultAssertionException(assertionException, defaultPriority) { + if (assertionException && !assertionException.includes(':')) { + return `${defaultPriority}:${assertionException}`; + } + return assertionException; +} + +/** + * Finds the default assertion value for an assertionException without + * a priority prefix in a string of assertionExceptions and recreates + * the string with the new default assertion priorities + * @param {String} assertionExceptions + * @param {Array} assertions + * @returns {String} + */ +function setDefaultAssertionPriority(assertionExceptions, assertions) { + return assertionExceptions + .split(' ') + .map(assertionException => { + const assertion = assertions.find(assertion => + assertionException.includes(assertion.assertionId) + ); + if (assertion) { + const defaultPriority = assertion.priority; + return setDefaultAssertionException(assertionException, defaultPriority); + } + return assertionException; + }) + .join(' '); +} + +exports.setDefaultAssertionPriority = setDefaultAssertionPriority;