From e57d8a7f67897b7a467fadd35254518ac15dba56 Mon Sep 17 00:00:00 2001 From: alonrbar Date: Sat, 25 May 2024 10:43:29 +0300 Subject: [PATCH] Comments fixture test - Add fixture test for a file with - Found and fixed a bug in DocxParser --- src/office/docxParser.ts | 4 ++- .../__snapshots__/comments.tests.ts.snap | 3 ++ test/fixtures/comments.tests.ts | 27 ++++++++++++++++++ test/fixtures/files/comments.docx | Bin 0 -> 13361 bytes 4 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 test/fixtures/__snapshots__/comments.tests.ts.snap create mode 100644 test/fixtures/comments.tests.ts create mode 100644 test/fixtures/files/comments.docx diff --git a/src/office/docxParser.ts b/src/office/docxParser.ts index e396af8..81c7742 100644 --- a/src/office/docxParser.ts +++ b/src/office/docxParser.ts @@ -208,8 +208,10 @@ export class DocxParser { } while (curWordTextNode) { - if (curWordTextNode.nodeName !== DocxParser.TEXT_NODE) + if (curWordTextNode.nodeName !== DocxParser.TEXT_NODE) { + curWordTextNode = curWordTextNode.nextSibling; continue; + } // move text to first node const curXmlTextNode = XmlNode.lastTextChild(curWordTextNode); diff --git a/test/fixtures/__snapshots__/comments.tests.ts.snap b/test/fixtures/__snapshots__/comments.tests.ts.snap new file mode 100644 index 0000000..cd1c9ec --- /dev/null +++ b/test/fixtures/__snapshots__/comments.tests.ts.snap @@ -0,0 +1,3 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`comments process correctly a template with comments 1`] = `foo`; diff --git a/test/fixtures/comments.tests.ts b/test/fixtures/comments.tests.ts new file mode 100644 index 0000000..22464e4 --- /dev/null +++ b/test/fixtures/comments.tests.ts @@ -0,0 +1,27 @@ +import { TemplateHandler } from 'src/templateHandler'; +import { readFixture } from './fixtureUtils'; + +describe('comments', () => { + + it("process correctly a template with comments", async () => { + + const handler = new TemplateHandler(); + + const template = readFixture("comments.docx"); + + // Verify getText + const templateText = await handler.getText(template); + expect(templateText.trim()).toEqual("{simple_prop}"); + + const data = { + simple_prop: "foo" + }; + const doc = await handler.process(template, data); + + // Verify template processing + const docXml = await handler.getXml(doc); + expect(docXml).toMatchSnapshot(); + + // writeTempFile('comments - out.docx', doc); + }); +}); diff --git a/test/fixtures/files/comments.docx b/test/fixtures/files/comments.docx new file mode 100644 index 0000000000000000000000000000000000000000..ae1082881ae953246fa92e8e5af9a88565990671 GIT binary patch literal 13361 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