diff --git a/src/file/xml-components/imported-xml-component.spec.ts b/src/file/xml-components/imported-xml-component.spec.ts index b250cc852b..e896633850 100644 --- a/src/file/xml-components/imported-xml-component.spec.ts +++ b/src/file/xml-components/imported-xml-component.spec.ts @@ -1,95 +1,81 @@ -// import { expect } from "chai"; -// import { convertToXmlComponent, ImportedXmlComponent } from "./"; +import { expect } from "chai"; +import { Element, xml2js } from "xml-js"; -// const xmlString = ` -// -// -// some value -// -// -// Text 1 -// -// -// Text 2 -// -// -// `; +import { ImportedXmlComponent } from "./"; +import { convertToXmlComponent } from "./imported-xml-component"; -// // tslint:disable:object-literal-key-quotes -// const importedXmlElement = { -// "w:p": { -// _attr: { "w:one": "value 1", "w:two": "value 2" }, -// "w:rPr": { "w:noProof": "some value" }, -// "w:r": [{ _attr: { active: "true" }, "w:t": "Text 1" }, { _attr: { active: "true" }, "w:t": "Text 2" }], -// }, -// }; -// // tslint:enable:object-literal-key-quotes +const xmlString = ` + + + some value + + + Text 1 + + + Text 2 + + + `; -// const convertedXmlElement = { -// deleted: false, -// rootKey: "w:p", -// root: [ -// { -// deleted: false, -// rootKey: "w:rPr", -// root: [{ deleted: false, rootKey: "w:noProof", root: ["some value"] }], -// }, -// { -// deleted: false, -// rootKey: "w:r", -// root: [{ deleted: false, rootKey: "w:t", root: ["Text 1"] }], -// _attr: { active: "true" }, -// }, -// { -// deleted: false, -// rootKey: "w:r", -// root: [{ deleted: false, rootKey: "w:t", root: ["Text 2"] }], -// _attr: { active: "true" }, -// }, -// ], -// _attr: { "w:one": "value 1", "w:two": "value 2" }, -// }; +const convertedXmlElement = { + deleted: false, + root: [ + { + deleted: false, + rootKey: "w:p", + root: [ + { deleted: false, rootKey: "w:rPr", root: [{ deleted: false, rootKey: "w:noProof", root: ["some value"] }] }, + { deleted: false, rootKey: "w:r", root: [{ deleted: false, rootKey: "w:t", root: ["Text 1"] }], _attr: { active: "true" } }, + { deleted: false, rootKey: "w:r", root: [{ deleted: false, rootKey: "w:t", root: ["Text 2"] }], _attr: { active: "true" } }, + ], + _attr: { "w:one": "value 1", "w:two": "value 2" }, + }, + ], + rootKey: undefined, +}; -// describe("ImportedXmlComponent", () => { -// let importedXmlComponent: ImportedXmlComponent; +describe("ImportedXmlComponent", () => { + let importedXmlComponent: ImportedXmlComponent; -// beforeEach(() => { -// const attributes = { -// someAttr: "1", -// otherAttr: "2", -// }; -// importedXmlComponent = new ImportedXmlComponent("w:test", attributes); -// importedXmlComponent.push(new ImportedXmlComponent("w:child")); -// }); + beforeEach(() => { + const attributes = { + someAttr: "1", + otherAttr: "2", + }; + importedXmlComponent = new ImportedXmlComponent("w:test", attributes); + importedXmlComponent.push(new ImportedXmlComponent("w:child")); + }); -// describe("#prepForXml()", () => { -// it("should transform for xml", () => { -// const converted = importedXmlComponent.prepForXml(); -// expect(converted).to.eql({ -// "w:test": [ -// { -// _attr: { -// someAttr: "1", -// otherAttr: "2", -// }, -// }, -// { -// "w:child": [], -// }, -// ], -// }); -// }); -// }); + describe("#prepForXml()", () => { + it("should transform for xml", () => { + const converted = importedXmlComponent.prepForXml(); + expect(converted).to.eql({ + "w:test": [ + { + _attr: { + someAttr: "1", + otherAttr: "2", + }, + }, + { + "w:child": [], + }, + ], + }); + }); + }); -// it("should create XmlComponent from xml string", () => { -// const converted = ImportedXmlComponent.fromXmlString(xmlString); -// expect(converted).to.eql(convertedXmlElement); -// }); + it("should create XmlComponent from xml string", () => { + const converted = ImportedXmlComponent.fromXmlString(xmlString); + expect(converted).to.eql(convertedXmlElement); + }); -// describe("convertToXmlComponent", () => { -// it("should convert to xml component", () => { -// const converted = convertToXmlComponent("w:p", importedXmlElement["w:p"]); -// expect(converted).to.eql(convertedXmlElement); -// }); -// }); -// }); + describe("convertToXmlComponent", () => { + it("should convert to xml component", () => { + const xmlObj = xml2js(xmlString, { compact: false }) as Element; + const converted = convertToXmlComponent(xmlObj); + expect(converted).to.eql(convertedXmlElement); + }); + }); +}); diff --git a/src/file/xml-components/imported-xml-component.ts b/src/file/xml-components/imported-xml-component.ts index 8fa8f9746b..7485c651e0 100644 --- a/src/file/xml-components/imported-xml-component.ts +++ b/src/file/xml-components/imported-xml-component.ts @@ -1,5 +1,5 @@ // tslint:disable:no-any -import { Element as XmlElement } from "xml-js"; +import { Element as XmlElement, xml2js } from "xml-js"; import { IXmlableObject, XmlComponent } from "."; /** @@ -9,6 +9,7 @@ import { IXmlableObject, XmlComponent } from "."; export function convertToXmlComponent(element: XmlElement): ImportedXmlComponent | string | undefined { switch (element.type) { + case undefined: case "element": const xmlComponent = new ImportedXmlComponent(element.name as string, element.attributes); const childElments = element.elements || []; @@ -30,6 +31,15 @@ export function convertToXmlComponent(element: XmlElement): ImportedXmlComponent * Represents imported xml component from xml file. */ export class ImportedXmlComponent extends XmlComponent { + /** + * Converts the xml string to a XmlComponent tree. + * + * @param importedContent xml content of the imported component + */ + public static fromXmlString(importedContent: string): ImportedXmlComponent { + const xmlObj = xml2js(importedContent, { compact: false }) as XmlElement; + return convertToXmlComponent(xmlObj) as ImportedXmlComponent; + } /** * Converts the xml string to a XmlComponent tree. *