@dash-ui/jest
Version:
Jest utilities for dash-ui
1 lines • 25.4 kB
Source Map (JSON)
{"version":3,"file":"index.dev.mjs","sources":["../../src/index.js"],"sourcesContent":["import * as css from 'css'\nimport chalk from 'chalk'\n\n//\n// Utils\nconst flatMap = (arr, iteratee) => [].concat(...arr.map(iteratee))\n\nexport const RULE_TYPES = {\n media: 'media',\n supports: 'supports',\n rule: 'rule',\n}\n\nconst getClassNames = (selectors, classes) =>\n classes ? selectors.concat(classes.split(' ')) : selectors\n\nconst getClassNamesFromTestRenderer = (selectors, {props}) =>\n getClassNames(selectors, props ? props.className || props.class : null)\n\nconst shouldDive = (node) =>\n typeof node.dive === 'function' && typeof node.type() !== 'string'\n\nconst isTagWithClassName = (node) =>\n node.prop('className') && typeof node.type() === 'string'\n\nconst getClassNamesFromEnzyme = (selectors, node) => {\n // We need to dive if we have selected a styled child from a shallow render\n const actualComponent = shouldDive(node) ? node.dive() : node\n // Find the first node with a className prop\n const components = actualComponent.findWhere(isTagWithClassName)\n const classes = components.length && components.first().prop('className')\n\n return getClassNames(selectors, classes)\n}\n\nconst getClassNamesFromCheerio = (selectors, node) => {\n const classes = node.attr('class')\n return getClassNames(selectors, classes)\n}\n\nconst getClassNamesFromDOMElement = (selectors, node) =>\n getClassNames(selectors, node.getAttribute('class'))\n\nexport const isReactElement = (val) => {\n if (val.$$typeof === Symbol.for('react.test.json')) {\n return true\n } else if (\n val.hasOwnProperty('props') &&\n val.hasOwnProperty('type') &&\n val.hasOwnProperty('ref') &&\n val.hasOwnProperty('key')\n ) {\n // Preact X\n val.$$typeof = Symbol.for('react.test.json')\n return true\n }\n}\n\nconst domElementPattern = /^((HTML|SVG)\\w*)?Element$/\n\nexport const isDOMElement = (val) =>\n val.nodeType === 1 &&\n val.constructor &&\n val.constructor.name &&\n domElementPattern.test(val.constructor.name)\n\nconst isEnzymeElement = (val) => typeof val.findWhere === 'function'\nconst isCheerioElement = (val) => val.cheerio === '[cheerio object]'\n\nexport const getClassNamesFromNodes = (nodes) =>\n nodes.reduce((selectors, node) => {\n if (isReactElement(node)) {\n return getClassNamesFromTestRenderer(selectors, node)\n } else if (isEnzymeElement(node)) {\n return getClassNamesFromEnzyme(selectors, node)\n } else if (isCheerioElement(node)) {\n return getClassNamesFromCheerio(selectors, node)\n }\n\n return getClassNamesFromDOMElement(selectors, node)\n }, [])\n\nlet keyframesPattern = /^@keyframes\\s+(animation-[^{\\s]+)+/\n\nlet removeCommentPattern = /\\/\\*[\\s\\S]*?\\*\\//g\n\nconst getElementRules = (element) => {\n const nonSpeedyRule = element.textContent\n if (nonSpeedyRule) {\n return [nonSpeedyRule]\n }\n if (!element.sheet) {\n return []\n }\n // $FlowFixMe - flow doesn't know about `cssRules` property\n return [].slice.call(element.sheet.cssRules).map((cssRule) => cssRule.cssText)\n}\n\nexport const getStylesFromClassNames = (classNames, elements) => {\n if (!classNames.length) {\n return ''\n }\n\n let keys = getKeys(elements)\n if (!keys.length) {\n return ''\n }\n\n let keyPatten = new RegExp(`^(${keys.join('|')})-`)\n let filteredClassNames = classNames.filter((className) =>\n keyPatten.test(className)\n )\n if (!filteredClassNames.length) {\n return ''\n }\n let selectorPattern = new RegExp('\\\\.(' + filteredClassNames.join('|') + ')')\n let keyframes = {}\n let styles = ''\n\n flatMap(elements, getElementRules).forEach((rule) => {\n if (selectorPattern.test(rule)) {\n styles += rule\n }\n let match = rule.match(keyframesPattern)\n if (match !== null) {\n let name = match[1]\n if (keyframes[name] === undefined) {\n keyframes[name] = ''\n }\n keyframes[name] += rule\n }\n })\n let keyframeNameKeys = Object.keys(keyframes)\n let keyframesStyles = ''\n\n if (keyframeNameKeys.length) {\n let keyframesNamePattern = new RegExp(keyframeNameKeys.join('|'), 'g')\n let keyframesNameCache = {}\n let index = 0\n\n styles = styles.replace(keyframesNamePattern, (name) => {\n if (keyframesNameCache[name] === undefined) {\n keyframesNameCache[name] = `animation-${index++}`\n keyframesStyles += keyframes[name]\n }\n return keyframesNameCache[name]\n })\n\n keyframesStyles = keyframesStyles.replace(keyframesNamePattern, (value) => {\n return keyframesNameCache[value]\n })\n }\n\n return (keyframesStyles + styles).replace(removeCommentPattern, '')\n}\n\nexport const getStyleElements = () =>\n Array.from(document.querySelectorAll('style[data-dash]'))\n\nlet unique = (arr) => Array.from(new Set(arr))\n\nexport const getKeys = (elements) =>\n unique(elements.map((element) => element.getAttribute('data-dash'))).filter(\n Boolean\n )\n\nexport const hasClassNames = (classNames, selectors, target) =>\n selectors.some((selector) => {\n // if no target, use className of the specific css rule and try to find it\n // in the list of received node classNames to make sure this css rule\n // applied for root element\n if (!target) {\n return classNames.includes(selector.slice(1))\n }\n // check if selector (className) of specific css rule match target\n return target instanceof RegExp\n ? target.test(selector)\n : minify(selector).includes(minify(target))\n })\n\nexport const getMediaRules = (rules, media) =>\n rules\n .filter((rule) => {\n const isMediaMatch = rule.media\n ? rule.media.replace(/\\s/g, '').includes(media.replace(/\\s/g, ''))\n : false\n return rule.type === RULE_TYPES.media && isMediaMatch\n })\n .reduce((mediaRules, mediaRule) => mediaRules.concat(mediaRule.rules), [])\n\nexport const getSupportsRules = (rules, supports) =>\n rules\n .filter((rule) => {\n const isSupportsMatch = rule.supports\n ? rule.supports\n .replace(/\\s/g, '')\n .trim()\n .endsWith(supports.replace(/\\s/g, '').trim())\n : false\n\n return rule.type === RULE_TYPES.supports && isSupportsMatch\n })\n .reduce(\n (supportsRules, supportsRule) => supportsRules.concat(supportsRule.rules),\n []\n )\n\n//\n// Matchers\n/*\n * Taken from\n * https://github.com/facebook/jest/blob/be4bec387d90ac8d6a7596be88bf8e4994bc3ed9/packages/expect/src/jasmine_utils.js#L234\n */\nconst isA = (typeName, value) =>\n Object.prototype.toString.apply(value) === `[object ${typeName}]`\n\n/*\n * Taken from\n * https://github.com/facebook/jest/blob/be4bec387d90ac8d6a7596be88bf8e4994bc3ed9/packages/expect/src/jasmine_utils.js#L36\n */\nconst isAsymmetric = (obj) => obj && isA('Function', obj.asymmetricMatch)\n\nconst valueMatches = (declaration, value) => {\n if (value instanceof RegExp) {\n return value.test(declaration.value)\n }\n\n if (isAsymmetric(value)) {\n return value.asymmetricMatch(declaration.value)\n }\n\n return minify(value) === minify(declaration.value)\n}\n\nconst minLeft = /([:;,([{}>~/\\s]|\\/\\*)\\s+/g\nconst minRight = /\\s+([:;,)\\]{}>~/!]|\\*\\/)/g\nconst minify = (s) => s.trim().replace(minLeft, '$1').replace(minRight, '$1')\n\nconst toHaveStyleRule = (received, property, value, options = {}) => {\n const {target, media, supports} = options\n const classNames = getClassNamesFromNodes([received])\n const cssString = getStylesFromClassNames(classNames, getStyleElements())\n const styles = css.parse(cssString)\n let preparedRules = styles.stylesheet.rules\n if (media) {\n preparedRules = getMediaRules(preparedRules, media)\n }\n if (supports) {\n preparedRules = getSupportsRules(preparedRules, supports)\n }\n const declaration = preparedRules\n .filter(\n (rule) =>\n rule.type === RULE_TYPES.rule &&\n hasClassNames(classNames, rule.selectors, target)\n )\n .reduce((decs, rule) => decs.concat(rule.declarations), [])\n .filter(\n (dec) =>\n dec.type === 'declaration' && minify(dec.property) === minify(property)\n )\n .pop()\n\n if (!declaration) {\n return {\n pass: false,\n message: () => `Property not found: ${property}`,\n }\n }\n\n const pass = valueMatches(declaration, value)\n\n const message = () =>\n `Expected ${property}${pass ? ' not ' : ' '}to match:\\n` +\n ` ${chalk.green(value)}\\n` +\n 'Received:\\n' +\n ` ${chalk.red(declaration.value)}`\n\n return {\n pass,\n message,\n }\n}\n\nexport const matchers = {toHaveStyleRule}\n\n//\n// Pretty serialization\nconst defaultClassNameReplacer = (className, index) => `dash-ui-${index}`\nconst componentSelectorClassNamePattern = /^e[a-zA-Z0-9]+[0-9]+$/\nexport const replaceClassNames = (\n classNames,\n styles,\n code,\n keys,\n classNameReplacer = defaultClassNameReplacer\n) => {\n let index = 0\n let keyPattern = new RegExp(`^(${keys.join('|')})-`)\n\n return classNames.reduce((acc, className) => {\n if (\n keyPattern.test(className) ||\n componentSelectorClassNamePattern.test(className)\n ) {\n const escapedRegex = new RegExp(\n className.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&'),\n 'g'\n )\n return acc.replace(escapedRegex, classNameReplacer(className, index++))\n }\n return acc\n }, `${styles}${styles ? '\\n\\n' : ''}${code}`)\n}\n\nconst getNodes = (node, nodes = []) => {\n if (Array.isArray(node)) {\n for (let child of node) {\n getNodes(child, nodes)\n }\n return nodes\n }\n\n let children = node.children || (node.props && node.props.children)\n\n if (children) {\n // fix for Preact X\n children = node.props\n ? Array.isArray(children)\n ? children\n : [children]\n : children\n\n for (let child of children) {\n getNodes(child, nodes)\n }\n }\n\n if (typeof node === 'object') {\n nodes.push(node)\n }\n\n return nodes\n}\n\nconst getPrettyStylesFromClassNames = (classNames, elements) => {\n let styles = getStylesFromClassNames(classNames, elements)\n\n let prettyStyles\n\n try {\n prettyStyles = css.stringify(css.parse(styles))\n } catch (e) {\n console.error(e)\n throw new Error(`There was an error parsing the following css: \"${styles}\"`)\n }\n\n return prettyStyles\n}\n\nexport const createSerializer = (opt = {}) => {\n let {classNameReplacer, DOMElements = true} = opt\n let cache = new WeakSet()\n\n return {\n test(val) {\n return (\n val &&\n !cache.has(val) &&\n (isReactElement(val) || (DOMElements && isDOMElement(val)))\n )\n },\n\n print(val, printer) {\n const nodes = getNodes(val)\n const classNames = getClassNamesFromNodes(nodes)\n let elements = getStyleElements()\n const styles = getPrettyStylesFromClassNames(classNames, elements)\n nodes.forEach(cache.add, cache)\n const printedVal = printer(val)\n nodes.forEach(cache.delete, cache)\n let keys = getKeys(elements)\n return replaceClassNames(\n classNames,\n styles,\n printedVal,\n keys,\n classNameReplacer\n )\n },\n }\n}\n\nexport const {print, test} = createSerializer()\nexport default {print, test}\n"],"names":["flatMap","arr","iteratee","concat","map","RULE_TYPES","media","supports","rule","getClassNames","selectors","classes","split","getClassNamesFromTestRenderer","props","className","class","shouldDive","node","dive","type","isTagWithClassName","prop","getClassNamesFromEnzyme","actualComponent","components","findWhere","length","first","getClassNamesFromCheerio","attr","getClassNamesFromDOMElement","getAttribute","isReactElement","val","$$typeof","Symbol","for","hasOwnProperty","domElementPattern","isDOMElement","nodeType","constructor","name","test","isEnzymeElement","isCheerioElement","cheerio","getClassNamesFromNodes","nodes","reduce","keyframesPattern","removeCommentPattern","cssRule","cssText","getElementRules","element","nonSpeedyRule","textContent","sheet","slice","call","cssRules","getStylesFromClassNames","classNames","elements","keys","getKeys","keyPatten","RegExp","join","filteredClassNames","filter","selectorPattern","keyframes","styles","forEach","match","undefined","keyframeNameKeys","Object","keyframesStyles","keyframesNamePattern","keyframesNameCache","index","replace","value","getStyleElements","Array","from","document","querySelectorAll","unique","Set","Boolean","hasClassNames","target","some","selector","includes","minify","mediaRules","mediaRule","rules","getMediaRules","isMediaMatch","supportsRules","supportsRule","getSupportsRules","isSupportsMatch","trim","endsWith","isA","typeName","prototype","toString","apply","isAsymmetric","obj","asymmetricMatch","valueMatches","declaration","minLeft","minRight","s","decs","declarations","toHaveStyleRule","received","property","options","cssString","css","preparedRules","stylesheet","dec","pop","pass","message","chalk","green","red","matchers","defaultClassNameReplacer","componentSelectorClassNamePattern","replaceClassNames","code","classNameReplacer","keyPattern","acc","escapedRegex","getNodes","isArray","child","children","push","getPrettyStylesFromClassNames","prettyStyles","e","console","error","Error","createSerializer","opt","DOMElements","cache","WeakSet","has","print","printer","add","printedVal","delete"],"mappings":"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"}