Socket
Socket
Sign inDemoInstall

jest-emotion

Package Overview
Dependencies
Maintainers
2
Versions
56
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

jest-emotion - npm Package Compare versions

Comparing version 10.0.10 to 10.0.11

CHANGELOG.md

51

dist/jest-emotion.browser.cjs.js
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
Object.defineProperty(exports, '__esModule', {
value: true
});
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
function _interopDefault(ex) {
return ex && typeof ex === 'object' && 'default' in ex ? ex['default'] : ex;
}
var chalk = _interopDefault(require('chalk'));
var css = require('css');
var _objectAssign = _interopDefault(require('object-assign'));
var _extends = _interopDefault(require('@babel/runtime/helpers/extends'));
function _objectWithoutPropertiesLoose(source, excluded) {
if (source == null) return {};
var target = {};
var sourceKeys = Object.keys(source);
var key, i;
var _objectWithoutPropertiesLoose = _interopDefault(require('@babel/runtime/helpers/objectWithoutPropertiesLoose'));
for (i = 0; i < sourceKeys.length; i++) {
key = sourceKeys[i];
if (excluded.indexOf(key) >= 0) continue;
target[key] = source[key];
}
var css = require('css');
return target;
}
var chalk = _interopDefault(require('chalk'));

@@ -31,2 +24,3 @@ function defaultClassNameReplacer(className, index) {

var componentSelectorClassNamePattern = /^e[a-zA-Z0-9]+[0-9]+$/;
var replaceClassNames = function replaceClassNames(classNames, styles, code, keys, classNameReplacer) {

@@ -93,9 +87,13 @@ if (classNameReplacer === void 0) {

}
function isEmotionCssPropElementType(val) {
return val.$$typeof === Symbol.for('react.element') && val.type.$$typeof === Symbol.for('react.forward_ref') && val.type.displayName === 'EmotionCssPropInternal';
}
function isEmotionCssPropEnzymeElement(val) {
return val.$$typeof === Symbol.for('react.test.json') && val.type === 'EmotionCssPropInternal';
}
var domElementPattern = /^((HTML|SVG)\w*)?Element$/;
function isDOMElement(val) {

@@ -126,4 +124,6 @@ return val.nodeType === 1 && val.constructor && val.constructor.name && domElementPattern.test(val.constructor.name);

}
var keyframesPattern = /^@keyframes\s+(animation-[^{\s]+)+/;
var removeCommentPattern = /\/\*[\s\S]*?\*\//g;
function getStylesFromClassNames(classNames, elements) {

@@ -193,2 +193,3 @@ if (!classNames.length) {

}
function getStyleElements() {

@@ -212,2 +213,3 @@ var elements = Array.from(document.querySelectorAll('style[data-emotion]')); // $FlowFixMe

}
function hasClassNames(classNames, selectors, target) {

@@ -224,5 +226,6 @@ // selectors is the classNames of specific css rule

return selector.includes(target);
return target instanceof RegExp ? target.test(selector) : selector.includes(target);
});
}
function getMediaRules(rules, media) {

@@ -236,3 +239,2 @@ return rules.filter(function (rule) {

}
/*

@@ -243,2 +245,3 @@ * Taken from

function isA(typeName, value) {

@@ -369,3 +372,3 @@ return Object.prototype.toString.apply(value) === "[object " + typeName + "]";

var _props = props,
css$$1 = _props.css,
css = _props.css,
__EMOTION_TYPE_PLEASE_DO_NOT_USE__ = _props.__EMOTION_TYPE_PLEASE_DO_NOT_USE__,

@@ -393,3 +396,3 @@ __EMOTION_LABEL_PLEASE_DO_NOT_USE__ = _props.__EMOTION_LABEL_PLEASE_DO_NOT_USE__,

if (isEmotionCssPropElementType(val)) {
return printer(_objectAssign({}, val, {
return printer(_extends({}, val, {
props: filterEmotionProps(val.props),

@@ -424,2 +427,3 @@ type: val.props.__EMOTION_TYPE_PLEASE_DO_NOT_USE__

test = _createSerializer.test;
var index = {

@@ -429,7 +433,6 @@ print: print,

};
exports.createSerializer = createSerializer;
exports.default = index;
exports.matchers = matchers;
exports.print = print;
exports.test = test;
exports.default = index;
exports.matchers = matchers;
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
Object.defineProperty(exports, '__esModule', {
value: true
});
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
function _interopDefault(ex) {
return ex && typeof ex === 'object' && 'default' in ex ? ex['default'] : ex;
}
var chalk = _interopDefault(require('chalk'));
var css = require('css');
var _objectAssign = _interopDefault(require('object-assign'));
var _extends = _interopDefault(require('@babel/runtime/helpers/extends'));
function _objectWithoutPropertiesLoose(source, excluded) {
if (source == null) return {};
var target = {};
var sourceKeys = Object.keys(source);
var key, i;
var _objectWithoutPropertiesLoose = _interopDefault(require('@babel/runtime/helpers/objectWithoutPropertiesLoose'));
for (i = 0; i < sourceKeys.length; i++) {
key = sourceKeys[i];
if (excluded.indexOf(key) >= 0) continue;
target[key] = source[key];
}
var css = require('css');
return target;
}
var chalk = _interopDefault(require('chalk'));

@@ -31,2 +24,3 @@ function defaultClassNameReplacer(className, index) {

var componentSelectorClassNamePattern = /^e[a-zA-Z0-9]+[0-9]+$/;
var replaceClassNames = function replaceClassNames(classNames, styles, code, keys, classNameReplacer) {

@@ -93,9 +87,13 @@ if (classNameReplacer === void 0) {

}
function isEmotionCssPropElementType(val) {
return val.$$typeof === Symbol.for('react.element') && val.type.$$typeof === Symbol.for('react.forward_ref') && val.type.displayName === 'EmotionCssPropInternal';
}
function isEmotionCssPropEnzymeElement(val) {
return val.$$typeof === Symbol.for('react.test.json') && val.type === 'EmotionCssPropInternal';
}
var domElementPattern = /^((HTML|SVG)\w*)?Element$/;
function isDOMElement(val) {

@@ -126,4 +124,6 @@ return val.nodeType === 1 && val.constructor && val.constructor.name && domElementPattern.test(val.constructor.name);

}
var keyframesPattern = /^@keyframes\s+(animation-[^{\s]+)+/;
var removeCommentPattern = /\/\*[\s\S]*?\*\//g;
function getStylesFromClassNames(classNames, elements) {

@@ -193,2 +193,3 @@ if (!classNames.length) {

}
function getStyleElements() {

@@ -212,2 +213,3 @@ var elements = Array.from(document.querySelectorAll('style[data-emotion]')); // $FlowFixMe

}
function hasClassNames(classNames, selectors, target) {

@@ -224,5 +226,6 @@ // selectors is the classNames of specific css rule

return selector.includes(target);
return target instanceof RegExp ? target.test(selector) : selector.includes(target);
});
}
function getMediaRules(rules, media) {

@@ -236,3 +239,2 @@ return rules.filter(function (rule) {

}
/*

@@ -243,2 +245,3 @@ * Taken from

function isA(typeName, value) {

@@ -369,3 +372,3 @@ return Object.prototype.toString.apply(value) === "[object " + typeName + "]";

var _props = props,
css$$1 = _props.css,
css = _props.css,
__EMOTION_TYPE_PLEASE_DO_NOT_USE__ = _props.__EMOTION_TYPE_PLEASE_DO_NOT_USE__,

@@ -393,3 +396,3 @@ __EMOTION_LABEL_PLEASE_DO_NOT_USE__ = _props.__EMOTION_LABEL_PLEASE_DO_NOT_USE__,

if (isEmotionCssPropElementType(val)) {
return printer(_objectAssign({}, val, {
return printer(_extends({}, val, {
props: filterEmotionProps(val.props),

@@ -424,2 +427,3 @@ type: val.props.__EMOTION_TYPE_PLEASE_DO_NOT_USE__

test = _createSerializer.test;
var index = {

@@ -429,7 +433,6 @@ print: print,

};
exports.createSerializer = createSerializer;
exports.default = index;
exports.matchers = matchers;
exports.print = print;
exports.test = test;
exports.default = index;
exports.matchers = matchers;
"use strict";
function _interopDefault(ex) {
return ex && "object" == typeof ex && "default" in ex ? ex.default : ex;
}
Object.defineProperty(exports, "__esModule", { value: !0 });
var chalk = _interopDefault(require("chalk")),
css = require("css"),
_objectAssign = _interopDefault(require("object-assign"));
function _objectWithoutPropertiesLoose(source, excluded) {
if (null == source) return {};
var key,
i,
target = {},
sourceKeys = Object.keys(source);
for (i = 0; i < sourceKeys.length; i++)
(key = sourceKeys[i]),
0 <= excluded.indexOf(key) || (target[key] = source[key]);
return target;
}
Object.defineProperty(exports, "__esModule", {
value: !0
});
var _extends = _interopDefault(require("@babel/runtime/helpers/extends")), _objectWithoutPropertiesLoose = _interopDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose")), css = require("css"), chalk = _interopDefault(require("chalk"));
function defaultClassNameReplacer(className, index) {
return "emotion-" + index;
}
var componentSelectorClassNamePattern = /^e[a-zA-Z0-9]+[0-9]+$/,
replaceClassNames = function(
classNames,
styles,
code,
keys,
classNameReplacer
) {
void 0 === classNameReplacer &&
(classNameReplacer = defaultClassNameReplacer);
var index = 0,
keyPattern = new RegExp("^(" + keys.join("|") + ")-");
return classNames.reduce(function(acc, className) {
if (
keyPattern.test(className) ||
componentSelectorClassNamePattern.test(className)
) {
var escapedRegex = new RegExp(
className.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"),
"g"
);
return acc.replace(escapedRegex, classNameReplacer(className, index++));
}
return acc;
}, styles + (styles ? "\n\n" : "") + code);
},
RULE_TYPES = { media: "media", rule: "rule" };
var componentSelectorClassNamePattern = /^e[a-zA-Z0-9]+[0-9]+$/, replaceClassNames = function(classNames, styles, code, keys, classNameReplacer) {
void 0 === classNameReplacer && (classNameReplacer = defaultClassNameReplacer);
var index = 0, keyPattern = new RegExp("^(" + keys.join("|") + ")-");
return classNames.reduce(function(acc, className) {
if (keyPattern.test(className) || componentSelectorClassNamePattern.test(className)) {
var escapedRegex = new RegExp(className.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), "g");
return acc.replace(escapedRegex, classNameReplacer(className, index++));
}
return acc;
}, styles + (styles ? "\n\n" : "") + code);
}, RULE_TYPES = {
media: "media",
rule: "rule"
};
function getClassNames(selectors, classes) {
return classes ? selectors.concat(classes.split(" ")) : selectors;
}
function getClassNamesFromTestRenderer(selectors, _ref) {
var _ref$props = _ref.props,
props = void 0 === _ref$props ? {} : _ref$props;
var _ref$props = _ref.props, props = void 0 === _ref$props ? {} : _ref$props;
return getClassNames(selectors, props.className || props.class);
}
function shouldDive(node) {
return "function" == typeof node.dive && "string" != typeof node.type();
}
function isTagWithClassName(node) {
return node.prop("className") && "string" == typeof node.type();
}
function getClassNamesFromEnzyme(selectors, node) {
var components = (shouldDive(node) ? node.dive() : node).findWhere(
isTagWithClassName
);
return getClassNames(
selectors,
components.length && components.first().prop("className")
);
var components = (shouldDive(node) ? node.dive() : node).findWhere(isTagWithClassName);
return getClassNames(selectors, components.length && components.first().prop("className"));
}
function getClassNamesFromCheerio(selectors, node) {
return getClassNames(selectors, node.attr("class"));
}
function getClassNamesFromDOMElement(selectors, node) {
return getClassNames(selectors, node.getAttribute("class"));
}
function isReactElement(val) {
return val.$$typeof === Symbol.for("react.test.json");
}
function isEmotionCssPropElementType(val) {
return (
val.$$typeof === Symbol.for("react.element") &&
val.type.$$typeof === Symbol.for("react.forward_ref") &&
"EmotionCssPropInternal" === val.type.displayName
);
return val.$$typeof === Symbol.for("react.element") && val.type.$$typeof === Symbol.for("react.forward_ref") && "EmotionCssPropInternal" === val.type.displayName;
}
function isEmotionCssPropEnzymeElement(val) {
return (
val.$$typeof === Symbol.for("react.test.json") &&
"EmotionCssPropInternal" === val.type
);
return val.$$typeof === Symbol.for("react.test.json") && "EmotionCssPropInternal" === val.type;
}
var domElementPattern = /^((HTML|SVG)\w*)?Element$/;
function isDOMElement(val) {
return (
1 === val.nodeType &&
val.constructor &&
val.constructor.name &&
domElementPattern.test(val.constructor.name)
);
return 1 === val.nodeType && val.constructor && val.constructor.name && domElementPattern.test(val.constructor.name);
}
function isEnzymeElement(val) {
return "function" == typeof val.findWhere;
}
function isCheerioElement(val) {
return "[cheerio object]" === val.cheerio;
}
function getClassNamesFromNodes(nodes) {
return nodes.reduce(function(selectors, node) {
return isReactElement(node)
? getClassNamesFromTestRenderer(selectors, node)
: isEnzymeElement(node)
? getClassNamesFromEnzyme(selectors, node)
: isCheerioElement(node)
? getClassNamesFromCheerio(selectors, node)
: getClassNamesFromDOMElement(selectors, node);
return isReactElement(node) ? getClassNamesFromTestRenderer(selectors, node) : isEnzymeElement(node) ? getClassNamesFromEnzyme(selectors, node) : isCheerioElement(node) ? getClassNamesFromCheerio(selectors, node) : getClassNamesFromDOMElement(selectors, node);
}, []);
}
var keyframesPattern = /^@keyframes\s+(animation-[^{\s]+)+/,
removeCommentPattern = /\/\*[\s\S]*?\*\//g;
var keyframesPattern = /^@keyframes\s+(animation-[^{\s]+)+/, removeCommentPattern = /\/\*[\s\S]*?\*\//g;
function getStylesFromClassNames(classNames, elements) {

@@ -127,10 +100,7 @@ if (!classNames.length) return "";

if (!keys.length) return "";
var keyPatten = new RegExp("^(" + keys.join("|") + ")-"),
filteredClassNames = classNames.filter(function(className) {
return keyPatten.test(className);
});
var keyPatten = new RegExp("^(" + keys.join("|") + ")-"), filteredClassNames = classNames.filter(function(className) {
return keyPatten.test(className);
});
if (!filteredClassNames.length) return "";
var selectorPattern = new RegExp("\\.(" + filteredClassNames.join("|") + ")"),
keyframes = {},
styles = "";
var selectorPattern = new RegExp("\\.(" + filteredClassNames.join("|") + ")"), keyframes = {}, styles = "";
elements.forEach(function(element) {

@@ -142,103 +112,76 @@ var rule = element.textContent || "";

var name = match[1];
void 0 === keyframes[name] && (keyframes[name] = ""),
(keyframes[name] += rule);
void 0 === keyframes[name] && (keyframes[name] = ""), keyframes[name] += rule;
}
});
var keyframeNameKeys = Object.keys(keyframes),
keyframesStyles = "";
var keyframeNameKeys = Object.keys(keyframes), keyframesStyles = "";
if (keyframeNameKeys.length) {
var keyframesNamePattern = new RegExp(keyframeNameKeys.join("|"), "g"),
keyframesNameCache = {},
index = 0;
(styles = styles.replace(keyframesNamePattern, function(name) {
return (
void 0 === keyframesNameCache[name] &&
((keyframesNameCache[name] = "animation-" + index++),
(keyframesStyles += keyframes[name])),
keyframesNameCache[name]
);
})),
(keyframesStyles = keyframesStyles.replace(keyframesNamePattern, function(
value
) {
return keyframesNameCache[value];
}));
var keyframesNamePattern = new RegExp(keyframeNameKeys.join("|"), "g"), keyframesNameCache = {}, index = 0;
styles = styles.replace(keyframesNamePattern, function(name) {
return void 0 === keyframesNameCache[name] && (keyframesNameCache[name] = "animation-" + index++,
keyframesStyles += keyframes[name]), keyframesNameCache[name];
}), keyframesStyles = keyframesStyles.replace(keyframesNamePattern, function(value) {
return keyframesNameCache[value];
});
}
return (keyframesStyles + styles).replace(removeCommentPattern, "");
}
function getStyleElements() {
return Array.from(document.querySelectorAll("style[data-emotion]"));
}
var unique = function(arr) {
return Array.from(new Set(arr));
};
function getKeys(elements) {
return unique(
elements.map(function(element) {
return element.getAttribute("data-emotion");
})
).filter(Boolean);
return unique(elements.map(function(element) {
return element.getAttribute("data-emotion");
})).filter(Boolean);
}
function hasClassNames(classNames, selectors, target) {
return selectors.some(function(selector) {
return target
? selector.includes(target)
: classNames.includes(selector.slice(1));
return target ? target instanceof RegExp ? target.test(selector) : selector.includes(target) : classNames.includes(selector.slice(1));
});
}
function getMediaRules(rules, media) {
return rules
.filter(function(rule) {
var isMediaMatch =
!!rule.media &&
rule.media.replace(/\s/g, "").includes(media.replace(/\s/g, ""));
return rule.type === RULE_TYPES.media && isMediaMatch;
})
.reduce(function(mediaRules, mediaRule) {
return mediaRules.concat(mediaRule.rules);
}, []);
return rules.filter(function(rule) {
var isMediaMatch = !!rule.media && rule.media.replace(/\s/g, "").includes(media.replace(/\s/g, ""));
return rule.type === RULE_TYPES.media && isMediaMatch;
}).reduce(function(mediaRules, mediaRule) {
return mediaRules.concat(mediaRule.rules);
}, []);
}
function isA(typeName, value) {
return Object.prototype.toString.apply(value) === "[object " + typeName + "]";
}
function isAsymmetric(obj) {
return obj && isA("Function", obj.asymmetricMatch);
}
function valueMatches(declaration, value) {
return value instanceof RegExp
? value.test(declaration.value)
: isAsymmetric(value)
? value.asymmetricMatch(declaration.value)
: value === declaration.value;
return value instanceof RegExp ? value.test(declaration.value) : isAsymmetric(value) ? value.asymmetricMatch(declaration.value) : value === declaration.value;
}
function toHaveStyleRule(received, property, value, options) {
void 0 === options && (options = {});
var _options = options,
target = _options.target,
media = _options.media,
classNames = getClassNamesFromNodes([received]),
cssString = getStylesFromClassNames(classNames, getStyleElements()),
preparedRules = css.parse(cssString).stylesheet.rules;
var _options = options, target = _options.target, media = _options.media, classNames = getClassNamesFromNodes([ received ]), cssString = getStylesFromClassNames(classNames, getStyleElements()), preparedRules = css.parse(cssString).stylesheet.rules;
media && (preparedRules = getMediaRules(preparedRules, media));
var declaration = preparedRules
.filter(function(rule) {
return (
rule.type === RULE_TYPES.rule &&
hasClassNames(classNames, rule.selectors, target)
);
})
.reduce(function(decs, rule) {
return decs.concat(rule.declarations);
}, [])
.filter(function(dec) {
return "declaration" === dec.type && dec.property === property;
})
.pop();
if (!declaration)
return {
pass: !1,
message: function() {
return "Property not found: " + property;
}
};
var declaration = preparedRules.filter(function(rule) {
return rule.type === RULE_TYPES.rule && hasClassNames(classNames, rule.selectors, target);
}).reduce(function(decs, rule) {
return decs.concat(rule.declarations);
}, []).filter(function(dec) {
return "declaration" === dec.type && dec.property === property;
}).pop();
if (!declaration) return {
pass: !1,
message: function() {
return "Property not found: " + property;
}
};
var pass = valueMatches(declaration, value);

@@ -248,21 +191,15 @@ return {

message: function() {
return (
"Expected " +
property +
(pass ? " not " : " ") +
"to match:\n " +
chalk.green(value) +
"\nReceived:\n " +
chalk.red(declaration.value)
);
return "Expected " + property + (pass ? " not " : " ") + "to match:\n " + chalk.green(value) + "\nReceived:\n " + chalk.red(declaration.value);
}
};
}
var matchers = { toHaveStyleRule: toHaveStyleRule };
var matchers = {
toHaveStyleRule: toHaveStyleRule
};
function getNodes(node, nodes) {
if ((void 0 === nodes && (nodes = []), node.children)) {
var _iterator = node.children,
_isArray = Array.isArray(_iterator),
_i = 0;
for (_iterator = _isArray ? _iterator : _iterator[Symbol.iterator](); ; ) {
if (void 0 === nodes && (nodes = []), node.children) {
var _iterator = node.children, _isArray = Array.isArray(_iterator), _i = 0;
for (_iterator = _isArray ? _iterator : _iterator[Symbol.iterator](); ;) {
var _ref;

@@ -281,58 +218,33 @@ if (_isArray) {

}
function getPrettyStylesFromClassNames(classNames, elements) {
var prettyStyles,
styles = getStylesFromClassNames(classNames, elements);
var prettyStyles, styles = getStylesFromClassNames(classNames, elements);
try {
prettyStyles = css.stringify(css.parse(styles));
} catch (e) {
throw (console.error(e),
new Error(
'There was an error parsing the following css: "' + styles + '"'
));
throw console.error(e), new Error('There was an error parsing the following css: "' + styles + '"');
}
return prettyStyles;
}
function filterEmotionProps(props) {
void 0 === props && (props = {});
var _props = props,
rest = (_props.css,
_props.__EMOTION_TYPE_PLEASE_DO_NOT_USE__,
_props.__EMOTION_LABEL_PLEASE_DO_NOT_USE__,
_objectWithoutPropertiesLoose(_props, [
"css",
"__EMOTION_TYPE_PLEASE_DO_NOT_USE__",
"__EMOTION_LABEL_PLEASE_DO_NOT_USE__"
]));
return (rest.css = "unknown styles"), rest;
var _props = props, rest = (_props.css, _props.__EMOTION_TYPE_PLEASE_DO_NOT_USE__,
_props.__EMOTION_LABEL_PLEASE_DO_NOT_USE__, _objectWithoutPropertiesLoose(_props, [ "css", "__EMOTION_TYPE_PLEASE_DO_NOT_USE__", "__EMOTION_LABEL_PLEASE_DO_NOT_USE__" ]));
return rest.css = "unknown styles", rest;
}
function createSerializer(_temp) {
var _ref2 = void 0 === _temp ? {} : _temp,
classNameReplacer = _ref2.classNameReplacer,
_ref2$DOMElements = _ref2.DOMElements,
DOMElements = void 0 === _ref2$DOMElements || _ref2$DOMElements,
cache = new WeakSet();
var _ref2 = void 0 === _temp ? {} : _temp, classNameReplacer = _ref2.classNameReplacer, _ref2$DOMElements = _ref2.DOMElements, DOMElements = void 0 === _ref2$DOMElements || _ref2$DOMElements, cache = new WeakSet();
return {
test: function(val) {
return (
val &&
((!cache.has(val) &&
(isReactElement(val) || (DOMElements && isDOMElement(val)))) ||
isEmotionCssPropEnzymeElement(val) ||
isEmotionCssPropElementType(val))
);
return val && (!cache.has(val) && (isReactElement(val) || DOMElements && isDOMElement(val)) || isEmotionCssPropEnzymeElement(val) || isEmotionCssPropElementType(val));
},
print: function(val, printer) {
if (isEmotionCssPropEnzymeElement(val))
return val.children.map(printer).join("\n");
if (isEmotionCssPropElementType(val))
return printer(
_objectAssign({}, val, {
props: filterEmotionProps(val.props),
type: val.props.__EMOTION_TYPE_PLEASE_DO_NOT_USE__
})
);
var nodes = getNodes(val),
classNames = getClassNamesFromNodes(nodes),
elements = getStyleElements(),
styles = getPrettyStylesFromClassNames(classNames, elements);
if (isEmotionCssPropEnzymeElement(val)) return val.children.map(printer).join("\n");
if (isEmotionCssPropElementType(val)) return printer(_extends({}, val, {
props: filterEmotionProps(val.props),
type: val.props.__EMOTION_TYPE_PLEASE_DO_NOT_USE__
}));
var nodes = getNodes(val), classNames = getClassNamesFromNodes(nodes), elements = getStyleElements(), styles = getPrettyStylesFromClassNames(classNames, elements);
nodes.forEach(cache.add, cache);

@@ -342,20 +254,13 @@ var printedVal = printer(val);

var keys = getKeys(elements);
return replaceClassNames(
classNames,
styles,
printedVal,
keys,
classNameReplacer
);
return replaceClassNames(classNames, styles, printedVal, keys, classNameReplacer);
}
};
}
var _createSerializer = createSerializer(),
print = _createSerializer.print,
test = _createSerializer.test,
index = { print: print, test: test };
(exports.createSerializer = createSerializer),
(exports.print = print),
(exports.test = test),
(exports.default = index),
(exports.matchers = matchers);
var _createSerializer = createSerializer(), print = _createSerializer.print, test = _createSerializer.test, index = {
print: print,
test: test
};
exports.createSerializer = createSerializer, exports.default = index, exports.matchers = matchers,
exports.print = print, exports.test = test;
{
"name": "jest-emotion",
"version": "10.0.10",
"version": "10.0.11",
"description": "Jest utilities for emotion",

@@ -17,6 +17,6 @@ "main": "dist/jest-emotion.cjs.js",

"dependencies": {
"@babel/runtime": "^7.4.3",
"@types/jest": "^23.0.2",
"chalk": "^2.4.1",
"css": "^2.2.1",
"object-assign": "^4.1.1"
"css": "^2.2.1"
},

@@ -53,2 +53,2 @@ "devDependencies": {

}
}
}

@@ -97,15 +97,102 @@ # jest-emotion

test('renders with correct styles', () => {
const H1 = styled.h1`
const Svg = styled('svg')`
width: 100%;
`
const Div = styled('div')`
float: left;
height: 80%;
&:hover {
width: 50px;
}
${Svg} {
fill: green;
}
span {
color: yellow;
}
@media screen and (max-width: 1200px) {
font-size: 14px;
}
`
const tree = renderer.create(<H1>hello world</H1>).toJSON()
const tree = renderer
.create(
<Div>
<Svg />
<span>Test</span>
</Div>
)
.toJSON()
expect(tree).toHaveStyleRule('float', 'left')
expect(tree).not.toHaveStyleRule('color', 'hotpink')
expect(tree).not.toHaveStyleRule('height', '100%')
})
```
You can provide additional options for `toHaveStyleRule` matcher.
`target` - helps to specify css selector or other component
where style rule should be found.
```js
expect(tree).toHaveStyleRule('width', '50px', { target: ':hover' })
```
```js
expect(tree).toHaveStyleRule('color', 'yellow', { target: 'span' })
```
```js
expect(tree).toHaveStyleRule('fill', 'green', { target: `${Svg}` })
```
`media` - specifies the media rule where the matcher
should look for the style property.
```js
expect(tree).toHaveStyleRule('font-size', '14px', {
media: 'screen and (max-width: 1200px)'
})
```
Use `media` and `target` options to assert on rules within media queries and to target nested components, pseudo-classes, and pseudo-elements.
```jsx
import React from 'react'
import renderer from 'react-test-renderer'
import { matchers } from 'jest-emotion'
import styled from '@emotion/styled'
// Add the custom matchers provided by 'jest-emotion'
expect.extend(matchers)
test('renders with correct link styles', () => {
const Container = styled.div`
font-size: 14px;
a {
color: yellow;
}
a:hover {
color: black;
}
@media (min-width: 768px) {
font-size: 16px;
}
`
const tree = renderer.create(<Container>hello world</Container>).toJSON()
expect(tree).toHaveStyleRule('color', 'yellow', { target: /a$/ })
expect(tree).toHaveStyleRule('color', 'black', { target: 'a:hover' })
expect(tree).toHaveStyleRule('font-size', '16px', {
media: '(min-width: 768px)'
})
})
```
## Thanks
Thanks to [Kent C. Dodds](https://twitter.com/kentcdodds) who wrote [jest-glamor-react](https://github.com/kentcdodds/jest-glamor-react) which this library is largely based on. ❤️

@@ -180,3 +180,3 @@ // @flow

selectors: Array<string>,
target: ?string
target?: string | RegExp
): boolean {

@@ -192,3 +192,5 @@ // selectors is the classNames of specific css rule

// check if selector (className) of specific css rule match target
return selector.includes(target)
return target instanceof RegExp
? target.test(selector)
: selector.includes(target)
})

@@ -195,0 +197,0 @@ }

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc