diff --git a/src/find-path.js b/src/find-path.js
index 3024c11..0a77fc5 100644
--- a/src/find-path.js
+++ b/src/find-path.js
@@ -12,13 +12,7 @@ const folderSeparator = '.';
* @param {Object} options [posthtml options]
* @return {String|boolean}
*/
-function findPathFromTagName(node, options) {
- if (!node.attrs) {
- node.attrs = {};
- }
-
- const {tag} = node;
-
+function findPathFromTagName({tag}, options) {
// Get module filename from tag name
// remove prefix "x-"
// replace dot "." with slash "/"
@@ -29,8 +23,8 @@ function findPathFromTagName(node, options) {
.join(path.sep)
.concat(folderSeparator, options.fileExtension);
- // Find module by defined namespace in options.namespaces
- // or by defined roots in options.roots
+ // Find module by defined namespace in options.namespaces when tag has '::'
+ // otherwise by defined roots in options.roots
return tag.includes(options.namespaceSeparator) ?
findPathByNamespace(tag, fileNameFromTag.split(options.namespaceSeparator), options) :
findPathByRoot(tag, fileNameFromTag, options);
diff --git a/test/templates/components/form/index.html b/test/templates/components/form/index.html
new file mode 100644
index 0000000..7505f0b
--- /dev/null
+++ b/test/templates/components/form/index.html
@@ -0,0 +1 @@
+
diff --git a/test/templates/custom/dark/components/label/index.html b/test/templates/custom/dark/components/label/index.html
new file mode 100644
index 0000000..cbe84b0
--- /dev/null
+++ b/test/templates/custom/dark/components/label/index.html
@@ -0,0 +1 @@
+
diff --git a/test/templates/dark/components/label/index.html b/test/templates/dark/components/label/index.html
new file mode 100644
index 0000000..ab70583
--- /dev/null
+++ b/test/templates/dark/components/label/index.html
@@ -0,0 +1 @@
+
diff --git a/test/test-errors.js b/test/test-errors.js
index f634f95..eb0083d 100644
--- a/test/test-errors.js
+++ b/test/test-errors.js
@@ -8,11 +8,44 @@ const clean = html => html.replace(/(\n|\t)/g, '').trim();
test('Must fail when namespace path is not found without fallback root', async t => {
const actual = `Submit
`;
- await t.throwsAsync(async () => posthtml([plugin({root: './test/templates', namespaces: [{name: 'empty-namespace', root: './test/templates/empty-namespace'}]})]).process(actual).then(result => clean(result.html)));
+ await t.throwsAsync(async () => posthtml([plugin({root: './test/templates', namespaceFallback: false, namespaces: [{name: 'empty-namespace', root: './test/templates/empty-namespace'}]})]).process(actual).then(result => clean(result.html)));
});
test('Must fail when namespace path is not found with fallback root', async t => {
const actual = `Submit
`;
- await t.throwsAsync(async () => posthtml([plugin({root: './test/templates', namespaces: [{name: 'empty-namespace', root: './test/templates/empty-namespace'}]})]).process(actual).then(result => clean(result.html)));
+ await t.throwsAsync(async () => posthtml([plugin({root: './test/templates', namespaceFallback: true, namespaces: [{name: 'empty-namespace', root: './test/templates/empty-namespace'}]})]).process(actual).then(result => clean(result.html)));
+});
+
+test('Must fail when namespace is unknown', async t => {
+ const actual = `Submit
`;
+
+ await t.throwsAsync(async () => posthtml([plugin({root: './test/templates'})]).process(actual).then(result => clean(result.html)));
+});
+
+test('Must return node as-is when namespace is unknown with strict mode disabled', async t => {
+ const actual = `Submit
`;
+ const expected = `Submit
`;
+
+ const html = await posthtml([plugin({root: './test/templates', strict: false})]).process(actual).then(result => clean(result.html));
+
+ t.is(html, expected);
+});
+
+test('Must return node as-is when namespace is empty with strict mode disabled', async t => {
+ const actual = `Submit
`;
+ const expected = `Submit
`;
+
+ const html = await posthtml([plugin({root: './test/templates', strict: false, namespaces: [{name: 'empty-namespace', root: './test/templates/empty-namespace'}]})]).process(actual).then(result => clean(result.html));
+
+ t.is(html, expected);
+});
+
+test('Must return node as-is when all defined roots are empty with strict mode disabled', async t => {
+ const actual = `Submit
`;
+ const expected = `Submit
`;
+
+ const html = await posthtml([plugin({root: './test/templates/empty-root', strict: false})]).process(actual).then(result => clean(result.html));
+
+ t.is(html, expected);
});
diff --git a/test/test-x-tag.js b/test/test-x-tag.js
index d94e18d..8e7853a 100644
--- a/test/test-x-tag.js
+++ b/test/test-x-tag.js
@@ -32,6 +32,15 @@ test('Must process component with namespace to html', async t => {
t.is(html, expected);
});
+test('Must process component with namespace to html using index file', async t => {
+ const actual = ``;
+ const expected = ``;
+
+ const html = await posthtml([plugin({root: './test/templates', namespaces: [{name: 'dark', root: './test/templates/dark/components'}]})]).process(actual).then(result => clean(result.html));
+
+ t.is(html, expected);
+});
+
test(`Must process component with namespace's fallback path`, async t => {
const actual = ``;
const expected = `Modal
`;
@@ -41,6 +50,15 @@ test(`Must process component with namespace's fallback path`, async t => {
t.is(html, expected);
});
+test(`Must process component with namespace's fallback path using index file`, async t => {
+ const actual = ``;
+ const expected = ``;
+
+ const html = await posthtml([plugin({root: './test/templates', namespaces: [{name: 'dark', root: './test/templates/dark/components', fallback: './test/templates/components'}]})]).process(actual).then(result => clean(result.html));
+
+ t.is(html, expected);
+});
+
test(`Must process component with namespace's custom path`, async t => {
const actual = `My button`;
const expected = ``;
@@ -49,3 +67,12 @@ test(`Must process component with namespace's custom path`, async t => {
t.is(html, expected);
});
+
+test(`Must process component with namespace's custom path using index file`, async t => {
+ const actual = ``;
+ const expected = ``;
+
+ const html = await posthtml([plugin({root: './test/templates', namespaces: [{name: 'dark', root: './test/templates/dark/components', custom: './test/templates/custom/dark/components'}]})]).process(actual).then(result => clean(result.html));
+
+ t.is(html, expected);
+});