css-mqpacker
Version:
Pack same CSS media query rules into one using PostCSS
127 lines (113 loc) • 2.4 kB
JavaScript
const fs = require("fs");
const path = require("path");
const postcss = require("postcss");
const mqpacker = require("../index");
exports["Public API"] = test => {
const input = `.foo {
z-index: 0;
}
@media (min-width:1px) {
.foo {
z-index: 1;
}
}
`;
const expected = postcss().process(input).css;
test.expect(2);
test.strictEqual(postcss([mqpacker()]).process(input).css, expected);
test.strictEqual(mqpacker.pack(input).css, expected);
test.done();
};
exports["Option: PostCSS options"] = test => {
const input = `.foo {
z-index: 0;
}
@media (min-width:1px) {
.foo {
z-index: 1;
}
}
/*# sourceMappingURL=from.css.map */
`;
const opts = {
from: "from.css",
map: {
inline: false
}
};
const expected = postcss().process(input, opts);
const processed = mqpacker.pack(input, opts);
test.expect(2);
test.strictEqual(processed.css, expected.css);
test.deepEqual(processed.map, expected.map);
test.done();
};
exports["Option: sort"] = test => {
const expected = `.foo {
z-index: 0;
}
@media (min-width: 1px) {
.foo {
z-index: 1;
}
}
@media (min-width: 2px) {
.foo {
z-index: 2;
}
}
`;
const input = `.foo {
z-index: 0;
}
@media (min-width: 2px) {
.foo {
z-index: 2;
}
}
@media (min-width: 1px) {
.foo {
z-index: 1;
}
}
`;
const opts = {
sort: true
};
test.expect(4);
test.notStrictEqual(mqpacker.pack(input).css, expected);
test.strictEqual(mqpacker.pack(input, opts).css, expected);
test.notStrictEqual(
postcss([mqpacker()]).process(input).css,
postcss([mqpacker(opts)]).process(input).css
);
test.strictEqual(
mqpacker.pack(input, {
sort: (c, d) => c.localeCompare(d)
}).css,
expected
);
test.done();
};
exports["Real CSS"] = test => {
const testCases = fs.readdirSync(path.join(__dirname, "fixtures"));
const loadExpected = file =>
fs.readFileSync(path.join(__dirname, "expected", file), "utf8");
const loadInput = file =>
fs.readFileSync(path.join(__dirname, "fixtures", file), "utf8");
test.expect(testCases.length);
testCases.forEach(testCase => {
const opts = {
sort: false
};
if (testCase.indexOf("sort_") === 0) {
opts.sort = true;
}
test.strictEqual(
mqpacker.pack(loadInput(testCase), opts).css,
loadExpected(testCase),
testCase
);
});
test.done();
};