@skyux-sdk/testing
Version:
This library was generated with [Nx](https://nx.dev).
1 lines • 25.6 kB
Source Map (JSON)
{"version":3,"file":"skyux-sdk-testing-private.mjs","sources":["../../../../../libs/sdk/testing/private/src/a11y/a11y-analyzer.ts","../../../../../libs/sdk/testing/private/src/utility/check-accessibility.ts","../../../../../libs/sdk/testing/private/src/utility/check-existence.ts","../../../../../libs/sdk/testing/private/src/utility/i18n-utils.ts","../../../../../libs/sdk/testing/private/src/utility/check-lib-resource-template.ts","../../../../../libs/sdk/testing/private/src/utility/check-lib-resource-text.ts","../../../../../libs/sdk/testing/private/src/utility/check-resource-template.ts","../../../../../libs/sdk/testing/private/src/utility/check-resource-text.ts","../../../../../libs/sdk/testing/private/src/utility/check-visibility.ts","../../../../../libs/sdk/testing/private/src/utility/has-css-class.ts","../../../../../libs/sdk/testing/private/src/utility/has-lib-resource-text.ts","../../../../../libs/sdk/testing/private/src/utility/has-resource-text.ts","../../../../../libs/sdk/testing/private/src/utility/has-style.ts","../../../../../libs/sdk/testing/private/src/utility/has-text.ts","../../../../../libs/sdk/testing/private/src/skyux-sdk-testing-private.ts"],"sourcesContent":["import axe from 'axe-core';\nimport type { _SkyA11yAnalyzerConfig } from './a11y-analyzer-config';\n\nfunction parseMessage(violations: axe.Result[]): string {\n let message = 'Expected element to pass accessibility checks.\\n\\n';\n\n violations.forEach((violation) => {\n const wcagTags = violation.tags\n .filter((tag) => tag.match(/wcag\\d{3}|^best*/gi))\n .join(', ');\n\n const nodeResults = violation.nodes.filter(\n filterViolationNodeResults(violation),\n );\n const html = nodeResults.reduce(\n (accumulator: string, node: axe.NodeResult) => {\n const related = [...node.all, ...node.none, ...node.any]\n .map((checkResult) => {\n const relatedNodes = checkResult.relatedNodes || [];\n let relatedHtml = relatedNodes\n .map((relatedNode) =>\n relatedNode.html.split(`\\n`).join(`\\n `),\n )\n .join(`\\n\\n `);\n if (relatedHtml) {\n relatedHtml = `\\n Related Nodes:\\n ${relatedHtml}`;\n }\n return ` - [${checkResult.id}] ${checkResult.message}${relatedHtml}`;\n })\n .join(`\\n`);\n const newInformation: string[] = [\n node.failureSummary\n ? `[${node.impact?.toUpperCase()}] ${node.failureSummary\n .split(/\\n */g)\n .join(`\\n - `)}`\n : '',\n node.ancestry ? `Ancestry: ${node.ancestry.join(', ')}` : '',\n `Target: ${node.target.join(', ')}`,\n node.html ? `HTML: ${node.html}` : '',\n related,\n ].filter((info) => !!info);\n\n return `${accumulator}\\n\\n${newInformation.join(`\\n`)}`;\n },\n '',\n );\n\n const error = [\n `aXe - [Rule: '${violation.id}'] ${violation.help} - WCAG: ${wcagTags}`,\n ` Get help at: ${violation.helpUrl}\\n`,\n `${html}\\n\\n`,\n ].join('\\n');\n\n message += `${error}\\n`;\n });\n\n return message;\n}\n\nfunction filterViolationNodeResults(\n result: axe.Result,\n): (node: axe.NodeResult) => boolean {\n if (\n [\n 'aria-dialog-name', // AG Grid adds role=\"dialog\" to its popup editor container, but doesn't set title, aria-label, or aria-labelledby\n 'aria-hidden-focus', // AG Grid uses aria-hidden on elements before they are ready\n 'aria-required-children', // AG Grid uses some aria-hidden elements that axe doesn't like\n 'aria-valid-attr', // AG Grid uses aria-description, which is still in draft\n 'scrollable-region-focusable', // AG Grid handles scrolling\n ].includes(result.id)\n ) {\n return (node: axe.NodeResult) => !node.html.includes('class=\"ag-');\n } else if (result.id === 'aria-allowed-role') {\n const fieldsetRadiogroupRegex = new RegExp(\n /<fieldset[^>]+role=\"radiogroup\"/,\n );\n return (node: axe.NodeResult) => !fieldsetRadiogroupRegex.test(node.html);\n } else {\n return () => true;\n }\n}\n\n/**\n * @internal\n */\nexport abstract class _SkyA11yAnalyzer {\n private static analyzer = axe;\n\n public static run(\n element?: axe.ElementContext,\n config?: _SkyA11yAnalyzerConfig,\n ): Promise<void> {\n if (element === undefined) {\n throw new Error('No element was specified for accessibility checking.');\n }\n\n _SkyA11yAnalyzer.analyzer.reset();\n\n const defaults: _SkyA11yAnalyzerConfig = {\n rules: {},\n };\n\n // Disable autocomplete-valid\n // Chrome browsers ignore autocomplete=\"off\", which forces us to use non-standard values\n // to disable the browser's native autofill.\n // https://bugs.chromium.org/p/chromium/issues/detail?id=468153#c164\n defaults.rules['autocomplete-valid'] = { enabled: false };\n\n return new Promise((resolve, reject) => {\n const callback: axe.RunCallback = (error, results) => {\n if (error?.message) {\n reject(error);\n return;\n }\n\n const violations = results.violations.filter((violation) =>\n violation.nodes.some(filterViolationNodeResults(violation)),\n );\n if (violations.length > 0) {\n const message = parseMessage(violations);\n reject(new Error(message));\n return;\n }\n\n resolve();\n };\n\n _SkyA11yAnalyzer.analyzer.run(\n element,\n { ...defaults, ...config },\n callback,\n );\n });\n }\n}\n","import { _SkyA11yAnalyzer } from '../a11y/a11y-analyzer';\nimport type { _SkyA11yAnalyzerConfig } from '../a11y/a11y-analyzer-config';\nimport type { MatcherResult } from './matcher-result';\n\n/**\n * @internal\n */\nexport async function _skyTestingCheckAccessibility(\n el: Element | Document,\n options?: _SkyA11yAnalyzerConfig,\n): Promise<MatcherResult> {\n const target = el instanceof Document ? el.documentElement : el;\n\n if (!(target instanceof Element)) {\n throw new Error('toBeAccessible expects an Element or Document.');\n }\n\n try {\n await _SkyA11yAnalyzer.run(target, options);\n return {\n pass: true,\n message: 'Expected accessibility violations, but none were found.',\n };\n } catch (err) {\n return {\n pass: false,\n message: (err as Error).message,\n };\n }\n}\n","import type { MatcherResult } from './matcher-result';\n\n/**\n * @internal\n */\nexport function _skyTestingCheckExistence(\n el: Element | null | undefined,\n): MatcherResult {\n const pass = !!el;\n\n return {\n pass,\n message: pass\n ? 'Expected element not to exist'\n : 'Expected element to exist',\n };\n}\n","import { TestBed } from '@angular/core/testing';\nimport { SkyAppResourcesService, SkyLibResourcesService } from '@skyux/i18n';\nimport { firstValueFrom } from 'rxjs';\n\nexport async function getResourceString(\n resourceKey: string,\n resourceArgs: unknown[] = [],\n): Promise<string> {\n const resourcesSvc = TestBed.inject(SkyAppResourcesService);\n\n return await firstValueFrom(\n resourcesSvc.getString(resourceKey, ...resourceArgs),\n );\n}\n\nexport async function getLibResourceString(\n resourceKey: string,\n resourceArgs: unknown[] = [],\n): Promise<string> {\n const resourcesSvc = TestBed.inject(SkyLibResourcesService);\n\n return await firstValueFrom(\n resourcesSvc.getString(resourceKey, ...resourceArgs),\n );\n}\n\nexport function isTemplateMatch(sample: string, template: string): boolean {\n let matches = true;\n\n const templateTokens = template.split(new RegExp('{\\\\d+}')).reverse();\n\n let currentToken = templateTokens.pop();\n let lastPosition = 0;\n\n while (currentToken !== undefined && matches) {\n const tokenPosition = sample.indexOf(currentToken, lastPosition);\n\n matches = tokenPosition >= lastPosition;\n lastPosition = tokenPosition + currentToken.length;\n currentToken = templateTokens.pop();\n }\n\n return matches;\n}\n","import { getLibResourceString, isTemplateMatch } from './i18n-utils';\nimport type { MatcherResult } from './matcher-result';\n\n/**\n * @internal\n */\nexport async function _skyTestingCheckLibResourceTemplate(\n el: Element,\n resourceKey: string,\n): Promise<MatcherResult> {\n const actualText = el.textContent ?? '';\n const expectedText = await getLibResourceString(resourceKey);\n\n const pass = isTemplateMatch(actualText, expectedText);\n\n return {\n pass,\n message: pass\n ? `Expected element's text \"${actualText}\" not to match \"${expectedText}\"`\n : `Expected element's text \"${actualText}\" to match \"${expectedText}\"`,\n };\n}\n","import { getLibResourceString } from './i18n-utils';\nimport type { MatcherResult } from './matcher-result';\n\n/**\n * @internal\n */\nexport async function _skyTestingCheckLibResourceText(\n actualText: string,\n resourceKey: string,\n resourceArgs?: unknown[],\n): Promise<MatcherResult> {\n const expectedText = await getLibResourceString(resourceKey, resourceArgs);\n\n const pass = actualText === expectedText;\n\n return {\n pass,\n message: pass\n ? `Expected \"${actualText}\" not to equal \"${expectedText}\"`\n : `Expected \"${actualText}\" to equal \"${expectedText}\"`,\n };\n}\n","import { getResourceString, isTemplateMatch } from './i18n-utils';\nimport type { MatcherResult } from './matcher-result';\n\n/**\n * @internal\n */\nexport async function _skyTestingCheckResourceTemplate(\n el: Element,\n resourceKey: string,\n): Promise<MatcherResult> {\n const actualText = el.textContent ?? '';\n const expectedText = await getResourceString(resourceKey);\n\n const pass = isTemplateMatch(actualText, expectedText);\n\n return {\n pass,\n message: pass\n ? `Expected element's text \"${actualText}\" not to match \"${expectedText}\"`\n : `Expected element's text \"${actualText}\" to match \"${expectedText}\"`,\n };\n}\n","import { getResourceString } from './i18n-utils';\nimport type { MatcherResult } from './matcher-result';\n\n/**\n * @internal\n */\nexport async function _skyTestingCheckResourceText(\n actualText: string,\n resourceKey: string,\n resourceArgs?: unknown[],\n): Promise<MatcherResult> {\n const expectedText = await getResourceString(resourceKey, resourceArgs);\n\n const pass = actualText === expectedText;\n\n return {\n pass,\n message: pass\n ? `Expected \"${actualText}\" not to equal \"${expectedText}\"`\n : `Expected \"${actualText}\" to equal \"${expectedText}\"`,\n };\n}\n","import type { _SkyTestingCheckVisibilityOptions } from './check-visibility-options';\nimport type { MatcherResult } from './matcher-result';\n\nconst DEFAULTS: _SkyTestingCheckVisibilityOptions = {\n checkCssDisplay: true,\n checkCssVisibility: false,\n checkDimensions: false,\n checkExists: false,\n};\n\n/**\n * @internal\n */\nexport function _skyTestingCheckVisibility(\n el: Element,\n options?: _SkyTestingCheckVisibilityOptions,\n): MatcherResult {\n const settings = { ...DEFAULTS, ...options };\n\n let pass = true;\n\n if (settings.checkExists) {\n pass = !!el;\n }\n\n if (pass) {\n const computedStyle = window.getComputedStyle(el);\n\n if (settings.checkCssDisplay) {\n pass = computedStyle.display !== 'none';\n }\n\n if (settings.checkCssVisibility) {\n pass = computedStyle.visibility !== 'hidden';\n }\n\n if (settings.checkDimensions) {\n const box = el.getBoundingClientRect();\n pass = box.width > 0 && box.height > 0;\n }\n }\n\n return {\n pass,\n message: pass\n ? 'Expected element to not be visible'\n : 'Expected element to be visible',\n };\n}\n","import type { MatcherResult } from './matcher-result';\n\nexport function _skyTestingHasCssClass(\n el: Element,\n expectedClassName: string,\n): MatcherResult {\n if (expectedClassName.indexOf('.') === 0) {\n throw new Error('Please remove the leading dot from your class name.');\n }\n\n const pass = el.classList.contains(expectedClassName);\n\n return {\n pass,\n message: pass\n ? `Expected element not to have CSS class \"${expectedClassName}\"`\n : `Expected element to have CSS class \"${expectedClassName}\"`,\n };\n}\n","import { getLibResourceString } from './i18n-utils';\nimport type { MatcherResult } from './matcher-result';\n\n/**\n * @internal\n */\nexport async function _skyTestingHasLibResourceText(\n el: Element,\n resourceKey: string,\n resourceArgs: unknown[] = [],\n trimWhitespace: boolean,\n): Promise<MatcherResult> {\n const expectedText = await getLibResourceString(resourceKey, resourceArgs);\n\n let actualText = el.textContent ?? '';\n\n if (trimWhitespace) {\n actualText = actualText.trim();\n }\n\n const pass = actualText === expectedText;\n\n return {\n pass,\n message: pass\n ? `Expected element's inner text \"${actualText}\" not to be \"${expectedText}\"`\n : `Expected element's inner text \"${actualText}\" to be \"${expectedText}\"`,\n };\n}\n","import { getResourceString } from './i18n-utils';\nimport type { MatcherResult } from './matcher-result';\n\n/**\n * @internal\n */\nexport async function _skyTestingHasResourceText(\n el: Element,\n resourceKey: string,\n resourceArgs: unknown[] = [],\n trimWhitespace: boolean,\n): Promise<MatcherResult> {\n const expectedText = await getResourceString(resourceKey, resourceArgs);\n\n let actualText = el.textContent ?? '';\n\n if (trimWhitespace) {\n actualText = actualText.trim();\n }\n\n const pass = actualText === expectedText;\n\n return {\n pass,\n message: pass\n ? `Expected element's inner text \"${actualText}\" not to be \"${expectedText}\"`\n : `Expected element's inner text \"${actualText}\" to be \"${expectedText}\"`,\n };\n}\n","import type { MatcherResult } from './matcher-result';\n\n/**\n * @internal\n */\nexport function _skyTestingHasStyle(\n el: Element,\n expectedStyles: Record<string, string>,\n): MatcherResult {\n const messages: string[] = [];\n let hasFailure = false;\n\n const styles = window.getComputedStyle(el);\n\n for (const styleName of Object.keys(expectedStyles)) {\n const actualStyle = styles.getPropertyValue(styleName);\n const expectedStyle = expectedStyles[styleName];\n\n if (actualStyle !== expectedStyle) {\n if (!hasFailure) {\n hasFailure = true;\n }\n\n messages.push(\n `Expected element to have CSS style \"${styleName}: ${expectedStyle}\"`,\n );\n } else {\n messages.push(\n `Expected element not to have CSS style \"${styleName}: ${expectedStyle}\"`,\n );\n }\n\n messages.push(`Actual styles are: \"${styleName}: ${actualStyle}\"`);\n }\n\n return {\n pass: !hasFailure,\n message: messages.join('\\n'),\n };\n}\n","import type { MatcherResult } from './matcher-result';\n\nexport function _skyTestingHasText(\n el: Element,\n expectedText: string,\n trimWhitespace: boolean,\n): MatcherResult {\n let actualText = el.textContent ?? '';\n\n if (trimWhitespace) {\n actualText = actualText.trim();\n }\n\n const pass = actualText === expectedText;\n\n return {\n pass,\n message: pass\n ? `Expected element's inner text \"${actualText}\" not to be: \"${expectedText}\"`\n : `Expected element's inner text to be: \"${expectedText}\"\\n` +\n `Actual element's inner text was: \"${actualText}\"`,\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}