'use strict';
const assert = require('assert');
const dedent = require('dedent');
const RewritingStream = require('../lib');
const loadSAXParserTestData = require('../../../test/utils/load-sax-parser-test-data');
const { getStringDiffMsg, writeChunkedToStream, WritableStreamStub } = require('../../../test/utils/common');
const srcHtml = dedent`
Hey ya
`,
assignTokenHandlers: rewriter => {
rewriter.on('endTag', token => {
token.tagName = 'rewritten';
rewriter.emitEndTag(token);
});
}
});
exports['RewritingStream - rewrite text'] = createRewriterTest({
src: srcHtml,
expected: dedent`
42
`,
assignTokenHandlers: rewriter => {
rewriter.on('text', token => {
if (token.text.trim().length > 0) {
token.text = '42';
}
rewriter.emitText(token);
});
}
});
exports['RewritingStream - rewrite comment'] = createRewriterTest({
src: srcHtml,
expected: dedent`
Hey ya
`,
assignTokenHandlers: rewriter => {
rewriter.on('comment', token => {
token.text = '42';
rewriter.emitComment(token);
});
}
});
exports['RewritingStream - rewrite doctype'] = createRewriterTest({
src: srcHtml,
expected: dedent`
Hey ya
`,
assignTokenHandlers: rewriter => {
rewriter.on('doctype', token => {
token.publicId = '42';
token.systemId = 'hey';
rewriter.emitDoctype(token);
});
}
});
exports['RewritingStream - emit multiple'] = createRewriterTest({
src: srcHtml,
expected: dedent`
Hey ya
`,
assignTokenHandlers: rewriter => {
rewriter.on('startTag', token => {
rewriter.emitRaw('');
rewriter.emitStartTag(token);
rewriter.emitRaw('');
});
}
});
exports['RewritingStream - rewrite raw'] = createRewriterTest({
src: srcHtml,
expected: dedent`
42
42
42
42
42
42
42
42Hey ya
42
42
42
`,
assignTokenHandlers: rewriter => {
const rewriteRaw = (_, raw) => {
rewriter.emitRaw(raw + '42');
};
rewriter
.on('doctype', rewriteRaw)
.on('startTag', rewriteRaw)
.on('endTag', rewriteRaw)
.on('comment', rewriteRaw);
}
});
exports['RewritingStream - Should escape entities in attributes and text'] = createRewriterTest({
src: dedent`
foo&bar
`,
expected: dedent`
foo&bar
`,
assignTokenHandlers: rewriter => {
rewriter.on('startTag', token => rewriter.emitStartTag(token));
rewriter.on('text', token => rewriter.emitText(token));
}
});
exports['Regression - RewritingStream - Last text chunk must be flushed (GH-271)'] = done => {
const parser = new RewritingStream();
let foundText = false;
parser.on('text', ({ text }) => {
foundText = true;
assert.strictEqual(text, 'text');
});
parser.once('finish', () => {
assert.ok(foundText);
done();
});
parser.write('text');
parser.end();
};
exports['Regression - RewritingStream - Should not accept binary input (GH-269)'] = () => {
const stream = new RewritingStream();
const buf = Buffer.from('test');
assert.throws(() => stream.write(buf), TypeError);
};