diff --git a/src/index.js b/src/index.js index 31fe52fa..5c11e0bf 100644 --- a/src/index.js +++ b/src/index.js @@ -183,7 +183,8 @@ function renderToString(vnode, context, opts, inner, isSvgMode, selectValue) { } if (name==='dangerouslySetInnerHTML') { - html = v && v.__html; + html = v ? v.__html : null; // do not use v && v.__html to prevent dangerouslySetInnerHTML="foo" + pretty = false; } else if ((v || v===0 || v==='') && typeof v!=='function') { if (v===true || v==='') { diff --git a/test/pretty.js b/test/pretty.js index ba85c556..82fb336c 100644 --- a/test/pretty.js +++ b/test/pretty.js @@ -21,6 +21,33 @@ describe('pretty', () => { expect(rendered).to.equal(`
foobar

hello

`); }); + it('should preserve indentation of dangerouslySetInnerHTML', () => { + let rendered = prettyRender( +
+
+			
+ ); + + expect(rendered).to.equal(`
+
foo
+bar
+
`); + }); + + it('should preserve indentation of multiline string child', () => { + let rendered = prettyRender( +
+
{`
+  bar`}
+
+ ); + + expect(rendered).to.equal(`
+
+  bar
+
`); + }); + it('should render whitespace when pretty=true', () => { let rendered = prettyRender(
diff --git a/test/render.js b/test/render.js index 3095d66a..2275fd06 100644 --- a/test/render.js +++ b/test/render.js @@ -712,6 +712,17 @@ describe('render', () => { expect(html).to.equal('
\n\t
foo
\n\t
bar
\n\t
\n\t\t
baz
\n\t\t
quux
\n\t
\n
'); }); + it('should preserve indentation of pre content', () => { + let rendered = render( +
+
+				
+ ); + + expect(rendered).to.equal(`
foo
+bar
`); + }); + it('should skip Fragment even if it has props', () => { let html = render(