Files
docx-js/src/file/xml-components/imported-xml-component.spec.ts

118 lines
3.8 KiB
TypeScript
Raw Normal View History

2023-06-05 00:33:43 +01:00
import { beforeEach, describe, expect, it } from "vitest";
2018-10-31 21:57:10 +00:00
import { Element, xml2js } from "xml-js";
2022-08-31 08:59:27 +01:00
import { EMPTY_OBJECT } from "@file/xml-components";
2022-11-03 00:30:16 +00:00
import { convertToXmlComponent, ImportedRootElementAttributes, ImportedXmlComponent } from "./imported-xml-component";
2021-03-11 01:06:55 +00:00
import { IContext } from "./base";
2018-10-31 21:57:10 +00:00
const xmlString = `
<w:p w:one="value 1" w:two="value 2">
<w:rPr>
<w:noProof>some value</w:noProof>
</w:rPr>
<w:r active="true">
<w:t>Text 1</w:t>
</w:r>
<w:r active="true">
<w:t>Text 2</w:t>
</w:r>
</w:p>
`;
2018-10-31 21:57:10 +00:00
const convertedXmlElement = {
root: [
{
rootKey: "w:p",
root: [
{ rootKey: "_attr", root: { "w:one": "value 1", "w:two": "value 2" } },
{ rootKey: "w:rPr", root: [{ rootKey: "w:noProof", root: ["some value"] }] },
{
rootKey: "w:r",
root: [
{ rootKey: "_attr", root: { active: "true" } },
{ rootKey: "w:t", root: ["Text 1"] },
],
},
{
rootKey: "w:r",
root: [
{ rootKey: "_attr", root: { active: "true" } },
{ rootKey: "w:t", root: ["Text 2"] },
],
},
2018-10-31 21:57:10 +00:00
],
},
],
};
2018-10-31 21:57:10 +00:00
describe("ImportedXmlComponent", () => {
let importedXmlComponent: ImportedXmlComponent;
2018-10-31 21:57:10 +00:00
beforeEach(() => {
const attributes = {
someAttr: "1",
otherAttr: "2",
};
importedXmlComponent = new ImportedXmlComponent("w:test", attributes);
importedXmlComponent.push(new ImportedXmlComponent("w:child"));
});
2018-10-31 21:57:10 +00:00
describe("#prepForXml()", () => {
it("should transform for xml", () => {
2021-03-11 01:06:55 +00:00
// tslint:disable-next-line: no-object-literal-type-assertion
const converted = importedXmlComponent.prepForXml({ stack: [] } as unknown as IContext);
2023-06-07 03:19:54 +01:00
expect(JSON.parse(JSON.stringify(converted))).to.deep.equal({
2018-10-31 21:57:10 +00:00
"w:test": [
{
_attr: {
someAttr: "1",
otherAttr: "2",
},
},
{
"w:child": EMPTY_OBJECT,
2018-10-31 21:57:10 +00:00
},
],
});
});
});
2018-10-31 21:57:10 +00:00
it("should create XmlComponent from xml string", () => {
const converted = ImportedXmlComponent.fromXmlString(xmlString);
2023-06-07 03:19:54 +01:00
expect(JSON.parse(JSON.stringify(converted))).to.deep.equal(convertedXmlElement);
2018-10-31 21:57:10 +00:00
});
2018-10-31 21:57:10 +00:00
describe("convertToXmlComponent", () => {
it("should convert to xml component", () => {
const xmlObj = xml2js(xmlString, { compact: false }) as Element;
const converted = convertToXmlComponent(xmlObj);
2023-06-07 03:19:54 +01:00
expect(JSON.parse(JSON.stringify(converted))).to.deep.equal(convertedXmlElement);
2018-10-31 21:57:10 +00:00
});
2022-11-03 00:30:16 +00:00
it("should return undefined if xml type is invalid", () => {
const xmlObj = { type: "invalid" } as Element;
const converted = convertToXmlComponent(xmlObj);
expect(converted).to.equal(undefined);
});
});
});
describe("ImportedRootElementAttributes", () => {
let attributes: ImportedRootElementAttributes;
beforeEach(() => {
attributes = new ImportedRootElementAttributes({});
});
describe("#prepForXml()", () => {
it("should work", () => {
// tslint:disable-next-line: no-object-literal-type-assertion
const converted = attributes.prepForXml({} as IContext);
expect(converted).to.deep.equal({
_attr: {},
});
});
2018-10-31 21:57:10 +00:00
});
});