import assert from "node:assert/strict"
import { describe, it } from "node:test"
import {
extractDocxPageBackground,
parseDocumentBackgroundXml,
parseWatermarkFromHeaderXml,
resolvePageBackgroundLayers,
} from "./doc-page-background.ts"
describe("doc-page-background", () => {
it("parses solid page color from w:background", () => {
const result = parseDocumentBackgroundXml(
``,
{}
)
assert.equal(result.pageColor, "#C6D9F1")
})
it("parses gradient fill css", () => {
const result = parseDocumentBackgroundXml(
`
`,
{}
)
assert.match(result.background?.gradientCss ?? "", /linear-gradient\(45deg/)
})
it("parses text watermark from header vml", () => {
const watermark = parseWatermarkFromHeaderXml(
`
`,
{},
"word/_rels/header1.xml.rels"
)
assert.equal(watermark?.kind, "text")
assert.equal(watermark?.text, "CONFIDENTIEL")
assert.equal(watermark?.rotationDeg, 315)
})
it("resolves background layers for rendering", () => {
const layers = resolvePageBackgroundLayers({
gradientCss: "linear-gradient(180deg, #fff, #eee)",
watermark: {
kind: "text",
text: "BROUILLON",
color: "#cccccc",
opacity: 0.4,
rotationDeg: -45,
},
})
assert.ok(layers.gradientCss)
assert.equal(layers.watermarkStyle?.text, "BROUILLON")
})
it("extracts background from document xml archive", () => {
const archive = {
"word/document.xml": new TextEncoder().encode(
``
),
}
const result = extractDocxPageBackground(archive, new TextDecoder().decode(archive["word/document.xml"]))
assert.equal(result.pageColor, "#FFF2CC")
})
})