
    it("should suppress internal vertical rules on a per-row basis in HTML", () => {
        // Without \multicolumn, the rule spans the full array height.
        let built = getBuilt`\begin{array}{c|c} a & b \\ c & d\end{array}`;
        expect(built.reduce((n, node) => n + countClasses(node, "vertical-separator"), 0))
            .toBe(1);
        // The row containing the span interrupts the rule, splitting it
        // into two segments.
        built = getBuilt`\begin{array}{c|c} a & b \\ \multicolumn{2}{c}{x} \\ c & d\end{array}`;
        expect(built.reduce((n, node) => n + countClasses(node, "vertical-separator"), 0))
            .toBe(2);
        // When every row spans the boundary, no rule remains.
        built = getBuilt`\begin{array}{c|c} \multicolumn{2}{c}{x} \\ \multicolumn{2}{c}{y}\end{array}`;
        expect(built.reduce((n, node) => n + countClasses(node, "vertical-separator"), 0))
            .toBe(0);
        // Rules at the edges of the spanned region are not internal and
        // remain.
        built = getBuilt`\begin{array}{|c|c|} a & b \\ \multicolumn{2}{c}{x}\end{array}`;
        expect(built.reduce((n, node) => n + countClasses(node, "vertical-separator"), 0))
            .toBe(3);
    });

    it("should override the column alignment in HTML", () => {
        const built = getBuilt`\begin{array}{ll} \multicolumn{2}{r}{x} \\ a & b\end{array}`;
        expect(built.reduce((n, node) => n + countClasses(node, "multicolumn-align-r"), 0))
            .toBe(1);
    });

