296 lines
8.6 KiB
JavaScript
296 lines
8.6 KiB
JavaScript
|
import test from "ava";
|
|||
|
import TemplatePassthrough from "../src/TemplatePassthrough";
|
|||
|
|
|||
|
const getTemplatePassthrough = (path, outputDir, inputDir) => {
|
|||
|
if (typeof path === "object") {
|
|||
|
return new TemplatePassthrough(path, outputDir, inputDir);
|
|||
|
}
|
|||
|
return new TemplatePassthrough(
|
|||
|
{ inputPath: path, outputPath: true },
|
|||
|
outputDir,
|
|||
|
inputDir
|
|||
|
);
|
|||
|
};
|
|||
|
|
|||
|
test("Constructor", t => {
|
|||
|
let pass = getTemplatePassthrough("avatar.png", "_site", ".");
|
|||
|
t.truthy(pass);
|
|||
|
t.is(pass.outputPath, true);
|
|||
|
t.is(pass.getOutputPath(), "_site/avatar.png");
|
|||
|
});
|
|||
|
|
|||
|
test("Constructor, input directory in inputPath is stripped", t => {
|
|||
|
let pass = getTemplatePassthrough("src/avatar.png", "_site", "src");
|
|||
|
t.is(pass.outputPath, true);
|
|||
|
t.is(pass.getOutputPath(), "_site/avatar.png");
|
|||
|
|
|||
|
let pass2 = getTemplatePassthrough(
|
|||
|
{ inputPath: "src/avatar.png", outputPath: "avatar.png" },
|
|||
|
"_site",
|
|||
|
"src"
|
|||
|
);
|
|||
|
t.is(pass2.outputPath, "avatar.png");
|
|||
|
t.is(pass2.getOutputPath(), "_site/avatar.png");
|
|||
|
});
|
|||
|
|
|||
|
test("Constructor, input directory in inputPath is stripped, duplicate directory names", t => {
|
|||
|
let pass = getTemplatePassthrough("src/src/avatar.png", "_site", "src");
|
|||
|
t.is(pass.outputPath, true);
|
|||
|
t.is(pass.getOutputPath(), "_site/src/avatar.png");
|
|||
|
|
|||
|
let pass2 = getTemplatePassthrough(
|
|||
|
{ inputPath: "src/src/avatar.png", outputPath: "src/avatar.png" },
|
|||
|
"_site",
|
|||
|
"src"
|
|||
|
);
|
|||
|
t.is(pass2.outputPath, "src/avatar.png");
|
|||
|
t.is(pass2.getOutputPath(), "_site/src/avatar.png");
|
|||
|
});
|
|||
|
|
|||
|
test("Constructor, input directory (object param, directory)", t => {
|
|||
|
let pass = getTemplatePassthrough(
|
|||
|
{ inputPath: "src/test", outputPath: "test" },
|
|||
|
"_site",
|
|||
|
"src"
|
|||
|
);
|
|||
|
t.is(pass.outputPath, "test");
|
|||
|
t.is(pass.getOutputPath(), "_site/test");
|
|||
|
});
|
|||
|
|
|||
|
test("Constructor, input directory, path missing input directory", t => {
|
|||
|
let pass = getTemplatePassthrough("avatar.png", "_site", "src");
|
|||
|
t.is(pass.outputPath, true);
|
|||
|
t.is(pass.getOutputPath(), "_site/avatar.png");
|
|||
|
|
|||
|
let pass2 = getTemplatePassthrough(
|
|||
|
{ inputPath: "avatar.png", outputPath: "avatar.png" },
|
|||
|
"_site",
|
|||
|
"src"
|
|||
|
);
|
|||
|
t.is(pass2.outputPath, "avatar.png");
|
|||
|
t.is(pass2.getOutputPath(), "_site/avatar.png");
|
|||
|
});
|
|||
|
|
|||
|
test("Constructor Dry Run", t => {
|
|||
|
let pass = getTemplatePassthrough("avatar.png", "_site", ".");
|
|||
|
pass.setDryRun(true);
|
|||
|
t.is(pass.outputPath, true);
|
|||
|
t.is(pass.isDryRun, true);
|
|||
|
});
|
|||
|
|
|||
|
test("Origin path isn’t included in output when targeting a directory", t => {
|
|||
|
let pass = getTemplatePassthrough("img", "_site", "_src");
|
|||
|
t.is(pass.outputPath, true);
|
|||
|
t.is(pass.getOutputPath(), "_site/img");
|
|||
|
});
|
|||
|
|
|||
|
test("Origin path isn’t included in output when targeting a directory several levels deep", t => {
|
|||
|
let pass = getTemplatePassthrough("img", "_site", "_src/subdir");
|
|||
|
t.is(pass.outputPath, true);
|
|||
|
t.is(pass.getOutputPath(), "_site/img");
|
|||
|
});
|
|||
|
|
|||
|
test("Target directory’s subdirectory structure is retained", t => {
|
|||
|
let pass = getTemplatePassthrough("subdir/img", "_site", "_src");
|
|||
|
t.is(pass.outputPath, true);
|
|||
|
t.is(pass.getOutputPath(), "_site/subdir/img");
|
|||
|
|
|||
|
let pass2 = getTemplatePassthrough(
|
|||
|
{ inputPath: "subdir/img", outputPath: "subdir/img" },
|
|||
|
"_site",
|
|||
|
"_src"
|
|||
|
);
|
|||
|
t.is(pass2.getOutputPath(), "_site/subdir/img");
|
|||
|
});
|
|||
|
|
|||
|
test("Origin path isn’t included in output when targeting a file", t => {
|
|||
|
let pass = getTemplatePassthrough("avatar.png", "_site", "_src");
|
|||
|
t.is(pass.outputPath, true);
|
|||
|
t.is(pass.getOutputPath(), "_site/avatar.png");
|
|||
|
});
|
|||
|
|
|||
|
test("Origin path isn’t included in output when targeting a file several levels deep", t => {
|
|||
|
let pass = getTemplatePassthrough("avatar.png", "_site", "_src/subdir/img");
|
|||
|
t.is(pass.outputPath, true);
|
|||
|
t.is(pass.getOutputPath(), "_site/avatar.png");
|
|||
|
});
|
|||
|
|
|||
|
test("Full input file path and deep input path", t => {
|
|||
|
t.is(
|
|||
|
getTemplatePassthrough(
|
|||
|
"src/views/avatar.png",
|
|||
|
"_site",
|
|||
|
"src/views/"
|
|||
|
).getOutputPath(),
|
|||
|
"_site/avatar.png"
|
|||
|
);
|
|||
|
t.is(
|
|||
|
getTemplatePassthrough(
|
|||
|
"src/views/avatar.png",
|
|||
|
"_site",
|
|||
|
"src/views"
|
|||
|
).getOutputPath(),
|
|||
|
"_site/avatar.png"
|
|||
|
);
|
|||
|
t.is(
|
|||
|
getTemplatePassthrough(
|
|||
|
"src/views/avatar.png",
|
|||
|
"_site/",
|
|||
|
"src/views"
|
|||
|
).getOutputPath(),
|
|||
|
"_site/avatar.png"
|
|||
|
);
|
|||
|
t.is(
|
|||
|
getTemplatePassthrough(
|
|||
|
"src/views/avatar.png",
|
|||
|
"./_site",
|
|||
|
"./src/views"
|
|||
|
).getOutputPath(),
|
|||
|
"_site/avatar.png"
|
|||
|
);
|
|||
|
t.is(
|
|||
|
getTemplatePassthrough(
|
|||
|
"./src/views/avatar.png",
|
|||
|
"./_site/",
|
|||
|
"./src/views/"
|
|||
|
).getOutputPath(),
|
|||
|
"_site/avatar.png"
|
|||
|
);
|
|||
|
t.is(
|
|||
|
getTemplatePassthrough(
|
|||
|
"./src/views/avatar.png",
|
|||
|
"_site",
|
|||
|
"src/views/"
|
|||
|
).getOutputPath(),
|
|||
|
"_site/avatar.png"
|
|||
|
);
|
|||
|
});
|
|||
|
|
|||
|
test(".htaccess", t => {
|
|||
|
let pass = getTemplatePassthrough(".htaccess", "_site", ".");
|
|||
|
t.is(pass.outputPath, true);
|
|||
|
t.is(pass.getOutputPath(), "_site/.htaccess");
|
|||
|
});
|
|||
|
|
|||
|
test(".htaccess with input dir", t => {
|
|||
|
let pass = getTemplatePassthrough(".htaccess", "_site", "_src");
|
|||
|
t.is(pass.outputPath, true);
|
|||
|
t.is(pass.getOutputPath(), "_site/.htaccess");
|
|||
|
});
|
|||
|
|
|||
|
test("getFiles where not glob and file does not exist", async t => {
|
|||
|
const inputPath = ".htaccess";
|
|||
|
let pass = getTemplatePassthrough(inputPath, "_site", "_src");
|
|||
|
t.is(pass.outputPath, true);
|
|||
|
const files = await pass.getFiles(inputPath);
|
|||
|
t.deepEqual(files, []);
|
|||
|
});
|
|||
|
|
|||
|
test("getFiles where not glob and directory does not exist", async t => {
|
|||
|
const inputPath = "./test/stubs/template-passthrough/static/not-exists/";
|
|||
|
let pass = getTemplatePassthrough(inputPath, "_site", "_src");
|
|||
|
t.is(pass.outputPath, true);
|
|||
|
const files = await pass.getFiles(inputPath);
|
|||
|
t.deepEqual(files, []);
|
|||
|
});
|
|||
|
|
|||
|
test("getFiles with glob", async t => {
|
|||
|
const inputPath = "./test/stubs/template-passthrough/static/**";
|
|||
|
let pass = getTemplatePassthrough(inputPath, "_site", "_src");
|
|||
|
t.is(pass.outputPath, true);
|
|||
|
|
|||
|
const files = await pass.getFiles(inputPath);
|
|||
|
t.deepEqual(
|
|||
|
files.sort(),
|
|||
|
[
|
|||
|
"./test/stubs/template-passthrough/static/test.css",
|
|||
|
"./test/stubs/template-passthrough/static/test.js",
|
|||
|
"./test/stubs/template-passthrough/static/nested/test-nested.css"
|
|||
|
].sort()
|
|||
|
);
|
|||
|
|
|||
|
t.is(
|
|||
|
pass.getOutputPath(files.filter(entry => entry.endsWith("test.css"))[0]),
|
|||
|
"_site/test/stubs/template-passthrough/static/test.css"
|
|||
|
);
|
|||
|
t.is(
|
|||
|
pass.getOutputPath(files.filter(entry => entry.endsWith("test.js"))[0]),
|
|||
|
"_site/test/stubs/template-passthrough/static/test.js"
|
|||
|
);
|
|||
|
t.is(
|
|||
|
pass.getOutputPath(
|
|||
|
files.filter(entry => entry.endsWith("test-nested.css"))[0]
|
|||
|
),
|
|||
|
"_site/test/stubs/template-passthrough/static/nested/test-nested.css"
|
|||
|
);
|
|||
|
});
|
|||
|
test("getFiles with glob 2", async t => {
|
|||
|
const inputPath = "./test/stubs/template-passthrough/static/**/*.js";
|
|||
|
let pass = getTemplatePassthrough(inputPath, "_site", "_src");
|
|||
|
t.is(pass.outputPath, true);
|
|||
|
const files = await pass.getFiles(inputPath);
|
|||
|
t.deepEqual(files, ["./test/stubs/template-passthrough/static/test.js"]);
|
|||
|
t.is(
|
|||
|
pass.getOutputPath(files[0]),
|
|||
|
"_site/test/stubs/template-passthrough/static/test.js"
|
|||
|
);
|
|||
|
});
|
|||
|
|
|||
|
test("Directory where outputPath is true", async t => {
|
|||
|
let pass = getTemplatePassthrough(
|
|||
|
{ inputPath: "./static", outputPath: true },
|
|||
|
"_site",
|
|||
|
"_src"
|
|||
|
);
|
|||
|
t.is(pass.outputPath, true);
|
|||
|
t.is(pass.getOutputPath(), "_site/static");
|
|||
|
});
|
|||
|
|
|||
|
test("Nested directory where outputPath is remapped", async t => {
|
|||
|
let pass = getTemplatePassthrough(
|
|||
|
{ inputPath: "./static/nested", outputPath: "./test" },
|
|||
|
"_site",
|
|||
|
"_src"
|
|||
|
);
|
|||
|
t.is(pass.outputPath, "./test");
|
|||
|
t.is(pass.getOutputPath(), "_site/test");
|
|||
|
});
|
|||
|
|
|||
|
test("Glob pattern", async t => {
|
|||
|
const globResolvedPath = "./test/stubs/template-passthrough/static/test.js";
|
|||
|
let pass = getTemplatePassthrough(
|
|||
|
{
|
|||
|
inputPath: "./test/stubs/template-passthrough/static/*.js",
|
|||
|
outputPath: "./directory/"
|
|||
|
},
|
|||
|
"_site",
|
|||
|
"_src"
|
|||
|
);
|
|||
|
t.is(pass.outputPath, "./directory/");
|
|||
|
t.is(pass.getOutputPath(globResolvedPath), "_site/directory/test.js");
|
|||
|
});
|
|||
|
|
|||
|
test("Output paths match with different templatePassthrough methods", async t => {
|
|||
|
let pass1 = getTemplatePassthrough(
|
|||
|
{ inputPath: "./static/nested", outputPath: "./test" },
|
|||
|
"_site",
|
|||
|
"_src"
|
|||
|
);
|
|||
|
let pass2 = getTemplatePassthrough("avatar.png", "_site/test", ".");
|
|||
|
t.is(pass1.getOutputPathForGlobFile("avatar.png"), pass2.getOutputPath());
|
|||
|
});
|
|||
|
|
|||
|
// ToDo: Currently can't do :(
|
|||
|
// test("File renamed", async t => {
|
|||
|
// let pass = getTemplatePassthrough(
|
|||
|
// {
|
|||
|
// inputPath: "./test/stubs/template-passthrough/static/test.js",
|
|||
|
// outputPath: "./rename.js"
|
|||
|
// },
|
|||
|
// "_site",
|
|||
|
// "_src"
|
|||
|
// );
|
|||
|
// t.truthy(pass);
|
|||
|
// t.is(pass.getOutputPath(), "_site/rename.js");
|
|||
|
// });
|