Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 26 additions & 35 deletions build/create-testcases.js
Original file line number Diff line number Diff line change
@@ -1,31 +1,25 @@
const { copy } = require('fs-extra')
const globby = require('globby')
const makeDir = require('make-dir')
const objectHash = require('object-hash')
const codeBlocks = require('gfm-code-blocks')
const {
www: { url, baseDir },
} = require('./../package.json')
const { www: { url } } = require('./../package.json')
const getMarkdownData = require('./../utils/get-markdown-data')
const createFile = require('../utils/create-file')
const regexps = require('../utils/reg-exps')
const getAllMatchesForRegex = require('../utils/get-all-matches-for-regex')
const copyTestcasesAssets = require('./testcases/copy-testcases-assets')
const createTestcasesJson = require('./testcases/create-testcases-json')
const createTestcasesOfRuleOfEmReportTool = require('./testcases/create-testcases-of-rule-of-em-report-tool')

/**
* Create test case files & other meta-data from test case in each rule.
*
* -> create test cases files into `./public/testcases/`
* -> copy `./test-assets/*` into `./public`
* -> create `testcases.json` into `./public`
* -> create test cases files into `_data` directory
* -> copy test assets into `_data` directory
* -> create `testcases.json`
*
* These files will be copied into `public` directory during gatsby `preBootstrap` hook/ build
*/
const init = async () => {
/**
* Create `public` directory
*/
await makeDir(`public`)

/**
* Get all rules `markdown` data
*/
Expand All @@ -40,13 +34,16 @@ const init = async () => {
* -> get code snippets
* -> and their relevant titles
*/
rulesData.forEach(ruleData => {
const { frontmatter, body } = ruleData
for (const { frontmatter, body } of rulesData) {
const {
id: ruleId,
name: ruleName,
accessibility_requirements: ruleAccessibilityRequirements,
} = frontmatter

/**
* get all titles of test case examples (eg: #### Failed Example 1)
*/
const codeTitles = getAllMatchesForRegex(regexps.testcaseTitle, body)

/**
Expand All @@ -65,33 +62,31 @@ const init = async () => {
* -> create a testcase file
* -> and add meta of testcase to `testcases.json`
*/
const ruleTestcases = codeSnippets.reduce((out, codeBlock, index) => {
const ruleTestcases = []

for (const [index, codeSnippet] of codeSnippets.entries()) {
const title = codeTitles[index]
if (!title) {
throw new Error('No title found for code snippet.')
}

const { code, block } = codeBlock
let { type = 'html' } = codeBlock
const { code, block } = codeSnippet
let { type = 'html' } = codeSnippet

if (regexps.testcaseCodeSnippetTypeIsSvg.test(block.substring(0, 15))) {
type = 'svg'
}

const codeId = objectHash({
block,
type,
ruleId,
})
const codeId = objectHash({ block, type, ruleId })

const titleCurated = title.value.split(' ').map(t => t.toLowerCase())

const testcaseFileName = `${ruleId}/${codeId}.${type}`
const testcasePath = `testcases/${testcaseFileName}`

/**
* Create testcase file
*/
createFile(`${baseDir}/${testcasePath}`, code)
await createFile(`_data/rules-testcases/${testcasePath}`, code)

/**
* Create meta data for testcase(s)
Expand All @@ -106,43 +101,39 @@ const init = async () => {
rulePage: `${url}/rules/${ruleId}`,
ruleAccessibilityRequirements,
}

out.push(testcase)
return out
}, [])
ruleTestcases.push(testcase)
}

// add rule testcases to all testcases
allRulesTestcases = allRulesTestcases.concat(ruleTestcases)

/**
* Create test cases of rule for use with `em report tool`
*/
createTestcasesOfRuleOfEmReportTool({
await createTestcasesOfRuleOfEmReportTool({
ruleId,
ruleName,
ruleTestcases,
ruleAccessibilityRequirements,
})
})
}

/**
* Copy `test-assets` that are used by `testcases`
*/
await copyTestcasesAssets()
await copy('./test-assets', './_data/rules-testcases/test-assets')

/**
* Generate `testcases.json`
*/
await createTestcasesJson(allRulesTestcases)

console.info(`\nGenerated Test Cases.\n`)
}

/**
* Invoke
*/
init()
.then(() => console.log('Completed: task: create:testcases'))
.then(() => console.log('Completed task: createTestcases'))
.catch(e => {
console.error(e)
process.write(1)
Expand Down
2 changes: 1 addition & 1 deletion build/implementations/get-testcases-grouped-by-rule.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const testcasesData = require('./../../public/testcases.json')
const testcasesData = require('./../../_data/rules-testcases/testcases.json')

/**
* Get testcases of rules
Expand Down
18 changes: 0 additions & 18 deletions build/testcases/copy-testcases-assets.js

This file was deleted.

8 changes: 2 additions & 6 deletions build/testcases/create-testcases-json.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,4 @@
const {
www: { url, baseDir },
author,
description,
} = require('./../../package.json')
const { www: { url }, author, description } = require('./../../package.json')
const createFile = require('../../utils/create-file')

/**
Expand All @@ -19,7 +15,7 @@ const createTestcasesJson = async testcases => {
}

await createFile(
`${baseDir}/testcases.json`,
`_data/rules-testcases/testcases.json`,
JSON.stringify(AllTestcasesData, undefined, 2)
)
}
Expand Down
7 changes: 3 additions & 4 deletions build/testcases/create-testcases-of-rule-of-em-report-tool.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
const {
www: { url, baseDir },
} = require('./../../package.json')
const { www: { url } } = require('./../../package.json')
const scUrlsMetaData = require('./../../_data/sc-urls.json')
const scEmReportAuditResult = require('./../../_data/sc-em-report-audit-result.json')
const graphContext = require('./wcag-em-report-tool-mappings/@graph-context.json')
Expand All @@ -22,6 +20,7 @@ const createTestcasesOfRuleOfEmReportTool = async options => {
const title = `Report for ACT-R Rule - ${ruleName}`
const siteName = `ACT-R Rule - ${ruleName}`
const siteScope = `${url}/testcases/${ruleId}/`

const webpages = ruleTestcases.map((testcase, index) => {
const { url, testcaseId } = testcase
return {
Expand Down Expand Up @@ -88,7 +87,7 @@ const createTestcasesOfRuleOfEmReportTool = async options => {
}

await createFile(
`${baseDir}/testcases/${ruleId}/rule-${ruleId}-testcases-for-em-report-tool.json`,
`_data/rules-testcases/testcases/${ruleId}/rule-${ruleId}-testcases-for-em-report-tool.json`,
JSON.stringify(json, undefined, 2)
)
}
Expand Down
9 changes: 9 additions & 0 deletions gatsby-node.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
const { copy } = require('fs-extra')
const onCreateNode = require('./gatsby/on-create-node')
const createPages = require('./gatsby/create-pages')

exports.onPreBootstrap = async () => {
/**
* copy `testcases` and relevant `assets` to `public` directory (these are created via npm script `createTestcases`)
* Note:
* `gatsby build` cleans all `html` and `css` files within the destination directory, hence the need to copy these during `bootstrap` step
*/
await copy('./_data/rules-testcases', 'public')
}
exports.onCreateNode = onCreateNode
exports.createPages = createPages
40 changes: 31 additions & 9 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 4 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@
"commander": "^2.20.0",
"fastmatter": "^2.1.1",
"flat": "^4.1.0",
"fs-extra": "^8.1.0",
"gatsby": "^2.8.6",
"gatsby-image": "^2.1.2",
"gatsby-plugin-manifest": "^2.1.1",
Expand All @@ -111,7 +112,6 @@
"jsonld": "^1.6.2",
"make-dir": "^2.1.0",
"marked": "^0.6.2",
"ncp": "^2.0.0",
"node-sass": "^4.12.0",
"normalize.css": "^8.0.1",
"object-hash": "^1.3.1",
Expand All @@ -138,7 +138,7 @@
],
"license": "MIT",
"scripts": {
"clean": "rm -rf .cache public",
"clean": "gatsby clean",
"getImplementationAccessEngine": "node ./build/get-implementation --org 'Level Access' --tool 'Access Engine' --path './node_modules/act-rules-implementation-access-engine/report.json'",
"getImplementationAlfa": "node ./build/get-implementation --org 'Siteimprove' --tool 'Alfa' --path './node_modules/act-rules-implementation-alfa/report.json'",
"getImplementationAxeCore": "node ./build/get-implementation --org 'Deque Systems' --tool 'Axe-core' --path './node_modules/act-rules-implementation-axe-core/report.json'",
Expand All @@ -153,7 +153,7 @@
"getData": "npm run getWcagData && npm run createTestcases && npm run createGlossary && npm run implementations",
"predevelop": "npm run getData",
"develop": "gatsby develop",
"prebuild": "npm run getData",
"prebuild": "npm run clean && npm run getData",
"build": "gatsby build",
"format": "prettier --write *.{json,md,js,jsx} './{_data,_rules,build,gatsby,pages,src,test-assets}/**/*.{json,md,js,jsx}'",
"start": "npm run clean && npm run develop",
Expand All @@ -173,8 +173,7 @@
"url": "https://github.com/act-rules/act-rules.github.io/pulls"
},
"www": {
"url": "https://act-rules.github.io",
"baseDir": "./public"
"url": "https://act-rules.github.io"
},
"config": {
"references": {
Expand Down