- Move newly split tests under explicit domain subfolders - Update nested helper imports after the moves - Add a lint guard against repeating existing sibling domains as filename prefixes
89 lines
2.4 KiB
TypeScript
89 lines
2.4 KiB
TypeScript
import { describe, expect, test } from 'bun:test'
|
|
|
|
import { computeLayout, SceneGraph } from '@open-pencil/core'
|
|
|
|
import { getNodeOrThrow } from '#tests/helpers/assert'
|
|
import { autoFrame, pageId, rect } from '#tests/helpers/layout'
|
|
|
|
describe('min/max constraints', () => {
|
|
test('maxWidth clamps child in horizontal layout', () => {
|
|
const graph = new SceneGraph()
|
|
const frame = autoFrame(graph, pageId(graph), {
|
|
width: 400,
|
|
height: 100
|
|
})
|
|
rect(graph, frame.id, 50, 50, { layoutGrow: 1, maxWidth: 200 })
|
|
|
|
computeLayout(graph, frame.id)
|
|
|
|
const child = graph.getChildren(frame.id)[0]
|
|
expect(child.width).toBe(200)
|
|
})
|
|
|
|
test('minWidth prevents shrinking below minimum', () => {
|
|
const graph = new SceneGraph()
|
|
const frame = autoFrame(graph, pageId(graph), {
|
|
width: 100,
|
|
height: 100
|
|
})
|
|
rect(graph, frame.id, 200, 50, { minWidth: 150 })
|
|
|
|
computeLayout(graph, frame.id)
|
|
|
|
const child = graph.getChildren(frame.id)[0]
|
|
expect(child.width).toBeGreaterThanOrEqual(150)
|
|
})
|
|
|
|
test('maxHeight clamps child in vertical layout', () => {
|
|
const graph = new SceneGraph()
|
|
const frame = autoFrame(graph, pageId(graph), {
|
|
layoutMode: 'VERTICAL',
|
|
width: 200,
|
|
height: 400
|
|
})
|
|
rect(graph, frame.id, 50, 50, { layoutGrow: 1, maxHeight: 150 })
|
|
|
|
computeLayout(graph, frame.id)
|
|
|
|
const child = graph.getChildren(frame.id)[0]
|
|
expect(child.height).toBe(150)
|
|
})
|
|
|
|
test('minHeight enforces minimum in vertical layout', () => {
|
|
const graph = new SceneGraph()
|
|
const frame = autoFrame(graph, pageId(graph), {
|
|
layoutMode: 'VERTICAL',
|
|
width: 200,
|
|
height: 400
|
|
})
|
|
rect(graph, frame.id, 50, 30, { minHeight: 80 })
|
|
|
|
computeLayout(graph, frame.id)
|
|
|
|
const child = graph.getChildren(frame.id)[0]
|
|
expect(child.height).toBe(80)
|
|
})
|
|
|
|
test('min/max on nested auto-layout frame', () => {
|
|
const graph = new SceneGraph()
|
|
const outer = autoFrame(graph, pageId(graph), {
|
|
width: 500,
|
|
height: 200
|
|
})
|
|
const inner = autoFrame(graph, outer.id, {
|
|
primaryAxisSizing: 'FIXED',
|
|
counterAxisSizing: 'FIXED',
|
|
width: 50,
|
|
height: 50,
|
|
layoutGrow: 1,
|
|
maxWidth: 250
|
|
})
|
|
rect(graph, inner.id, 30, 30)
|
|
|
|
computeLayout(graph, outer.id)
|
|
|
|
const innerNode = getNodeOrThrow(graph, inner.id)
|
|
expect(innerNode.width).toBe(250)
|
|
})
|
|
})
|