import { assert } from "chai";
import { matchResultToJson } from "generic-parser/lib/core";
import type { Controls } from "../../../node/cst/inline";
import { LineType } from "../../../node/cst/line";
import type { JsonEL } from "../../../node/el/jsonEL";
import { initialEnv } from "../env";
import $appdxItemHeadLine from "./$appdxItemHeadLine";
const env = initialEnv({});
describe("Test $appdxItemHeadLine", () => {
it("Success case (:appdx:)", () => {
/* eslint-disable no-irregular-whitespace */
const offset = 0;
const target = `\
:appdx:付録第一(第二十六条、第四十五条、第四十六条の五関係)
`;
const expectedResult = {
ok: true,
nextOffset: 36,
} as const;
const expectedText = `\
:appdx:付録第一(第二十六条、第四十五条、第四十六条の五関係)
`;
const expectedValue = {
type: LineType.APP,
indentTexts: [] as string[],
mainTag: "Appdx",
controls: [
{
control: ":appdx:",
controlRange: [0, 7],
trailingSpace: "",
trailingSpaceRange: [7, 7],
}
] as Controls,
lineEndText: `
`,
} as const;
const expectedTitle = [
{
tag: "__Text",
attr: {},
children: ["付録第一"],
},
];
const expectedRelatedArticleNum = [
{
tag: "__Parentheses",
attr: {
type: "round",
depth: "1"
},
children: [
{
tag: "__PStart",
attr: {
type: "round"
},
children: ["("]
},
{
tag: "__PContent",
attr: {
type: "round"
},
children: [
{
tag: "__Text",
attr: {},
children: ["第二十六条、第四十五条、第四十六条の五関係"]
}
]
},
{
tag: "__PEnd",
attr: {
type: "round"
},
children: [")"]
}
]
}
];
const result = $appdxItemHeadLine.abstract().match(offset, target, env);
assert.deepInclude(matchResultToJson(result), expectedResult);
if (result.ok) {
assert.deepInclude(result.value.value, expectedValue);
assert.strictEqual(result.value.value.text(), expectedText);
assert.deepStrictEqual(result.value.value.title.map(el => el.json(true)), expectedTitle);
// console.log(JSON.stringify(result.value.value.relatedArticleNum.map(el => el.json(true)), null, 2));
assert.deepStrictEqual(result.value.value.relatedArticleNum.map(el => el.json(true)), expectedRelatedArticleNum);
}
});
it("Success case (:appdx:)", () => {
/* eslint-disable no-irregular-whitespace */
const offset = 0;
const target = `\
:appdx: 付録第一(第二十六条、第四十五条、第四十六条の五関係)
`;
const expectedResult = {
ok: true,
nextOffset: 38,
} as const;
const expectedText = `\
:appdx: 付録第一(第二十六条、第四十五条、第四十六条の五関係)
`;
const expectedValue = {
type: LineType.APP,
indentTexts: [] as string[],
mainTag: "Appdx",
controls: [
{
control: ":appdx:",
controlRange: [0, 7],
trailingSpace: " ",
trailingSpaceRange: [7, 9],
}
] as Controls,
lineEndText: `
`,
} as const;
const expectedTitle = [
{
tag: "__Text",
attr: {},
children: ["付録第一"],
},
];
const expectedRelatedArticleNum = [
{
tag: "__Parentheses",
attr: {
type: "round",
depth: "1"
},
children: [
{
tag: "__PStart",
attr: {
type: "round"
},
children: ["("]
},
{
tag: "__PContent",
attr: {
type: "round"
},
children: [
{
tag: "__Text",
attr: {},
children: ["第二十六条、第四十五条、第四十六条の五関係"]
}
]
},
{
tag: "__PEnd",
attr: {
type: "round"
},
children: [")"]
}
]
}
];
const result = $appdxItemHeadLine.abstract().match(offset, target, env);
assert.deepInclude(matchResultToJson(result), expectedResult);
if (result.ok) {
assert.deepInclude(result.value.value, expectedValue);
assert.strictEqual(result.value.value.text(), expectedText);
assert.deepStrictEqual(result.value.value.title.map(el => el.json(true)), expectedTitle);
// console.log(JSON.stringify(result.value.value.relatedArticleNum.map(el => el.json(true)), null, 2));
assert.deepStrictEqual(result.value.value.relatedArticleNum.map(el => el.json(true)), expectedRelatedArticleNum);
}
});
it("Success case (w/o :appdx:)", () => {
/* eslint-disable no-irregular-whitespace */
const offset = 0;
const target = `\
# 付録第一(第二十六条、第四十五条、第四十六条の五関係)
`;
const expectedResult = {
ok: true,
nextOffset: 31,
} as const;
const expectedText = `\
# 付録第一(第二十六条、第四十五条、第四十六条の五関係)
`;
const expectedValue = {
type: LineType.APP,
indentTexts: [] as string[],
mainTag: "Appdx",
controls: [
{
control: "#",
controlRange: [0, 1],
trailingSpace: " ",
trailingSpaceRange: [1, 2],
}
] as Controls,
lineEndText: `
`,
} as const;
const expectedTitle = [
{
tag: "__Text",
attr: {},
children: ["付録第一"],
},
];
const expectedRelatedArticleNum = [
{
tag: "__Parentheses",
attr: {
type: "round",
depth: "1"
},
children: [
{
tag: "__PStart",
attr: {
type: "round"
},
children: ["("]
},
{
tag: "__PContent",
attr: {
type: "round"
},
children: [
{
tag: "__Text",
attr: {},
children: ["第二十六条、第四十五条、第四十六条の五関係"]
}
]
},
{
tag: "__PEnd",
attr: {
type: "round"
},
children: [")"]
}
]
}
];
const result = $appdxItemHeadLine.abstract().match(offset, target, env);
assert.deepInclude(matchResultToJson(result), expectedResult);
if (result.ok) {
assert.deepInclude(result.value.value, expectedValue);
assert.strictEqual(result.value.value.text(), expectedText);
assert.deepStrictEqual(result.value.value.title.map(el => el.json(true)), expectedTitle);
// console.log(JSON.stringify(result.value.value.relatedArticleNum.map(el => el.json(true)), null, 2));
assert.deepStrictEqual(result.value.value.relatedArticleNum.map(el => el.json(true)), expectedRelatedArticleNum);
}
});
it("Success case (:appdx-table:)", () => {
/* eslint-disable no-irregular-whitespace */
const offset = 0;
const target = `\
:appdx-table:別表第二(第十九条、第二十一条関係)
* - 情報照会者
- 事務
`;
const expectedResult = {
ok: true,
nextOffset: 33,
} as const;
const expectedText = `\
:appdx-table:別表第二(第十九条、第二十一条関係)
`;
const expectedValue = {
type: LineType.APP,
indentTexts: [] as string[],
mainTag: "AppdxTable",
controls: [
{
control: ":appdx-table:",
controlRange: [0, 13],
trailingSpace: "",
trailingSpaceRange: [13, 13],
}
] as Controls,
lineEndText: `
`,
} as const;
const expectedTitle = [
{
tag: "__Text",
attr: {},
children: ["別表第二"],
},
];
const expectedRelatedArticleNum = [
{
tag: "__Parentheses",
attr: {
type: "round",
depth: "1"
},
children: [
{
tag: "__PStart",
attr: {
type: "round"
},
children: ["("]
},
{
tag: "__PContent",
attr: {
type: "round"
},
children: [
{
tag: "__Text",
attr: {},
children: ["第十九条、第二十一条関係"]
}
]
},
{
tag: "__PEnd",
attr: {
type: "round"
},
children: [")"]
}
]
}
];
const result = $appdxItemHeadLine.abstract().match(offset, target, env);
assert.deepInclude(matchResultToJson(result), expectedResult);
if (result.ok) {
assert.deepInclude(result.value.value, expectedValue);
assert.strictEqual(result.value.value.text(), expectedText);
assert.deepStrictEqual(result.value.value.title.map(el => el.json(true)), expectedTitle);
// console.log(JSON.stringify(result.value.value.relatedArticleNum.map(el => el.json(true)), null, 2));
assert.deepStrictEqual(result.value.value.relatedArticleNum.map(el => el.json(true)), expectedRelatedArticleNum);
}
});
it("Success case (w/o :appdx-table:)", () => {
/* eslint-disable no-irregular-whitespace */
const offset = 0;
const target = `\
# 別表第二(第十九条、第二十一条関係)
* - 情報照会者
- 事務
`;
const expectedResult = {
ok: true,
nextOffset: 22,
} as const;
const expectedText = `\
# 別表第二(第十九条、第二十一条関係)
`;
const expectedValue = {
type: LineType.APP,
indentTexts: [] as string[],
mainTag: "AppdxTable",
controls: [
{
control: "#",
controlRange: [0, 1],
trailingSpace: " ",
trailingSpaceRange: [1, 2],
}
] as Controls,
lineEndText: `
`,
} as const;
const expectedTitle = [
{
tag: "__Text",
attr: {},
children: ["別表第二"],
},
];
const expectedRelatedArticleNum = [
{
tag: "__Parentheses",
attr: {
type: "round",
depth: "1"
},
children: [
{
tag: "__PStart",
attr: {
type: "round"
},
children: ["("]
},
{
tag: "__PContent",
attr: {
type: "round"
},
children: [
{
tag: "__Text",
attr: {},
children: ["第十九条、第二十一条関係"]
}
]
},
{
tag: "__PEnd",
attr: {
type: "round"
},
children: [")"]
}
]
}
];
const result = $appdxItemHeadLine.abstract().match(offset, target, env);
assert.deepInclude(matchResultToJson(result), expectedResult);
if (result.ok) {
assert.deepInclude(result.value.value, expectedValue);
assert.strictEqual(result.value.value.text(), expectedText);
assert.deepStrictEqual(result.value.value.title.map(el => el.json(true)), expectedTitle);
// console.log(JSON.stringify(result.value.value.relatedArticleNum.map(el => el.json(true)), null, 2));
assert.deepStrictEqual(result.value.value.relatedArticleNum.map(el => el.json(true)), expectedRelatedArticleNum);
}
});
it("Success case (:appdx-style:)", () => {
/* eslint-disable no-irregular-whitespace */
const offset = 0;
const target = `\
:appdx-style:別記様式(第十四条関係)
`;
const expectedResult = {
ok: true,
nextOffset: 27,
} as const;
const expectedText = `\
:appdx-style:別記様式(第十四条関係)
`;
const expectedValue = {
type: LineType.APP,
indentTexts: [] as string[],
mainTag: "AppdxStyle",
controls: [
{
control: ":appdx-style:",
controlRange: [0, 13],
trailingSpace: "",
trailingSpaceRange: [13, 13],
}
] as Controls,
lineEndText: `
`,
} as const;
const expectedTitle = [
{
tag: "__Text",
attr: {},
children: ["別記様式"],
},
];
const expectedRelatedArticleNum = [
{
tag: "__Parentheses",
attr: {
type: "round",
depth: "1"
},
children: [
{
tag: "__PStart",
attr: {
type: "round"
},
children: ["("]
},
{
tag: "__PContent",
attr: {
type: "round"
},
children: [
{
tag: "__Text",
attr: {},
children: ["第十四条関係"]
}
]
},
{
tag: "__PEnd",
attr: {
type: "round"
},
children: [")"]
}
]
}
];
const result = $appdxItemHeadLine.abstract().match(offset, target, env);
assert.deepInclude(matchResultToJson(result), expectedResult);
if (result.ok) {
assert.deepInclude(result.value.value, expectedValue);
assert.strictEqual(result.value.value.text(), expectedText);
assert.deepStrictEqual(result.value.value.title.map(el => el.json(true)), expectedTitle);
// console.log(JSON.stringify(result.value.value.relatedArticleNum.map(el => el.json(true)), null, 2));
assert.deepStrictEqual(result.value.value.relatedArticleNum.map(el => el.json(true)), expectedRelatedArticleNum);
}
});
it("Success case (:appdx-style:)", () => {
/* eslint-disable no-irregular-whitespace */
const offset = 0;
const target = `\
:appdx-style:別記様式
`;
const expectedResult = {
ok: true,
nextOffset: 19,
} as const;
const expectedText = `\
:appdx-style:別記様式
`;
const expectedValue = {
type: LineType.APP,
indentTexts: [] as string[],
mainTag: "AppdxStyle",
controls: [
{
control: ":appdx-style:",
controlRange: [0, 13],
trailingSpace: "",
trailingSpaceRange: [13, 13],
}
] as Controls,
lineEndText: `
`,
} as const;
const expectedTitle = [
{
tag: "__Text",
attr: {},
children: ["別記様式"],
},
];
const expectedRelatedArticleNum = [] as JsonEL[];
const result = $appdxItemHeadLine.abstract().match(offset, target, env);
assert.deepInclude(matchResultToJson(result), expectedResult);
if (result.ok) {
assert.deepInclude(result.value.value, expectedValue);
assert.strictEqual(result.value.value.text(), expectedText);
assert.deepStrictEqual(result.value.value.title.map(el => el.json(true)), expectedTitle);
// console.log(JSON.stringify(result.value.value.relatedArticleNum.map(el => el.json(true)), null, 2));
assert.deepStrictEqual(result.value.value.relatedArticleNum.map(el => el.json(true)), expectedRelatedArticleNum);
}
});
it("Success case (w/o :appdx-style:)", () => {
/* eslint-disable no-irregular-whitespace */
const offset = 0;
const target = `\
# 別記様式(第十四条関係)
`;
const expectedResult = {
ok: true,
nextOffset: 16,
} as const;
const expectedText = `\
# 別記様式(第十四条関係)
`;
const expectedValue = {
type: LineType.APP,
indentTexts: [] as string[],
mainTag: "AppdxStyle",
controls: [
{
control: "#",
controlRange: [0, 1],
trailingSpace: " ",
trailingSpaceRange: [1, 2],
}
] as Controls,
lineEndText: `
`,
} as const;
const expectedTitle = [
{
tag: "__Text",
attr: {},
children: ["別記様式"],
},
];
const expectedRelatedArticleNum = [
{
tag: "__Parentheses",
attr: {
type: "round",
depth: "1"
},
children: [
{
tag: "__PStart",
attr: {
type: "round"
},
children: ["("]
},
{
tag: "__PContent",
attr: {
type: "round"
},
children: [
{
tag: "__Text",
attr: {},
children: ["第十四条関係"]
}
]
},
{
tag: "__PEnd",
attr: {
type: "round"
},
children: [")"]
}
]
}
];
const result = $appdxItemHeadLine.abstract().match(offset, target, env);
assert.deepInclude(matchResultToJson(result), expectedResult);
if (result.ok) {
assert.deepInclude(result.value.value, expectedValue);
assert.strictEqual(result.value.value.text(), expectedText);
assert.deepStrictEqual(result.value.value.title.map(el => el.json(true)), expectedTitle);
// console.log(JSON.stringify(result.value.value.relatedArticleNum.map(el => el.json(true)), null, 2));
assert.deepStrictEqual(result.value.value.relatedArticleNum.map(el => el.json(true)), expectedRelatedArticleNum);
}
});
it("Success case (:appdx-format:)", () => {
/* eslint-disable no-irregular-whitespace */
const offset = 0;
const target = `\
:appdx-format:別紙第一号書式(第三条関係)
`;
const expectedResult = {
ok: true,
nextOffset: 30,
} as const;
const expectedText = `\
:appdx-format:別紙第一号書式(第三条関係)
`;
const expectedValue = {
type: LineType.APP,
indentTexts: [] as string[],
mainTag: "AppdxFormat",
controls: [
{
control: ":appdx-format:",
controlRange: [0, 14],
trailingSpace: "",
trailingSpaceRange: [14, 14],
}
] as Controls,
lineEndText: `
`,
} as const;
const expectedTitle = [
{
tag: "__Text",
attr: {},
children: ["別紙第一号書式"],
},
];
const expectedRelatedArticleNum = [
{
tag: "__Parentheses",
attr: {
type: "round",
depth: "1"
},
children: [
{
tag: "__PStart",
attr: {
type: "round"
},
children: ["("]
},
{
tag: "__PContent",
attr: {
type: "round"
},
children: [
{
tag: "__Text",
attr: {},
children: ["第三条関係"]
}
]
},
{
tag: "__PEnd",
attr: {
type: "round"
},
children: [")"]
}
]
}
];
const result = $appdxItemHeadLine.abstract().match(offset, target, env);
assert.deepInclude(matchResultToJson(result), expectedResult);
if (result.ok) {
assert.deepInclude(result.value.value, expectedValue);
assert.strictEqual(result.value.value.text(), expectedText);
assert.deepStrictEqual(result.value.value.title.map(el => el.json(true)), expectedTitle);
// console.log(JSON.stringify(result.value.value.relatedArticleNum.map(el => el.json(true)), null, 2));
assert.deepStrictEqual(result.value.value.relatedArticleNum.map(el => el.json(true)), expectedRelatedArticleNum);
}
});
it("Success case (w/o :appdx-format:)", () => {
/* eslint-disable no-irregular-whitespace */
const offset = 0;
const target = `\
# 別紙第一号書式(第三条関係)
`;
const expectedResult = {
ok: true,
nextOffset: 18,
} as const;
const expectedText = `\
# 別紙第一号書式(第三条関係)
`;
const expectedValue = {
type: LineType.APP,
indentTexts: [] as string[],
mainTag: "AppdxFormat",
controls: [
{
control: "#",
controlRange: [0, 1],
trailingSpace: " ",
trailingSpaceRange: [1, 2],
}
] as Controls,
lineEndText: `
`,
} as const;
const expectedTitle = [
{
tag: "__Text",
attr: {},
children: ["別紙第一号書式"],
},
];
const expectedRelatedArticleNum = [
{
tag: "__Parentheses",
attr: {
type: "round",
depth: "1"
},
children: [
{
tag: "__PStart",
attr: {
type: "round"
},
children: ["("]
},
{
tag: "__PContent",
attr: {
type: "round"
},
children: [
{
tag: "__Text",
attr: {},
children: ["第三条関係"]
}
]
},
{
tag: "__PEnd",
attr: {
type: "round"
},
children: [")"]
}
]
}
];
const result = $appdxItemHeadLine.abstract().match(offset, target, env);
assert.deepInclude(matchResultToJson(result), expectedResult);
if (result.ok) {
assert.deepInclude(result.value.value, expectedValue);
assert.strictEqual(result.value.value.text(), expectedText);
assert.deepStrictEqual(result.value.value.title.map(el => el.json(true)), expectedTitle);
// console.log(JSON.stringify(result.value.value.relatedArticleNum.map(el => el.json(true)), null, 2));
assert.deepStrictEqual(result.value.value.relatedArticleNum.map(el => el.json(true)), expectedRelatedArticleNum);
}
});
it("Success case (:appdx-fig:)", () => {
/* eslint-disable no-irregular-whitespace */
const offset = 0;
const target = `\
:appdx-fig: 別図第十一(第19条第1項の表の6の項関係)
`;
const expectedResult = {
ok: true,
nextOffset: 36,
} as const;
const expectedText = `\
:appdx-fig: 別図第十一(第19条第1項の表の6の項関係)
`;
const expectedValue = {
type: LineType.APP,
indentTexts: [] as string[],
mainTag: "AppdxFig",
controls: [
{
control: ":appdx-fig:",
controlRange: [0, 11],
trailingSpace: " ",
trailingSpaceRange: [11, 12],
}
] as Controls,
lineEndText: `
`,
} as const;
const expectedTitle = [
{
tag: "__Text",
attr: {},
children: ["別図第十一"],
},
];
const expectedRelatedArticleNum = [
{
tag: "__Parentheses",
attr: {
type: "round",
depth: "1"
},
children: [
{
tag: "__PStart",
attr: {
type: "round"
},
children: ["("]
},
{
tag: "__PContent",
attr: {
type: "round"
},
children: [
{
tag: "__Text",
attr: {},
children: ["第19条第1項の表の6の項関係"]
}
]
},
{
tag: "__PEnd",
attr: {
type: "round"
},
children: [")"]
}
]
}
];
const result = $appdxItemHeadLine.abstract().match(offset, target, env);
assert.deepInclude(matchResultToJson(result), expectedResult);
if (result.ok) {
assert.deepInclude(result.value.value, expectedValue);
assert.strictEqual(result.value.value.text(), expectedText);
assert.deepStrictEqual(result.value.value.title.map(el => el.json(true)), expectedTitle);
// console.log(JSON.stringify(result.value.value.relatedArticleNum.map(el => el.json(true)), null, 2));
assert.deepStrictEqual(result.value.value.relatedArticleNum.map(el => el.json(true)), expectedRelatedArticleNum);
}
});
it("Success case (w/o :appdx-fig:)", () => {
/* eslint-disable no-irregular-whitespace */
const offset = 0;
const target = `\
# 別図第十一(第19条第1項の表の6の項関係)
`;
const expectedResult = {
ok: true,
nextOffset: 26,
} as const;
const expectedText = `\
# 別図第十一(第19条第1項の表の6の項関係)
`;
const expectedValue = {
type: LineType.APP,
indentTexts: [] as string[],
mainTag: "AppdxFig",
controls: [
{
control: "#",
controlRange: [0, 1],
trailingSpace: " ",
trailingSpaceRange: [1, 2],
}
] as Controls,
lineEndText: `
`,
} as const;
const expectedTitle = [
{
tag: "__Text",
attr: {},
children: ["別図第十一"],
},
];
const expectedRelatedArticleNum = [
{
tag: "__Parentheses",
attr: {
type: "round",
depth: "1"
},
children: [
{
tag: "__PStart",
attr: {
type: "round"
},
children: ["("]
},
{
tag: "__PContent",
attr: {
type: "round"
},
children: [
{
tag: "__Text",
attr: {},
children: ["第19条第1項の表の6の項関係"]
}
]
},
{
tag: "__PEnd",
attr: {
type: "round"
},
children: [")"]
}
]
}
];
const result = $appdxItemHeadLine.abstract().match(offset, target, env);
assert.deepInclude(matchResultToJson(result), expectedResult);
if (result.ok) {
assert.deepInclude(result.value.value, expectedValue);
assert.strictEqual(result.value.value.text(), expectedText);
assert.deepStrictEqual(result.value.value.title.map(el => el.json(true)), expectedTitle);
// console.log(JSON.stringify(result.value.value.relatedArticleNum.map(el => el.json(true)), null, 2));
assert.deepStrictEqual(result.value.value.relatedArticleNum.map(el => el.json(true)), expectedRelatedArticleNum);
}
});
it("Success case (:appdx-note:)", () => {
/* eslint-disable no-irregular-whitespace */
const offset = 0;
const target = `\
:appdx-note:別記第二号(第一条第一項、第九条関係)
`;
const expectedResult = {
ok: true,
nextOffset: 33,
} as const;
const expectedText = `\
:appdx-note:別記第二号(第一条第一項、第九条関係)
`;
const expectedValue = {
type: LineType.APP,
indentTexts: [] as string[],
mainTag: "AppdxNote",
controls: [
{
control: ":appdx-note:",
controlRange: [0, 12],
trailingSpace: "",
trailingSpaceRange: [12, 12],
}
] as Controls,
lineEndText: `
`,
} as const;
const expectedTitle = [
{
tag: "__Text",
attr: {},
children: ["別記第二号"],
},
];
const expectedRelatedArticleNum = [
{
tag: "__Parentheses",
attr: {
type: "round",
depth: "1"
},
children: [
{
tag: "__PStart",
attr: {
type: "round"
},
children: ["("]
},
{
tag: "__PContent",
attr: {
type: "round"
},
children: [
{
tag: "__Text",
attr: {},
children: ["第一条第一項、第九条関係"]
}
]
},
{
tag: "__PEnd",
attr: {
type: "round"
},
children: [")"]
}
]
}
];
const result = $appdxItemHeadLine.abstract().match(offset, target, env);
assert.deepInclude(matchResultToJson(result), expectedResult);
if (result.ok) {
assert.deepInclude(result.value.value, expectedValue);
assert.strictEqual(result.value.value.text(), expectedText);
assert.deepStrictEqual(result.value.value.title.map(el => el.json(true)), expectedTitle);
// console.log(JSON.stringify(result.value.value.relatedArticleNum.map(el => el.json(true)), null, 2));
assert.deepStrictEqual(result.value.value.relatedArticleNum.map(el => el.json(true)), expectedRelatedArticleNum);
}
});
it("Success case (w/o :appdx-note:)", () => {
/* eslint-disable no-irregular-whitespace */
const offset = 0;
const target = `\
# 別記第二号(第一条第一項、第九条関係)
`;
const expectedResult = {
ok: true,
nextOffset: 23,
} as const;
const expectedText = `\
# 別記第二号(第一条第一項、第九条関係)
`;
const expectedValue = {
type: LineType.APP,
indentTexts: [] as string[],
mainTag: "AppdxNote",
controls: [
{
control: "#",
controlRange: [0, 1],
trailingSpace: " ",
trailingSpaceRange: [1, 2],
}
] as Controls,
lineEndText: `
`,
} as const;
const expectedTitle = [
{
tag: "__Text",
attr: {},
children: ["別記第二号"],
},
];
const expectedRelatedArticleNum = [
{
tag: "__Parentheses",
attr: {
type: "round",
depth: "1"
},
children: [
{
tag: "__PStart",
attr: {
type: "round"
},
children: ["("]
},
{
tag: "__PContent",
attr: {
type: "round"
},
children: [
{
tag: "__Text",
attr: {},
children: ["第一条第一項、第九条関係"]
}
]
},
{
tag: "__PEnd",
attr: {
type: "round"
},
children: [")"]
}
]
}
];
const result = $appdxItemHeadLine.abstract().match(offset, target, env);
assert.deepInclude(matchResultToJson(result), expectedResult);
if (result.ok) {
assert.deepInclude(result.value.value, expectedValue);
assert.strictEqual(result.value.value.text(), expectedText);
assert.deepStrictEqual(result.value.value.title.map(el => el.json(true)), expectedTitle);
// console.log(JSON.stringify(result.value.value.relatedArticleNum.map(el => el.json(true)), null, 2));
assert.deepStrictEqual(result.value.value.relatedArticleNum.map(el => el.json(true)), expectedRelatedArticleNum);
}
});
it("Fail case", () => {
/* eslint-disable no-irregular-whitespace */
const offset = 0;
const target = `\
# 附則別表第二(第十九条、第二十一条関係)
* - 情報照会者
- 事務
`;
const expectedResult = {
ok: false,
offset: 0,
expected: "appdxItemHeadLine",
} as const;
const result = $appdxItemHeadLine.abstract().match(offset, target, env);
assert.deepInclude(matchResultToJson(result), expectedResult);
});
});