UNPKG

rollup-plugin-sprite

Version:

Create a sprite sheet based on spritesmith for Rollup

125 lines (119 loc) 3.95 kB
import fs from "fs"; import path from "path"; import test from "ava"; import spritesmith from "../index"; import { rollup } from "rollup"; test("should output sprite image and stylesheet", t => { return rollup({ input: "./test/samples/src/main.js", plugins: [ spritesmith({ src: { cwd: "./test/samples/src/images/sprite", glob: "**/*.png" }, target: { image: "./test/samples/src/images/sprite.png", css: "./test/samples/src/scss/sprite.scss" }, cssImageRef: "../images/sprite.png", output: { image: "./test/samples/dist/images/sprite.png", css:"./test/samples/dist/scss/sprite.scss" } }) ] }).then(() => { t.true( fs.existsSync("./test/samples/src/images/sprite.png"), "file exists" ); t.true(fs.existsSync("./test/samples/src/scss/sprite.scss", "file exit")); t.true(fs.existsSync("./test/samples/dist/images/sprite.png", "file exit")); t.true(fs.existsSync("./test/samples/dist/scss/sprite.scss", "file exit")); }); }); test("If set customTemplate option to a template file, should output the custom stylesheet.", t => { return rollup({ input: "./test/samples/src/main.js", plugins: [ spritesmith({ src: { cwd: "./test/samples/src/images/sprite", glob: "**/*.png" }, target: { image: "./test/samples/src/images/sprite.png", css: "./test/samples/src/css/sprite.css" }, customTemplate: "./test/samples/src/customTemplate/css.template.handlebars" }) ] }).then(async () => { t.true( fs.existsSync("./test/samples/src/images/sprite.png"), "file exists" ); t.true(fs.existsSync("./test/samples/src/css/sprite.css", "file exit")); t.true(fs.existsSync("./test/samples/dist/images/sprite.png", "file exit")); let cssContent = await new Promise((resolve, reject) => { fs.readFile("./test/samples/src/css/sprite.css", function(err, data) { if (err) { return reject(null); } return resolve(data.toString()); }); }); t.true(cssContent.indexOf(".custom-icon-hot") > -1); t.true(cssContent.indexOf(".custom-icon-new") > -1); }); }); test("If set customTemplate option to a template function, should output the custom stylesheet.", t => { const templateFunction = function(data) { return data.sprites .map(function(sprite) { return ".custom-N { width: Wpx; height: Hpx; background-image: url(I); background-position: Xpx Ypx; }" .replace("I", sprite.image) .replace("N", sprite.name) .replace("W", sprite.width) .replace("H", sprite.height) .replace("X", sprite.offset_x) .replace("Y", sprite.offset_y); }) .join("\n"); }; return rollup({ input: "./test/samples/src/main.js", plugins: [ spritesmith({ src: { cwd: "./test/samples/src/images/sprite", glob: "**/*.png" }, target: { image: "./test/samples/src/images/sprite.png", css: "./test/samples/src/css/sprite.css" }, customTemplate: templateFunction }) ] }).then(async () => { t.true( fs.existsSync("./test/samples/src/images/sprite.png"), "file exists" ); t.true(fs.existsSync("./test/samples/src/css/sprite.css", "file exit")); t.true(fs.existsSync("./test/samples/dist/images/sprite.png", "file exit")); let cssContent = await new Promise((resolve, reject) => { fs.readFile("./test/samples/src/css/sprite.css", function(err, data) { if (err) { return reject(null); } return resolve(data.toString()); }); }); t.true(cssContent.indexOf(".custom-icon-hot") > -1); t.true(cssContent.indexOf(".custom-icon-new") > -1); }); });