Repository URL to install this package:
Version:
1.2.13 ▾
|
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
// @flow
/**
* This sets up our end-to-end test suite, which essentially makes sure
* our public API works the way we promise/want
*/
const styled_1 = __importDefault(require("../constructors/styled"));
const css_1 = __importDefault(require("../constructors/css"));
const constructWithOptions_1 = __importDefault(require("../constructors/constructWithOptions"));
const StyleSheet_1 = __importDefault(require("../models/StyleSheet"));
const flatten_1 = __importDefault(require("../utils/flatten"));
const stringifyRules_1 = __importDefault(require("../utils/stringifyRules"));
const StyledComponent_1 = __importDefault(require("../models/StyledComponent"));
const ComponentStyle_1 = __importDefault(require("../models/ComponentStyle"));
const css_2 = __importDefault(require("../no-parser/css"));
const flatten_2 = __importDefault(require("../no-parser/flatten"));
const stringifyRules_2 = __importDefault(require("../no-parser/stringifyRules"));
/* Ignore hashing, just return class names sequentially as .a .b .c etc */
let index = 0;
let inputs = {};
let seededClassnames = [];
const classNames = input => {
const seed = seededClassnames.shift();
if (seed)
return seed;
return inputs[input] || (inputs[input] = String.fromCodePoint(97 + index++));
};
exports.seedNextClassnames = (names) => (seededClassnames = names);
exports.resetStyled = (isServer = false) => {
if (!isServer) {
if (!document.head) {
throw new Error(process.env.NODE_ENV !== 'production' ? 'Missing document <head>' : '');
}
document.head.innerHTML = '';
}
StyleSheet_1.default.reset(isServer);
index = 0;
inputs = {};
const ComponentStyle = ComponentStyle_1.default(classNames, flatten_1.default, stringifyRules_1.default);
const constructWithOptions = constructWithOptions_1.default(css_1.default);
const StyledComponent = StyledComponent_1.default(ComponentStyle, constructWithOptions);
return styled_1.default(StyledComponent, constructWithOptions);
};
exports.resetNoParserStyled = () => {
if (!document.head) {
throw new Error(process.env.NODE_ENV !== 'production' ? 'Missing document <head>' : '');
}
document.head.innerHTML = '';
StyleSheet_1.default.reset();
index = 0;
const ComponentStyle = ComponentStyle_1.default(classNames, flatten_2.default, stringifyRules_2.default);
const constructWithOptions = constructWithOptions_1.default(css_2.default);
const StyledComponent = StyledComponent_1.default(ComponentStyle, constructWithOptions);
return styled_1.default(StyledComponent, constructWithOptions);
};
const stripComments = (str) => str.replace(/\/\*.*?\*\/\n?/g, '');
exports.stripWhitespace = (str) => str
.trim()
.replace(/([;\{\}])/g, '$1 ')
.replace(/\s+/g, ' ');
exports.expectCSSMatches = (_expectation, opts = { ignoreWhitespace: true }) => {
// NOTE: This should normalise both CSS strings to make irrelevant mismatches less likely
const expectation = _expectation
.replace(/ {/g, '{')
.replace(/:\s+/g, ':')
.replace(/:\s+;/g, ':;');
const css = Array.from(document.querySelectorAll('style'))
.map(tag => tag.innerHTML)
.join('\n')
.replace(/ {/g, '{')
.replace(/:\s+/g, ':')
.replace(/:\s+;/g, ':;');
if (opts.ignoreWhitespace) {
const stripped = exports.stripWhitespace(stripComments(css));
expect(stripped).toEqual(exports.stripWhitespace(expectation));
return stripped;
}
else {
expect(css).toEqual(expectation);
return css;
}
};
//# sourceMappingURL=utils.js.map