Files
site-builder/craft/src/components/layout/ColumnLayout.toHtml.test.ts
T

32 lines
1.5 KiB
TypeScript
Raw Normal View History

import { describe, test, expect } from 'vitest';
import { ColumnLayout } from './ColumnLayout';
const toHtml = (ColumnLayout as any).toHtml;
describe('ColumnLayout.toHtml width export from split', () => {
test('non-default split (70-30) exports per-column width CSS matching each column', () => {
const { html } = toHtml({ columns: 2, split: '70-30', gap: '16px' }, '<div>A</div><div>B</div>');
// First column gets 70%, second gets 30% (same mapping as getWidths()).
expect(html).toMatch(/nth-child\(1\)[^}]*calc\(70% - 16px\)/);
expect(html).toMatch(/nth-child\(2\)[^}]*calc\(30% - 16px\)/);
});
test('default 50-50 split still exports equal widths', () => {
const { html } = toHtml({ columns: 2, split: '50-50', gap: '16px' }, '<div>A</div><div>B</div>');
expect(html).toMatch(/nth-child\(1\)[^}]*calc\(50% - 16px\)/);
expect(html).toMatch(/nth-child\(2\)[^}]*calc\(50% - 16px\)/);
});
test('3-column 33-33-33 split exports three width rules', () => {
const { html } = toHtml({ columns: 3, split: '33-33-33', gap: '16px' }, '<div>A</div><div>B</div><div>C</div>');
expect(html).toMatch(/nth-child\(1\)[^}]*calc\(33\.333% - 16px\)/);
expect(html).toMatch(/nth-child\(2\)[^}]*calc\(33\.333% - 16px\)/);
expect(html).toMatch(/nth-child\(3\)[^}]*calc\(33\.333% - 16px\)/);
});
test('childrenHtml is preserved in the output', () => {
const { html } = toHtml({ columns: 2, split: '70-30', gap: '16px' }, '<div>A</div><div>B</div>');
expect(html).toContain('<div>A</div><div>B</div>');
});
});