import Styletron from "../server";
test("StyletronServer toCss", () => {
const styletron = new Styletron();
expect(styletron.getCss()).toBe("");
injectFixtureStyles(styletron);
expect(styletron.getCss()).toBe(
".ae{color:red}.af{color:green}.aj:hover{display:none}.ak{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.al{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex}@media (min-width: 600px){.ah{color:red}}@media (min-width: 800px){.ag{color:green}.ai:hover{color:green}}",
);
injectFixtureStyles(styletron);
expect(styletron.getCss()).toBe(
".ae{color:red}.af{color:green}.aj:hover{display:none}.ak{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.al{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex}@media (min-width: 600px){.ah{color:red}}@media (min-width: 800px){.ag{color:green}.ai:hover{color:green}}",
);
injectFixtureKeyframes(styletron);
expect(styletron.getCss()).toBe(
"@keyframes ae{from{color:purple}50%{color:yellow}to{color:orange}}.ae{color:red}.af{color:green}.aj:hover{display:none}.ak{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.al{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex}@media (min-width: 600px){.ah{color:red}}@media (min-width: 800px){.ag{color:green}.ai:hover{color:green}}",
);
});
test("StyletronServer getStylesheets", () => {
const styletron = new Styletron();
expect(styletron.getStylesheets()).toEqual([{css: "", attrs: {}}]);
injectFixtureStyles(styletron);
expect(styletron.getStylesheets()).toEqual([
{
css: ".ae{color:red}.af{color:green}.aj:hover{display:none}.ak{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.al{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex}",
attrs: {},
},
{css: ".ah{color:red}", attrs: {media: "(min-width: 600px)"}},
{
css: ".ag{color:green}.ai:hover{color:green}",
attrs: {media: "(min-width: 800px)"},
},
]);
injectFixtureKeyframes(styletron);
expect(styletron.getStylesheets()).toEqual([
{
css: "@keyframes ae{from{color:purple}50%{color:yellow}to{color:orange}}",
attrs: {"data-hydrate": "keyframes"},
},
{
css: ".ae{color:red}.af{color:green}.aj:hover{display:none}.ak{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.al{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex}",
attrs: {},
},
{css: ".ah{color:red}", attrs: {media: "(min-width: 600px)"}},
{
css: ".ag{color:green}.ai:hover{color:green}",
attrs: {media: "(min-width: 800px)"},
},
]);
injectFixtureFontFace(styletron);
expect(styletron.getStylesheets()).toEqual([
{
css: "@keyframes ae{from{color:purple}50%{color:yellow}to{color:orange}}",
attrs: {"data-hydrate": "keyframes"},
},
{
css: "@font-face{font-family:ae;src:local('Roboto')}",
attrs: {"data-hydrate": "font-face"},
},
{
css: ".ae{color:red}.af{color:green}.aj:hover{display:none}.ak{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.al{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex}",
attrs: {},
},
{css: ".ah{color:red}", attrs: {media: "(min-width: 600px)"}},
{
css: ".ag{color:green}.ai:hover{color:green}",
attrs: {media: "(min-width: 800px)"},
},
]);
});
test("StyletronServer getStylesheetsHtml ", () => {
const styletron = new Styletron();
expect(styletron.getStylesheetsHtml()).toBe(
'',
);
injectFixtureStyles(styletron);
expect(styletron.getStylesheetsHtml()).toBe(
'',
);
injectFixtureKeyframes(styletron);
expect(styletron.getStylesheetsHtml()).toBe(
'',
);
injectFixtureFontFace(styletron);
expect(styletron.getStylesheetsHtml()).toBe(
'',
);
});
test("StyletronServer prefix option", () => {
const styletron = new Styletron({prefix: "foo_"});
expect(styletron.renderStyle({color: "red"})).toBe("foo_ae");
expect(injectFixtureFontFace(styletron)).toBe("foo_ae");
expect(injectFixtureKeyframes(styletron)).toBe("foo_ae");
expect(styletron.getStylesheets()).toEqual([
{
css: "@keyframes foo_ae{from{color:purple}50%{color:yellow}to{color:orange}}",
attrs: {"data-hydrate": "keyframes"},
},
{
css: "@font-face{font-family:foo_ae;src:local('Roboto')}",
attrs: {"data-hydrate": "font-face"},
},
{css: ".foo_ae{color:red}", attrs: {}},
]);
});
function injectFixtureStyles(styletron) {
styletron.renderStyle({color: "red"});
styletron.renderStyle({color: "green"});
styletron.renderStyle({
"@media (min-width: 800px)": {
color: "green",
},
});
// should be added before "min-width: 800px" query
// test that Styletron properly sort media queries
styletron.renderStyle({
"@media (min-width: 600px)": {
color: "red",
},
});
styletron.renderStyle({
"@media (min-width: 800px)": {
":hover": {
color: "green",
},
},
});
styletron.renderStyle({
zIndex: void 0, // Should be silently ignored
});
styletron.renderStyle({
// null values were historically supported (albeit erronesouly)
opacity: null, // Should be silently ignored
});
styletron.renderStyle({
":hover": {
display: "none",
},
});
styletron.renderStyle({
userSelect: "none",
});
styletron.renderStyle({
display: "flex",
});
}
function injectFixtureKeyframes(styletron) {
return styletron.renderKeyframes({
from: {
color: "purple",
},
"50%": {
color: "yellow",
},
to: {
color: "orange",
},
});
}
function injectFixtureFontFace(styletron) {
return styletron.renderFontFace({
src: "local('Roboto')",
});
}