Files
docx-js/src/file/numbering/numbering.spec.ts

129 lines
5.3 KiB
TypeScript
Raw Normal View History

2017-03-08 17:07:54 +01:00
import { expect } from "chai";
2018-10-26 01:04:07 +01:00
import { Formatter } from "@export/formatter";
2018-10-26 01:04:07 +01:00
import { Numbering } from "./numbering";
2016-07-01 22:09:55 +01:00
2017-03-08 17:07:54 +01:00
describe("Numbering", () => {
describe("#constructor", () => {
it("creates a default numbering with one abstract and one concrete instance", () => {
2019-11-01 01:57:01 +00:00
const numbering = new Numbering({
2019-11-08 03:11:19 +00:00
config: [],
2019-11-01 01:57:01 +00:00
});
2017-03-08 17:07:54 +01:00
const tree = new Formatter().format(numbering);
2017-03-08 17:37:14 +01:00
expect(Object.keys(tree)).to.deep.equal(["w:numbering"]);
const abstractNums = tree["w:numbering"].filter((el) => el["w:abstractNum"]);
2017-03-08 17:07:54 +01:00
expect(abstractNums).to.have.lengthOf(1);
2017-03-08 17:37:14 +01:00
expect(abstractNums[0]["w:abstractNum"]).to.deep.include.members([
2023-05-04 12:30:31 +03:00
{ _attr: { "w:abstractNumId": 1, "w15:restartNumberingAfterBreak": 0 } },
{ "w:multiLevelType": { _attr: { "w:val": "hybridMultilevel" } } },
2017-03-08 17:07:54 +01:00
]);
2016-07-01 22:09:55 +01:00
2018-12-07 15:34:27 +00:00
abstractNums
.filter((el) => el["w:lvl"])
.forEach((el, ix) => {
expect(Object.keys(el)).to.have.lengthOf(1);
2022-09-19 20:48:50 +01:00
expect(Object.keys(el["w:lvl"])).to.deep.equal(["_attr", "w:start", "w:lvlJc", "w:numFmt", "w:pPr", "w:rPr"]);
2018-12-07 15:34:27 +00:00
expect(el["w:lvl"]).to.have.deep.members([
{ _attr: { "w:ilvl": ix, "w15:tentative": 1 } },
{ "w:start": [{ _attr: { "w:val": 1 } }] },
{ "w:lvlJc": [{ _attr: { "w:val": "left" } }] },
{ "w:numFmt": [{ _attr: { "w:val": "bullet" } }] },
]);
2022-09-19 20:48:50 +01:00
// TODO
2018-12-07 15:34:27 +00:00
// Once chai 4.0.0 lands and #644 is resolved, we can add the following to the test:
// {"w:lvlText": {"_attr": {"w:val": "•"}}},
// {"w:rPr": [{"w:rFonts": {"_attr": {"w:ascii": "Symbol", "w:cs": "Symbol", "w:eastAsia": "Symbol", "w:hAnsi": "Symbol", "w:hint": "default"}}}]},
// {"w:pPr": [
2018-12-07 15:34:27 +00:00
// {"w:ind": [{"_attr": {"w:left": 720, "w:hanging": 360}}]}]},
});
2016-07-01 22:09:55 +01:00
});
2021-03-12 03:58:05 +00:00
describe("#createConcreteNumberingInstance", () => {
it("should create a concrete numbering instance", () => {
const numbering = new Numbering({
config: [
{
reference: "test-reference",
levels: [
{
level: 0,
},
],
},
],
});
expect(numbering.ConcreteNumbering).to.have.length(1);
numbering.createConcreteNumberingInstance("test-reference", 0);
expect(numbering.ConcreteNumbering).to.have.length(2);
});
it("should not create a concrete numbering instance if reference is invalid", () => {
const numbering = new Numbering({
config: [
{
reference: "test-reference",
levels: [
{
level: 0,
},
],
},
],
});
expect(numbering.ConcreteNumbering).to.have.length(1);
numbering.createConcreteNumberingInstance("invalid-reference", 0);
expect(numbering.ConcreteNumbering).to.have.length(1);
});
it("should not create a concrete numbering instance if one already exists", () => {
const numbering = new Numbering({
config: [
{
reference: "test-reference",
levels: [
{
level: 0,
},
],
},
],
});
expect(numbering.ConcreteNumbering).to.have.length(1);
numbering.createConcreteNumberingInstance("test-reference", 0);
numbering.createConcreteNumberingInstance("test-reference", 0);
expect(numbering.ConcreteNumbering).to.have.length(2);
});
});
2021-07-30 11:59:49 +03:00
describe("#referenceConfigMap", () => {
it("should store level configs into referenceConfigMap", () => {
const numbering = new Numbering({
config: [
{
reference: "test-reference",
levels: [
{
level: 0,
start: 10,
},
],
},
],
});
numbering.createConcreteNumberingInstance("test-reference", 0);
const referenceConfig = numbering.ReferenceConfig[0];
const zeroLevelConfig = referenceConfig[0];
expect(zeroLevelConfig.start).to.be.equal(10);
});
});
2016-07-01 22:09:55 +01:00
});
});