Fix preserveComments on ssr (#4736)

Fixes #4730

Co-authored-by: tanhauhau <lhtan93@gmail.com>
pull/6467/head
Luis Confraria 3 years ago committed by GitHub
parent 40f4615cf4
commit 554d5dd391
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1,10 +1,8 @@
import Renderer, { RenderOptions } from '../Renderer'; import Renderer, { RenderOptions } from '../Renderer';
import Comment from '../../nodes/Comment'; import Comment from '../../nodes/Comment';
export default function(_node: Comment, _renderer: Renderer, _options: RenderOptions) { export default function(node: Comment, renderer: Renderer, options: RenderOptions) {
// TODO preserve comments if (options.preserveComments) {
renderer.add_string(`<!--${node.data}-->`);
// if (options.preserveComments) { }
// renderer.append(`<!--${node.data}-->`);
// }
} }

@ -4,7 +4,7 @@ import glob from 'tiny-glob/sync';
import * as path from 'path'; import * as path from 'path';
import * as fs from 'fs'; import * as fs from 'fs';
import * as colors from 'kleur'; import * as colors from 'kleur';
export const assert = (assert$1 as unknown) as typeof assert$1 & { htmlEqual: (actual, expected, message?) => void }; export const assert = (assert$1 as unknown) as typeof assert$1 & { htmlEqual: (actual, expected, message?) => void, htmlEqualWithComments: (actual, expected, message?) => void };
// for coverage purposes, we need to test source files, // for coverage purposes, we need to test source files,
// but for sanity purposes, we need to test dist files // but for sanity purposes, we need to test dist files
@ -118,6 +118,9 @@ function cleanChildren(node) {
node.removeChild(child); node.removeChild(child);
child = previous; child = previous;
} }
} else if (child.nodeType === 8) {
// comment
// do nothing
} else { } else {
cleanChildren(child); cleanChildren(child);
} }
@ -137,11 +140,11 @@ function cleanChildren(node) {
} }
} }
export function normalizeHtml(window, html) { export function normalizeHtml(window, html, preserveComments = false) {
try { try {
const node = window.document.createElement('div'); const node = window.document.createElement('div');
node.innerHTML = html node.innerHTML = html
.replace(/<!--.*?-->/g, '') .replace(/(<!--.*?-->)/g, preserveComments ? '$1' : '')
.replace(/>[\s\r\n]+</g, '><') .replace(/>[\s\r\n]+</g, '><')
.trim(); .trim();
cleanChildren(node); cleanChildren(node);
@ -162,6 +165,14 @@ export function setupHtmlEqual() {
message message
); );
}; };
// eslint-disable-next-line no-import-assign
assert.htmlEqualWithComments = (actual, expected, message) => {
assert.deepEqual(
normalizeHtml(window, actual, true),
normalizeHtml(window, expected, true),
message
);
};
} }
export function loadConfig(file) { export function loadConfig(file) {

@ -3,8 +3,8 @@ import { create_ssr_component } from "svelte/internal";
const Component = create_ssr_component(($$result, $$props, $$bindings, slots) => { const Component = create_ssr_component(($$result, $$props, $$bindings, slots) => {
return `<div>content</div> return `<div>content</div>
<!-- comment -->
<div>more content</div>`; <div>more content</div>`;
}); });
export default Component; export default Component;

@ -81,7 +81,9 @@ describe('ssr', () => {
if (css.code) fs.writeFileSync(`${dir}/_actual.css`, css.code); if (css.code) fs.writeFileSync(`${dir}/_actual.css`, css.code);
try { try {
assert.htmlEqual(html, expectedHtml); (compileOptions.preserveComments
? assert.htmlEqualWithComments
: assert.htmlEqual)(html, expectedHtml);
} catch (error) { } catch (error) {
if (shouldUpdateExpected()) { if (shouldUpdateExpected()) {
fs.writeFileSync(`${dir}/_expected.html`, html); fs.writeFileSync(`${dir}/_expected.html`, html);

@ -0,0 +1,5 @@
export default {
compileOptions: {
preserveComments: true
}
};

@ -0,0 +1,3 @@
<p>before</p>
<!-- a comment -->
<p>after</p>

@ -0,0 +1,3 @@
<p>before</p>
<!-- a comment -->
<p>after</p>
Loading…
Cancel
Save