2021-12-27 16:41:54 +01:00

155 lines
3.8 KiB
JavaScript

const autoprefixer = require("autoprefixer"),
postCssImport = require("postcss-import"),
{ build } = require("esbuild"),
postCSS = require("../dist"),
{ assert } = require("chai"),
fs = require("fs");
describe("PostCSS esbuild tests", () => {
it("Works with basic CSS imports", (done) => {
test(["tests/basic.ts"])
.then((res) => {
assert(res);
done();
})
.catch(done);
});
it("Works with preprocessors", (done) => {
test(["tests/preprocessors.ts"])
.then((res) => {
assert(res);
done();
})
.catch(done);
});
it("Works with CSS modules", (done) => {
test(["tests/modules.ts"])
.then((res) => {
assert(res);
done();
})
.catch(done);
});
it("Works with CSS as entrypoint", (done) => {
test(["tests/styles.css", "tests/styles2.css"])
.then((res) => {
assert(res);
done();
})
.catch(done);
});
it("Works with node_modules import", (done) => {
test(["tests/node_modules.ts"])
.then((res) => {
assert(res);
done();
})
.catch(done);
});
it("Works while waching css files directly", (done) => {
let notTriggerTimeout = null;
build({
entryPoints: ["tests/watch.ts"],
bundle: true,
outdir: "dist",
watch: {
onRebuild: (error, result) => {
notTriggerTimeout = null;
if (error) return done(error);
assert(result);
done();
}
},
plugins: [
postCSS.default({
plugins: [autoprefixer]
})
]
})
.then(() => {
// test if modifying the css actually triggers the onRebuild event
const data = `.Test { display: block; }`;
fs.writeFile("./styles/watch.css", data, (err) => {
if (err) return done(err);
notTriggerTimeout = setTimeout(() => {
done("Watch file not triggered!");
}, 1000);
});
})
.catch(() => process.exit(1));
});
it("Works while waching css files through dependencies", (done) => {
let notTriggerTimeout = null;
build({
entryPoints: ["tests/watch2.ts"],
bundle: true,
outdir: "dist",
watch: {
onRebuild: (error, result) => {
notTriggerTimeout = null;
if (error) return done(error);
assert(result);
done();
}
},
plugins: [
postCSS.default({
plugins: [autoprefixer, postCssImport]
})
]
})
.then(() => {
// test if modifying the css actually triggers the onRebuild event
const data = `.Test { display: block; }`;
fs.writeFile("./styles/watch3.css", data, (err) => {
if (err) return done(err);
notTriggerTimeout = setTimeout(() => {
done("Watch file not triggered!");
}, 1000);
});
})
.catch(() => process.exit(1));
});
it("Works with custom module function", (done) => {
let testFilename = null;
build({
entryPoints: ["tests/basic.ts"],
bundle: true,
outdir: "dist",
plugins: [
postCSS.default({
plugins: [autoprefixer, postCssImport],
modules: true,
fileIsModule: (filename) => {
testFilename = filename;
return false;
}
})
]
})
.then(() => {
// ensure the proper filename was passed
assert.match(testFilename, /styles\/basic\.css/);
})
.catch((e) => {
console.error(e);
process.exit(1);
});
});
});
function test(entryPoint) {
return build({
entryPoints: entryPoint,
bundle: true,
outdir: "dist",
plugins: [
postCSS.default({
plugins: [autoprefixer]
})
]
}).catch(() => process.exit(1));
}