fuse-box
Version:
Fuse-Box a bundler that does it right
282 lines (262 loc) • 9.88 kB
text/typescript
import { createEnv } from "./../stubs/TestEnvironment";
import { should } from "fuse-test-runner";
import * as path from "path";
import * as appRoot from "app-root-path";
import * as fs from "fs";
import { CSSResourcePlugin } from "../../plugins/stylesheet/CSSResourcePlugin";
import { SassPlugin } from "../../plugins/stylesheet/SassPlugin";
import { CSSPlugin } from "../../plugins/stylesheet/CSSplugin";
import * as fsExtra from "fs-extra";
let tmp, shouldExist;
const makeTestFolder = () => {
tmp = path.join(appRoot.path, ".fusebox", "css-test", new Date().getTime().toString());
fsExtra.ensureDirSync(tmp);
shouldExist = (name) => {
const fname = path.join(tmp, name);;
should(fs.existsSync(fname)).equal(true);
return fs.readFileSync(fname).toString();
};
};
export class CssPluginTest {
"Should require and inline a simple CSS File"() {
return createEnv({
project: {
files: {
"index.ts": `exports.hello = { bar : require("./main.css") }`,
"main.css": "body {}",
},
plugins: [CSSPlugin()],
instructions: "> index.ts",
},
}).then((result) => {
const js = result.projectContents.toString();
should(js).findString(`require("fuse-box-css")("main.css", "body {}")`);
});
}
"Should require and create a simple CSS File"() {
makeTestFolder();
return createEnv({
project: {
files: {
"index.ts": `exports.hello = { bar : require("./main.css") }`,
"main.css": "body {}",
},
plugins: [
CSSPlugin({
outFile: (file) => `${tmp}/${file}`,
}),
],
instructions: "> index.ts",
},
}).then((result) => {
const js = result.projectContents.toString();
shouldExist("main.css");
should(js).findString(`require("fuse-box-css")("main.css");`);
});
}
"Should create a CSS File but not inject it"() {
makeTestFolder();
return createEnv({
project: {
files: {
"index.ts": `exports.hello = { bar : require("./main.css") }`,
"main.css": "h1 {}",
},
plugins: [
CSSPlugin({
outFile: (file) => `${tmp}/${file}`,
inject: false,
}),
],
instructions: "> index.ts",
},
}).then((result) => {
const js = result.projectContents.toString();
shouldExist("main.css");
should(js).notFindString(`require("fuse-box-css")("main.css");`);
});
}
"Should create a CSS File and inject it with inject:true"() {
makeTestFolder();
return createEnv({
project: {
files: {
"index.ts": `exports.hello = { bar : require("./main.css") }`,
"main.css": "h1 {}",
},
plugins: [
CSSPlugin({
outFile: (file) => `${tmp}/${file}`,
inject: true,
}),
],
instructions: "> index.ts",
},
}).then((result) => {
const js = result.projectContents.toString();
shouldExist("main.css");
should(js).findString(`require("fuse-box-css")("main.css");`);
});
}
"Should create a CSS File with a custom injector"() {
makeTestFolder();
return createEnv({
project: {
files: {
"index.ts": `exports.hello = { bar : require("./main.css") }`,
"main.css": "h1 {}",
},
plugins: [
CSSPlugin({
outFile: (file) => `${tmp}/${file}`,
inject: (file) => `custom/${file}`,
}),
],
instructions: "> index.ts",
},
}).then((result) => {
const js = result.projectContents.toString();
shouldExist("main.css");
should(js).findString(`require("fuse-box-css")("custom/main.css");`);
});
}
"Should bundle and inline 2 CSS files into one"() {
makeTestFolder();
return createEnv({
project: {
files: {
"index.ts": `require("./a.css"); require("./b.css") }`,
"a.css": "body {};",
"b.css": "h1 {};",
},
plugins: [CSSPlugin({ group: "app.css" })],
instructions: "> index.ts",
},
}).then((result) => {
const js = result.projectContents.toString();
should(js).findString(`require("fuse-box-css")("app.css", "body {};\\nh1 {};");`);
});
}
"Should bundle and write 2 CSS files into one"() {
makeTestFolder();
return createEnv({
project: {
files: {
"index.ts": `require("./a.css"); require("./b.css") }`,
"a.css": "body {};",
"b.css": "h1 {};",
},
plugins: [CSSPlugin({ group: "app.css", outFile: `${tmp}/app.css` })],
instructions: "> index.ts",
},
}).then((result) => {
const js = result.projectContents.toString();
const contents = shouldExist("app.css");
should(contents)
.findString("body {};")
.findString("h1 {};")
.findString("/*# sourceMappingURL=app.css.map */")
shouldExist("app.css.map");
should(js).findString(`require("fuse-box-css")("app.css");`);
});
}
"Should bundle and write 2 CSS files into one but not inject it"() {
makeTestFolder();
return createEnv({
project: {
files: {
"index.ts": `require("./a.css"); require("./b.css") }`,
"a.css": "body {};",
"b.css": "h1 {};",
},
plugins: [CSSPlugin({ group: "app.css", outFile: `${tmp}/app.css`, inject: false })],
instructions: "> index.ts",
},
}).then((result) => {
const js = result.projectContents.toString();
shouldExist("app.css");
should(js).notFindString(`require("fuse-box-css")("app.css");`);
});
}
"Should bundle and write 2 CSS files into one and inject with a custom injector"() {
makeTestFolder();
return createEnv({
project: {
files: {
"index.ts": `require("./a.css"); require("./b.css") }`,
"a.css": "body {};",
"b.css": "h1 {};",
},
plugins: [
CSSPlugin({
group: "app.css",
outFile: `${tmp}/app.css`,
inject: (file) => `custom/${file}`,
}),
],
instructions: "> index.ts",
},
}).then((result) => {
const js = result.projectContents.toString();
shouldExist("app.css");
should(js).findString(`require("fuse-box-css")("custom/app.css");`);
});
}
"A simple case should with the the CSSResourcePlugin"() {
makeTestFolder();
return createEnv({
project: {
files: {
"index.ts": `exports.hello = { bar : require("./main.css") }`,
"main.css": "body {}",
},
plugins: [
[CSSResourcePlugin({ inline: true }), CSSPlugin()],
],
instructions: "> index.ts",
},
}).then((result) => {
const js = result.projectContents.toString();
should(js).findString(`require("fuse-box-css")("main.css", "body {}")`);
});
}
// failing here....
"Should with the SassPlugin"() {
makeTestFolder();
return createEnv({
project: {
files: {
"index.ts": `require("./a.scss"); require("./b.scss") }`,
"a.scss": "body {color:red};",
"b.scss": "h1 {color:red};",
},
plugins: [
[SassPlugin(), CSSPlugin({ group: `all.css` })],
],
instructions: "> index.ts",
},
}).then((result) => {
const js = result.projectContents.toString();
should(js).findString(`require("fuse-box-css")("all.css", "`);
});
}
"Should with the SassPlugin + CSSResourcePlugin"() {
makeTestFolder();
return createEnv({
project: {
files: {
"index.ts": `require("./a.scss"); require("./b.scss") }`,
"a.scss": "body {color:red};",
"b.scss": "h1 {color:red};",
},
plugins: [
[SassPlugin(), CSSResourcePlugin({ inline: true }), CSSPlugin({ group: `all.css` })],
],
instructions: "> index.ts",
},
}).then((result) => {
const js = result.projectContents.toString();
should(js).findString(`require("fuse-box-css")("all.css", "`);
});
}
}