src/index.spec.ts
import postcss from "postcss";
import plugin from "./index";
async function run(input: any, output: any, opts = {}) {
let result = await postcss([plugin(opts)]).process(input, { from: undefined });
expect(result.css).toEqual(output);
expect(result.warnings()).toHaveLength(0);
}
it("handles prehyphened", async () => {
const config = {
"--dark": "prefers-color-scheme: dark",
};
await run("", "@custom-media --dark (prefers-color-scheme: dark)", config);
});
it("handles unhyphenated", async () => {
const config = {
dark: "prefers-color-scheme: dark",
};
await run("", "@custom-media --dark (prefers-color-scheme: dark)", config);
});
it("handles number values as mobile-first", async () => {
const config = {
sm: 600,
md: 800,
lg: 1000,
};
await run(
"",
`@custom-media --sm-only (600px <= width < 800px);
@custom-media --sm (600px <= width);
@custom-media --md-only (800px <= width < 1000px);
@custom-media --md (800px <= width);
@custom-media --lg (1000px <= width)`,
config,
);
});
it("handles number and string values", async () => {
const config = {
"--dark": "prefers-color-scheme: dark",
sm: 600,
md: 800,
};
await run(
"a { color: red; }",
`@custom-media --dark (prefers-color-scheme: dark);
@custom-media --sm-only (600px <= width < 800px);
@custom-media --sm (600px <= width);
@custom-media --md (800px <= width);
a { color: red; }`,
config,
);
});