import { officeMarkup, OfficeMarkup } from "src/office"; import { XmlTextNode } from "src/xml"; import { parseXml } from "test/testUtils"; import { describe, expect, test } from "vitest"; describe(OfficeMarkup, () => { describe("modify", () => { describe(officeMarkup.modify.joinTextNodesRange, () => { test('join a range of text nodes from the same run', () => { const paragraphNode = parseXml(` 1 2 3 `); const runNode = paragraphNode.childNodes[0]; const firstXmlTextNode = runNode.childNodes[0].childNodes[0] as XmlTextNode; expect(firstXmlTextNode.textContent).toEqual('1'); const lastXmlTextNode = runNode.childNodes[2].childNodes[0] as XmlTextNode; expect(lastXmlTextNode.textContent).toEqual('3'); officeMarkup.modify.joinTextNodesRange(firstXmlTextNode, lastXmlTextNode); expect(runNode.childNodes.length).toEqual(1); expect(runNode.childNodes[0].childNodes.length).toEqual(1); expect(runNode.childNodes[0].childNodes[0]).toEqual(firstXmlTextNode); expect(firstXmlTextNode.textContent).toEqual('123'); }); test('join a range of text nodes from three different runs', () => { const paragraphNode = parseXml(` 1 2 3 4 5 6 `); const firstRunNode = paragraphNode.childNodes[0]; const firstXmlTextNode = firstRunNode.childNodes[0].childNodes[0] as XmlTextNode; expect(firstXmlTextNode.textContent).toEqual('1'); const thirdRunNode = paragraphNode.childNodes[2]; const lastXmlTextNode = thirdRunNode.childNodes[1].childNodes[0] as XmlTextNode; expect(lastXmlTextNode.textContent).toEqual('6'); officeMarkup.modify.joinTextNodesRange(firstXmlTextNode, lastXmlTextNode); expect(paragraphNode.childNodes.length).toEqual(1); expect(firstRunNode.childNodes.length).toEqual(1); expect(firstRunNode.childNodes[0].childNodes.length).toEqual(1); expect(firstRunNode.childNodes[0].childNodes[0]).toEqual(firstXmlTextNode); expect(firstXmlTextNode.textContent).toEqual('123456'); }); test('only join nodes from the specified range', () => { const paragraphNode = parseXml(` 0 1 2 3 4 5 6 `); const fromRunNode = paragraphNode.childNodes[1]; const fromXmlTextNode = fromRunNode.childNodes[1].childNodes[0] as XmlTextNode; expect(fromXmlTextNode.textContent).toEqual('2'); const toRunNode = paragraphNode.childNodes[2]; const toXmlTextNode = toRunNode.childNodes[0].childNodes[0] as XmlTextNode; expect(toXmlTextNode.textContent).toEqual('4'); // modify officeMarkup.modify.joinTextNodesRange(fromXmlTextNode, toXmlTextNode); // assert expect(paragraphNode.childNodes.length).toEqual(3); expect(fromRunNode.childNodes.length).toEqual(2); expect(fromRunNode.childNodes[1].childNodes.length).toEqual(1); expect(fromRunNode.childNodes[1].childNodes[0]).toEqual(fromXmlTextNode); expect(fromXmlTextNode.textContent).toEqual('234'); }); }); }); });