docx
Version:
Easily generate .docx files with JS/TS with a nice declarative API. Works for Node and on the Browser.
163 lines (152 loc) • 6.36 kB
text/typescript
import { expect } from "chai";
import { Formatter } from "export/formatter";
import { Paragraph, TextRun } from "file/paragraph";
import { Footnote, FootnoteType } from "./footnote";
describe("Footnote", () => {
describe("#constructor", () => {
it("should create a footnote with a footnote type", () => {
const footnote = new Footnote({
id: 1,
type: FootnoteType.SEPERATOR,
children: [],
});
const tree = new Formatter().format(footnote);
expect(Object.keys(tree)).to.deep.equal(["w:footnote"]);
expect(tree["w:footnote"]).to.deep.equal({ _attr: { "w:type": "separator", "w:id": 1 } });
});
it("should create a footnote without a footnote type", () => {
const footnote = new Footnote({
id: 1,
children: [],
});
const tree = new Formatter().format(footnote);
expect(Object.keys(tree)).to.deep.equal(["w:footnote"]);
expect(tree["w:footnote"]).to.deep.equal({ _attr: { "w:id": 1 } });
});
it("should append footnote ref run on the first footnote paragraph", () => {
const footnote = new Footnote({
id: 1,
children: [new Paragraph({ children: [new TextRun("test-footnote")] })],
});
const tree = new Formatter().format(footnote);
expect(tree).to.deep.equal({
"w:footnote": [
{
_attr: {
"w:id": 1,
},
},
{
"w:p": [
{
"w:r": [
{
"w:rPr": [
{
"w:rStyle": {
_attr: {
"w:val": "FootnoteReference",
},
},
},
],
},
{
"w:footnoteRef": {},
},
],
},
{
"w:r": [
{
"w:t": [
{
_attr: {
"xml:space": "preserve",
},
},
"test-footnote",
],
},
],
},
],
},
],
});
});
it("should add multiple paragraphs", () => {
const footnote = new Footnote({
id: 1,
children: [
new Paragraph({ children: [new TextRun("test-footnote")] }),
new Paragraph({ children: [new TextRun("test-footnote-2")] }),
],
});
const tree = new Formatter().format(footnote);
expect(tree).to.deep.equal({
"w:footnote": [
{
_attr: {
"w:id": 1,
},
},
{
"w:p": [
{
"w:r": [
{
"w:rPr": [
{
"w:rStyle": {
_attr: {
"w:val": "FootnoteReference",
},
},
},
],
},
{
"w:footnoteRef": {},
},
],
},
{
"w:r": [
{
"w:t": [
{
_attr: {
"xml:space": "preserve",
},
},
"test-footnote",
],
},
],
},
],
},
{
"w:p": [
{
"w:r": [
{
"w:t": [
{
_attr: {
"xml:space": "preserve",
},
},
"test-footnote-2",
],
},
],
},
],
},
],
});
});
});
});