598 lines
16 KiB
JavaScript
598 lines
16 KiB
JavaScript
import test from "ava";
|
|
import fastglob from "fast-glob";
|
|
import EleventyFiles from "../src/EleventyFiles";
|
|
import TemplatePath from "../src/TemplatePath";
|
|
import EleventyExtensionMap from "../src/EleventyExtensionMap";
|
|
import TemplateRender from "../src/TemplateRender";
|
|
import TemplatePassthroughManager from "../src/TemplatePassthroughManager";
|
|
|
|
test("getFiles", async t => {
|
|
let evf = new EleventyFiles(
|
|
"./test/stubs/writeTest",
|
|
"./test/stubs/_writeTestSite",
|
|
["ejs", "md"]
|
|
);
|
|
evf.init();
|
|
|
|
t.deepEqual(await evf.getFiles(), ["./test/stubs/writeTest/test.md"]);
|
|
});
|
|
|
|
test("getFiles (without 11ty.js)", async t => {
|
|
let evf = new EleventyFiles(
|
|
"./test/stubs/writeTestJS",
|
|
"./test/stubs/_writeTestJSSite",
|
|
["ejs", "md"]
|
|
);
|
|
evf.init();
|
|
|
|
t.deepEqual(await evf.getFiles(), []);
|
|
});
|
|
|
|
test("getFiles (with 11ty.js)", async t => {
|
|
let evf = new EleventyFiles(
|
|
"./test/stubs/writeTestJS",
|
|
"./test/stubs/_writeTestJSSite",
|
|
["ejs", "md", "11ty.js"]
|
|
);
|
|
evf.init();
|
|
|
|
t.deepEqual(await evf.getFiles(), ["./test/stubs/writeTestJS/test.11ty.js"]);
|
|
});
|
|
|
|
test("getFiles (with js, treated as passthrough copy)", async t => {
|
|
let evf = new EleventyFiles(
|
|
"./test/stubs/writeTestJS",
|
|
"./test/stubs/_writeTestJSSite",
|
|
["ejs", "md", "js"]
|
|
);
|
|
evf.init();
|
|
|
|
const files = await evf.getFiles();
|
|
t.deepEqual(
|
|
files.sort(),
|
|
[
|
|
"./test/stubs/writeTestJS/sample.js",
|
|
"./test/stubs/writeTestJS/test.11ty.js"
|
|
].sort()
|
|
);
|
|
|
|
t.false(TemplateRender.hasEngine("./test/stubs/writeTestJS/sample.js"));
|
|
t.true(TemplateRender.hasEngine("./test/stubs/writeTestJS/test.11ty.js"));
|
|
});
|
|
|
|
test("getFiles (with case insensitivity)", async t => {
|
|
let evf = new EleventyFiles(
|
|
"./test/stubs/writeTestJS",
|
|
"./test/stubs/_writeTestJSSite",
|
|
["JS"]
|
|
);
|
|
evf.init();
|
|
|
|
t.deepEqual(
|
|
(await evf.getFiles()).sort(),
|
|
[
|
|
"./test/stubs/writeTestJS/sample.js",
|
|
"./test/stubs/writeTestJS/test.11ty.js"
|
|
].sort()
|
|
);
|
|
t.false(TemplateRender.hasEngine("./test/stubs/writeTestJS/sample.js"));
|
|
t.true(TemplateRender.hasEngine("./test/stubs/writeTestJS/test.11ty.js"));
|
|
});
|
|
|
|
test("Mutually exclusive Input and Output dirs", async t => {
|
|
let evf = new EleventyFiles(
|
|
"./test/stubs/writeTest",
|
|
"./test/stubs/_writeTestSite",
|
|
["ejs", "md"]
|
|
);
|
|
evf.init();
|
|
|
|
let files = await fastglob(evf.getFileGlobs());
|
|
t.is(evf.getRawFiles().length, 2);
|
|
t.true(files.length > 0);
|
|
t.is(files[0], "./test/stubs/writeTest/test.md");
|
|
});
|
|
|
|
test("Single File Input (deep path)", async t => {
|
|
let evf = new EleventyFiles("./test/stubs/index.html", "./test/stubs/_site", [
|
|
"ejs",
|
|
"md"
|
|
]);
|
|
evf.init();
|
|
|
|
let files = await fastglob(evf.getFileGlobs());
|
|
t.is(evf.getRawFiles().length, 1);
|
|
t.is(files.length, 1);
|
|
t.is(files[0], "./test/stubs/index.html");
|
|
});
|
|
|
|
test("Single File Input (shallow path)", async t => {
|
|
let evf = new EleventyFiles("README.md", "./test/stubs/_site", ["md"]);
|
|
evf.init();
|
|
|
|
let globs = evf.getFileGlobs().filter(path => path !== "!./README.md");
|
|
let files = await fastglob(globs);
|
|
t.is(evf.getRawFiles().length, 1);
|
|
t.is(files.length, 1);
|
|
t.is(files[0], "./README.md");
|
|
});
|
|
|
|
test("Glob Input", async t => {
|
|
let evf = new EleventyFiles(
|
|
"./test/stubs/glob-pages/!(contact.md)",
|
|
"./test/stubs/_site",
|
|
["md"]
|
|
);
|
|
evf.init();
|
|
|
|
let globs = evf.getFileGlobs();
|
|
let files = await fastglob(globs);
|
|
t.is(files.length, 2);
|
|
t.is(files[0], "./test/stubs/glob-pages/about.md");
|
|
t.is(files[1], "./test/stubs/glob-pages/home.md");
|
|
});
|
|
|
|
test(".eleventyignore parsing", t => {
|
|
let ignores = EleventyFiles.getFileIgnores("./test/stubs/.eleventyignore");
|
|
t.is(ignores.length, 2);
|
|
t.is(ignores[0], "!./test/stubs/ignoredFolder/**");
|
|
t.is(ignores[1], "!./test/stubs/ignoredFolder/ignored.md");
|
|
});
|
|
|
|
test("Parse multiple .eleventyignores", t => {
|
|
let ignores = EleventyFiles.getFileIgnores([
|
|
"./test/stubs/multiple-ignores/.eleventyignore",
|
|
"./test/stubs/multiple-ignores/subfolder/.eleventyignore"
|
|
]);
|
|
t.is(ignores.length, 4);
|
|
// Note these folders must exist!
|
|
t.is(ignores[0], "!./test/stubs/multiple-ignores/ignoredFolder/**");
|
|
t.is(ignores[1], "!./test/stubs/multiple-ignores/ignoredFolder/ignored.md");
|
|
t.is(
|
|
ignores[2],
|
|
"!./test/stubs/multiple-ignores/subfolder/ignoredFolder2/**"
|
|
);
|
|
t.is(
|
|
ignores[3],
|
|
"!./test/stubs/multiple-ignores/subfolder/ignoredFolder2/ignored2.md"
|
|
);
|
|
});
|
|
|
|
test("defaults if passed file name does not exist", t => {
|
|
let ignores = EleventyFiles.getFileIgnores(
|
|
".thisfiledoesnotexist",
|
|
"node_modules/**"
|
|
);
|
|
t.truthy(ignores.length);
|
|
t.is(ignores[0], "!./node_modules/**");
|
|
});
|
|
|
|
test(".eleventyignore files", async t => {
|
|
let evf = new EleventyFiles("test/stubs", "test/stubs/_site", ["ejs", "md"]);
|
|
evf.init();
|
|
let ignoredFiles = await fastglob("test/stubs/ignoredFolder/*.md");
|
|
t.is(ignoredFiles.length, 1);
|
|
|
|
let files = await fastglob(evf.getFileGlobs());
|
|
t.true(files.length > 0);
|
|
|
|
t.is(
|
|
files.filter(file => {
|
|
return file.indexOf("./test/stubs/ignoredFolder") > -1;
|
|
}).length,
|
|
0
|
|
);
|
|
});
|
|
|
|
/* .eleventyignore and .gitignore combos */
|
|
test("Get ignores (no .eleventyignore no .gitignore)", t => {
|
|
let evf = new EleventyFiles(
|
|
"test/stubs/ignore1",
|
|
"test/stubs/ignore1/_site",
|
|
[]
|
|
);
|
|
evf.init();
|
|
|
|
evf._setLocalPathRoot("./test/stubs/ignorelocalroot");
|
|
|
|
t.deepEqual(evf.getIgnores(), [
|
|
"!./node_modules/**",
|
|
"!./test/stubs/ignorelocalroot/node_modules/**",
|
|
"!./test/stubs/ignore1/node_modules/**",
|
|
"!./test/stubs/ignorelocalroot/test.md",
|
|
"!./test/stubs/ignore1/_site/**"
|
|
]);
|
|
});
|
|
|
|
test("Get ignores (no .eleventyignore)", t => {
|
|
let evf = new EleventyFiles(
|
|
"test/stubs/ignore2",
|
|
"test/stubs/ignore2/_site",
|
|
[]
|
|
);
|
|
evf.init();
|
|
evf._setLocalPathRoot("./test/stubs/ignorelocalroot");
|
|
|
|
t.deepEqual(evf.getIgnores(), [
|
|
"!./test/stubs/ignore2/thisshouldnotexist12345",
|
|
"!./test/stubs/ignorelocalroot/test.md",
|
|
"!./test/stubs/ignore2/_site/**"
|
|
]);
|
|
});
|
|
|
|
test("Get ignores (no .eleventyignore, using setUseGitIgnore(false))", t => {
|
|
let evf = new EleventyFiles(
|
|
"test/stubs/ignore2",
|
|
"test/stubs/ignore2/_site",
|
|
[]
|
|
);
|
|
evf.init();
|
|
|
|
evf._setConfig({
|
|
useGitIgnore: false,
|
|
dir: {
|
|
includes: "_includes"
|
|
}
|
|
});
|
|
evf._setLocalPathRoot("./test/stubs/ignorelocalroot");
|
|
|
|
t.deepEqual(evf.getIgnores(), [
|
|
"!./test/stubs/ignorelocalroot/test.md",
|
|
"!./test/stubs/ignore2/_site/**"
|
|
]);
|
|
});
|
|
|
|
test("Get ignores (no .gitignore)", t => {
|
|
let evf = new EleventyFiles(
|
|
"test/stubs/ignore3",
|
|
"test/stubs/ignore3/_site",
|
|
[]
|
|
);
|
|
evf.init();
|
|
evf._setLocalPathRoot("./test/stubs/ignorelocalroot");
|
|
|
|
t.deepEqual(evf.getIgnores(), [
|
|
"!./node_modules/**",
|
|
"!./test/stubs/ignorelocalroot/node_modules/**",
|
|
"!./test/stubs/ignore3/node_modules/**",
|
|
"!./test/stubs/ignorelocalroot/test.md",
|
|
"!./test/stubs/ignore3/ignoredFolder/**",
|
|
"!./test/stubs/ignore3/ignoredFolder/ignored.md",
|
|
"!./test/stubs/ignore3/_site/**"
|
|
]);
|
|
});
|
|
|
|
test("Get ignores (both .eleventyignore and .gitignore)", t => {
|
|
let evf = new EleventyFiles(
|
|
"test/stubs/ignore4",
|
|
"test/stubs/ignore4/_site",
|
|
[]
|
|
);
|
|
evf.init();
|
|
evf._setLocalPathRoot("./test/stubs/ignorelocalroot");
|
|
|
|
t.deepEqual(evf.getIgnores(), [
|
|
"!./test/stubs/ignore4/thisshouldnotexist12345",
|
|
"!./test/stubs/ignorelocalroot/test.md",
|
|
"!./test/stubs/ignore4/ignoredFolder/**",
|
|
"!./test/stubs/ignore4/ignoredFolder/ignored.md",
|
|
"!./test/stubs/ignore4/_site/**"
|
|
]);
|
|
});
|
|
|
|
test("Get ignores (both .eleventyignore and .gitignore, using setUseGitIgnore(false))", t => {
|
|
let evf = new EleventyFiles(
|
|
"test/stubs/ignore4",
|
|
"test/stubs/ignore4/_site",
|
|
[]
|
|
);
|
|
evf.init();
|
|
|
|
evf._setConfig({
|
|
useGitIgnore: false,
|
|
dir: {
|
|
includes: "_includes"
|
|
}
|
|
});
|
|
evf._setLocalPathRoot("./test/stubs/ignorelocalroot");
|
|
|
|
t.deepEqual(evf.getIgnores(), [
|
|
"!./test/stubs/ignorelocalroot/test.md",
|
|
"!./test/stubs/ignore4/ignoredFolder/**",
|
|
"!./test/stubs/ignore4/ignoredFolder/ignored.md",
|
|
"!./test/stubs/ignore4/_site/**"
|
|
]);
|
|
});
|
|
|
|
test("Get ignores (no .eleventyignore .gitignore exists but empty)", t => {
|
|
let evf = new EleventyFiles(
|
|
"test/stubs/ignore5",
|
|
"test/stubs/ignore5/_site",
|
|
[]
|
|
);
|
|
evf.init();
|
|
|
|
evf._setLocalPathRoot("./test/stubs/ignorelocalroot");
|
|
|
|
t.deepEqual(evf.getIgnores(), [
|
|
"!./node_modules/**",
|
|
"!./test/stubs/ignorelocalroot/node_modules/**",
|
|
"!./test/stubs/ignore5/node_modules/**",
|
|
"!./test/stubs/ignorelocalroot/test.md",
|
|
"!./test/stubs/ignore5/_site/**"
|
|
]);
|
|
});
|
|
|
|
test("Get ignores (both .eleventyignore and .gitignore exists, but .gitignore is empty)", t => {
|
|
let evf = new EleventyFiles(
|
|
"test/stubs/ignore6",
|
|
"test/stubs/ignore6/_site",
|
|
[]
|
|
);
|
|
evf.init();
|
|
evf._setLocalPathRoot("./test/stubs/ignorelocalroot");
|
|
|
|
t.deepEqual(evf.getIgnores(), [
|
|
"!./node_modules/**",
|
|
"!./test/stubs/ignorelocalroot/node_modules/**",
|
|
"!./test/stubs/ignore6/node_modules/**",
|
|
"!./test/stubs/ignorelocalroot/test.md",
|
|
"!./test/stubs/ignore6/ignoredFolder/**",
|
|
"!./test/stubs/ignore6/ignoredFolder/ignored.md",
|
|
"!./test/stubs/ignore6/_site/**"
|
|
]);
|
|
});
|
|
|
|
test("Get ignores (no .eleventyignore .gitignore exists but has spaces inside)", t => {
|
|
let evf = new EleventyFiles(
|
|
"test/stubs/ignore7",
|
|
"test/stubs/ignore7/_site",
|
|
[]
|
|
);
|
|
evf.init();
|
|
|
|
evf._setLocalPathRoot("./test/stubs/ignorelocalroot");
|
|
|
|
t.deepEqual(evf.getIgnores(), [
|
|
"!./node_modules/**",
|
|
"!./test/stubs/ignorelocalroot/node_modules/**",
|
|
"!./test/stubs/ignore7/node_modules/**",
|
|
"!./test/stubs/ignorelocalroot/test.md",
|
|
"!./test/stubs/ignore7/_site/**"
|
|
]);
|
|
});
|
|
|
|
test("Get ignores (both .eleventyignore and .gitignore exists, but .gitignore has spaces inside)", t => {
|
|
let evf = new EleventyFiles(
|
|
"test/stubs/ignore8",
|
|
"test/stubs/ignore8/_site",
|
|
[]
|
|
);
|
|
evf.init();
|
|
evf._setLocalPathRoot("./test/stubs/ignorelocalroot");
|
|
|
|
t.deepEqual(evf.getIgnores(), [
|
|
"!./node_modules/**",
|
|
"!./test/stubs/ignorelocalroot/node_modules/**",
|
|
"!./test/stubs/ignore8/node_modules/**",
|
|
"!./test/stubs/ignorelocalroot/test.md",
|
|
"!./test/stubs/ignore8/ignoredFolder/**",
|
|
"!./test/stubs/ignore8/ignoredFolder/ignored.md",
|
|
"!./test/stubs/ignore8/_site/**"
|
|
]);
|
|
});
|
|
/* End .eleventyignore and .gitignore combos */
|
|
|
|
test("getDataDir", t => {
|
|
let evf = new EleventyFiles(".", "_site", []);
|
|
evf.init();
|
|
t.is(evf.getDataDir(), "_data");
|
|
});
|
|
|
|
test("getDataDir subdir", t => {
|
|
let evf = new EleventyFiles("test/stubs", "test/stubs/_site", []);
|
|
evf.init();
|
|
t.is(evf.getDataDir(), "test/stubs/_data");
|
|
});
|
|
|
|
test("Include and Data Dirs", t => {
|
|
let evf = new EleventyFiles("test/stubs", "test/stubs/_site", []);
|
|
evf.init();
|
|
|
|
t.deepEqual(evf.getIncludesAndDataDirs(), [
|
|
"./test/stubs/_includes/**",
|
|
"./test/stubs/_data/**"
|
|
]);
|
|
});
|
|
|
|
test("Ignore Include and Data Dirs", t => {
|
|
let evf = new EleventyFiles("test/stubs", "test/stubs/_site", []);
|
|
evf.init();
|
|
|
|
t.deepEqual(evf.getTemplateIgnores(), [
|
|
"!./test/stubs/_includes/**",
|
|
"!./test/stubs/_data/**"
|
|
]);
|
|
});
|
|
|
|
test("Input to 'src' and empty includes dir (issue #403)", t => {
|
|
let evf = new EleventyFiles("src", "src/_site", ["md", "liquid", "html"]);
|
|
evf._setConfig({
|
|
useGitIgnore: false,
|
|
eleventyignoreOverride: "!./src/_includes/**",
|
|
dir: {
|
|
input: ".",
|
|
output: "_site",
|
|
includes: "",
|
|
data: "_data"
|
|
}
|
|
});
|
|
evf.init();
|
|
|
|
t.deepEqual(evf.getFileGlobs(), [
|
|
"./src/**/*.md",
|
|
"./src/**/*.liquid",
|
|
"./src/**/*.html",
|
|
"!./src/_includes/**",
|
|
"!./src/_site/**",
|
|
"!./src/_data/**"
|
|
]);
|
|
});
|
|
|
|
test("Bad expected output, this indicates a bug upstream in a dependency. Input to 'src' and empty includes dir (issue #403, full paths in eleventyignore)", async t => {
|
|
let evf = new EleventyFiles("test/stubs-403", "test/stubs-403/_site", [
|
|
"liquid"
|
|
]);
|
|
evf._setConfig({
|
|
useGitIgnore: false,
|
|
eleventyignoreOverride:
|
|
"!" + TemplatePath.absolutePath("test/stubs-403/_includes") + "/**",
|
|
dir: {
|
|
input: "test/stubs-403",
|
|
output: "_site",
|
|
includes: "",
|
|
data: false
|
|
}
|
|
});
|
|
evf.init();
|
|
|
|
t.deepEqual(await evf.getFiles(), [
|
|
"./test/stubs-403/template.liquid",
|
|
// This is bad, because it uses an absolutePath above. it should be excluded
|
|
"./test/stubs-403/_includes/include.liquid"
|
|
]);
|
|
});
|
|
|
|
test("Workaround for Bad expected output, this indicates a bug upstream in a dependency. Input to 'src' and empty includes dir (issue #403, full paths in eleventyignore)", async t => {
|
|
let evf = new EleventyFiles("test/stubs-403", "test/stubs-403/_site", [
|
|
"liquid"
|
|
]);
|
|
evf._setConfig({
|
|
useGitIgnore: false,
|
|
eleventyignoreOverride: "!./test/stubs-403/_includes/**",
|
|
dir: {
|
|
input: "test/stubs-403",
|
|
output: "_site",
|
|
includes: "",
|
|
data: false
|
|
}
|
|
});
|
|
evf.init();
|
|
|
|
t.deepEqual(await evf.getFiles(), ["./test/stubs-403/template.liquid"]);
|
|
});
|
|
|
|
test("Issue #403: all .eleventyignores should be relative paths not absolute paths", async t => {
|
|
let evf = new EleventyFiles("test/stubs-403", "test/stubs-403/_site", [
|
|
"liquid"
|
|
]);
|
|
evf._setConfig({
|
|
useGitIgnore: false,
|
|
dir: {
|
|
input: "test/stubs-403",
|
|
output: "_site",
|
|
includes: "",
|
|
data: false
|
|
}
|
|
});
|
|
evf.init();
|
|
|
|
let globs = await evf.getFileGlobs();
|
|
t.is(
|
|
globs.filter(glob => {
|
|
return glob.indexOf(TemplatePath.absolutePath()) > -1;
|
|
}).length,
|
|
0
|
|
);
|
|
});
|
|
|
|
test("Glob Watcher Files", async t => {
|
|
let evf = new EleventyFiles("test/stubs", "test/stubs/_site", ["njk"]);
|
|
evf.init();
|
|
|
|
t.deepEqual(evf.getGlobWatcherFiles(), [
|
|
"./test/stubs/**/*.njk",
|
|
"./test/stubs/_includes/**",
|
|
"./test/stubs/_data/**"
|
|
]);
|
|
});
|
|
|
|
test("Glob Watcher Files with File Extension Passthroughs", async t => {
|
|
let evf = new EleventyFiles("test/stubs", "test/stubs/_site", ["njk", "png"]);
|
|
evf.init();
|
|
|
|
t.deepEqual(evf.getGlobWatcherFiles(), [
|
|
"./test/stubs/**/*.njk",
|
|
"./test/stubs/**/*.png",
|
|
"./test/stubs/_includes/**",
|
|
"./test/stubs/_data/**"
|
|
]);
|
|
});
|
|
|
|
test("Glob Watcher Files with Config Passthroughs (one template format)", async t => {
|
|
let evf = new EleventyFiles("test/stubs", "test/stubs/_site", ["njk"]);
|
|
evf.init();
|
|
|
|
let mgr = new TemplatePassthroughManager();
|
|
mgr.setInputDir("test/stubs");
|
|
mgr.setOutputDir("test/stubs/_site");
|
|
mgr.setConfig({
|
|
passthroughFileCopy: true,
|
|
passthroughCopies: {
|
|
"test/stubs/img/": true
|
|
}
|
|
});
|
|
evf.setPassthroughManager(mgr);
|
|
|
|
t.deepEqual(evf.getGlobWatcherFiles(), [
|
|
"./test/stubs/**/*.njk",
|
|
"./test/stubs/_includes/**",
|
|
"./test/stubs/_data/**",
|
|
"./test/stubs/img/**"
|
|
]);
|
|
});
|
|
|
|
test("Glob Watcher Files with Config Passthroughs (no template formats)", async t => {
|
|
let evf = new EleventyFiles("test/stubs", "test/stubs/_site", []);
|
|
evf.init();
|
|
|
|
t.deepEqual(await evf.getGlobWatcherTemplateDataFiles(), [
|
|
"./test/stubs/**/*.json",
|
|
"./test/stubs/**/*.11tydata.js"
|
|
]);
|
|
});
|
|
|
|
test("Glob Watcher Files with passthroughAll", async t => {
|
|
let evf = new EleventyFiles("test/stubs", "test/stubs/_site", [], true);
|
|
evf.init();
|
|
|
|
t.is((await evf.getFileGlobs())[0], "./test/stubs/**");
|
|
});
|
|
|
|
test("File extension aliasing", async t => {
|
|
let map = new EleventyExtensionMap(["md"]);
|
|
map.config = {
|
|
templateExtensionAliases: {
|
|
markdown: "md"
|
|
}
|
|
};
|
|
|
|
let evf = new EleventyFiles(
|
|
"./test/stubs/writeTestMarkdown",
|
|
"./test/stubs/_writeTestMarkdownSite",
|
|
["md"]
|
|
);
|
|
evf._setExtensionMap(map);
|
|
evf.init();
|
|
|
|
const files = await evf.getFiles();
|
|
|
|
t.deepEqual(
|
|
files.sort(),
|
|
[
|
|
"./test/stubs/writeTestMarkdown/sample.md",
|
|
"./test/stubs/writeTestMarkdown/sample2.markdown"
|
|
].sort()
|
|
);
|
|
});
|