From d80de30f62c4972b92198f355257c894e40b986d Mon Sep 17 00:00:00 2001 From: Antonino Porcino Date: Fri, 8 Jul 2016 12:19:35 +0200 Subject: [PATCH] Forbid rt-repeat in root nodes (fix #171) --- src/reactTemplates.js | 2 ++ test/data/invalid/invalid-repeat-1.rt | 3 +++ test/data/invalid/invalid-repeat-2.rt | 1 + test/data/invalid/invalid-repeat.rt | 1 - test/src/rt.invalid.spec.js | 3 ++- 5 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 test/data/invalid/invalid-repeat-1.rt create mode 100644 test/data/invalid/invalid-repeat-2.rt delete mode 100644 test/data/invalid/invalid-repeat.rt diff --git a/src/reactTemplates.js b/src/reactTemplates.js index e840a60..0b93952 100644 --- a/src/reactTemplates.js +++ b/src/reactTemplates.js @@ -584,6 +584,8 @@ function parseAndConvertHtmlToReact(html, context) { throw RTCodeError.build(context, rootNode.root()[0], 'Document should have a single root element'); } else if (firstTag.name === virtualNode) { throw RTCodeError.build(context, firstTag, `Document should not have <${virtualNode}> as root element`); + } else if (_.includes(_.keys(firstTag.attribs), repeatAttr)) { + throw RTCodeError.build(context, firstTag, "root element may not have a 'rt-repeat' attribute"); } return convertHtmlToReact(firstTag, context); } diff --git a/test/data/invalid/invalid-repeat-1.rt b/test/data/invalid/invalid-repeat-1.rt new file mode 100644 index 0000000..7cd3c6e --- /dev/null +++ b/test/data/invalid/invalid-repeat-1.rt @@ -0,0 +1,3 @@ +
+
+
diff --git a/test/data/invalid/invalid-repeat-2.rt b/test/data/invalid/invalid-repeat-2.rt new file mode 100644 index 0000000..1774607 --- /dev/null +++ b/test/data/invalid/invalid-repeat-2.rt @@ -0,0 +1 @@ +
{a}
diff --git a/test/data/invalid/invalid-repeat.rt b/test/data/invalid/invalid-repeat.rt deleted file mode 100644 index 74cfdb8..0000000 --- a/test/data/invalid/invalid-repeat.rt +++ /dev/null @@ -1 +0,0 @@ -
diff --git a/test/src/rt.invalid.spec.js b/test/src/rt.invalid.spec.js index 3a6b6bb..3c98c0a 100644 --- a/test/src/rt.invalid.spec.js +++ b/test/src/rt.invalid.spec.js @@ -22,7 +22,8 @@ module.exports = { {file: 'invalid-lambda.rt', issue: new RTCodeError("when using 'on' events, use lambda '(p1,p2)=>body' notation or use {} to return a callback function. error: [onClick='']", 0, 23, 1, 1)}, {file: 'invalid-js.rt', issue: new RTCodeError('Unexpected token ILLEGAL', 0, 32, 1, 1)}, {file: 'invalid-single-root.rt', issue: new RTCodeError('Document should have no more than a single root element', 12, 23, 2, 1)}, - {file: 'invalid-repeat.rt', issue: new RTCodeError('rt-repeat invalid \'in\' expression \'a in b in c\'', 0, 35, 1, 1)}, + {file: 'invalid-repeat-1.rt', issue: new RTCodeError("rt-repeat invalid 'in' expression 'a in b in c'", 9, 44, 2, 4)}, + {file: 'invalid-repeat-2.rt', issue: new RTCodeError("root element may not have a 'rt-repeat' attribute", 0, 39, 1, 1)}, {file: 'invalid-rt-require-1.rt', issue: new RTCodeError("'rt-require' needs 'dependency' and 'as' attributes", 0, 14, 1, 1)}, {file: 'invalid-rt-require-2.rt', issue: new RTCodeError("'rt-require' may have no children", 0, 32, 1, 1)}, {file: 'invalid-rt-import-1.rt', issue: new RTCodeError("'*' imports must have an 'as' attribute", 0, 36, 1, 1)},