- Remove stale imports and unused locals from split engine and e2e tests - Drop the targeted no-unused-vars test allowances - Keep check and affected test suites warning-free
103 lines
3.4 KiB
TypeScript
103 lines
3.4 KiB
TypeScript
import { describe, expect, test } from 'bun:test'
|
|
|
|
import { SceneGraph } from '@open-pencil/core'
|
|
|
|
import { getNodeOrThrow } from '#tests/helpers/assert'
|
|
import { createRect, firstPageId } from '#tests/helpers/scene'
|
|
|
|
describe('multi-node property merging', () => {
|
|
test('same values merge to single value', () => {
|
|
const graph = new SceneGraph()
|
|
const page = firstPageId(graph)
|
|
const a = createRect(graph, page, { width: 100, height: 50 })
|
|
const b = createRect(graph, page, { width: 100, height: 50 })
|
|
const nodes = [getNodeOrThrow(graph, a.id), getNodeOrThrow(graph, b.id)]
|
|
|
|
const widths = new Set(nodes.map((n) => n.width))
|
|
expect(widths.size).toBe(1)
|
|
expect([...widths][0]).toBe(100)
|
|
})
|
|
|
|
test('different values are detected', () => {
|
|
const graph = new SceneGraph()
|
|
const page = firstPageId(graph)
|
|
const a = createRect(graph, page, { width: 100 })
|
|
const b = createRect(graph, page, { width: 200 })
|
|
const nodes = [getNodeOrThrow(graph, a.id), getNodeOrThrow(graph, b.id)]
|
|
|
|
const widths = new Set(nodes.map((n) => n.width))
|
|
expect(widths.size).toBe(2)
|
|
})
|
|
|
|
test('update applies to all selected nodes', () => {
|
|
const graph = new SceneGraph()
|
|
const page = firstPageId(graph)
|
|
const a = createRect(graph, page, { width: 100 })
|
|
const b = createRect(graph, page, { width: 200 })
|
|
const c = createRect(graph, page, { width: 150 })
|
|
|
|
for (const id of [a.id, b.id, c.id]) {
|
|
graph.updateNode(id, { width: 300 })
|
|
}
|
|
|
|
expect(getNodeOrThrow(graph, a.id).width).toBe(300)
|
|
expect(getNodeOrThrow(graph, b.id).width).toBe(300)
|
|
expect(getNodeOrThrow(graph, c.id).width).toBe(300)
|
|
})
|
|
|
|
test('opacity update applies uniformly', () => {
|
|
const graph = new SceneGraph()
|
|
const page = firstPageId(graph)
|
|
const a = createRect(graph, page)
|
|
const b = createRect(graph, page)
|
|
|
|
graph.updateNode(a.id, { opacity: 0.5 })
|
|
graph.updateNode(b.id, { opacity: 0.8 })
|
|
|
|
for (const id of [a.id, b.id]) {
|
|
graph.updateNode(id, { opacity: 0.75 })
|
|
}
|
|
|
|
expect(getNodeOrThrow(graph, a.id).opacity).toBe(0.75)
|
|
expect(getNodeOrThrow(graph, b.id).opacity).toBe(0.75)
|
|
})
|
|
|
|
test('fills comparison detects mixed', () => {
|
|
const graph = new SceneGraph()
|
|
const page = firstPageId(graph)
|
|
const a = createRect(graph, page)
|
|
const b = createRect(graph, page)
|
|
|
|
graph.updateNode(a.id, {
|
|
fills: [{ type: 'SOLID', color: { r: 1, g: 0, b: 0, a: 1 }, opacity: 1, visible: true }]
|
|
})
|
|
graph.updateNode(b.id, {
|
|
fills: [{ type: 'SOLID', color: { r: 0, g: 1, b: 0, a: 1 }, opacity: 1, visible: true }]
|
|
})
|
|
|
|
const nodeA = getNodeOrThrow(graph, a.id)
|
|
const nodeB = getNodeOrThrow(graph, b.id)
|
|
expect(JSON.stringify(nodeA.fills)).not.toBe(JSON.stringify(nodeB.fills))
|
|
})
|
|
|
|
test('fills comparison detects same', () => {
|
|
const graph = new SceneGraph()
|
|
const page = firstPageId(graph)
|
|
const fill = {
|
|
type: 'SOLID' as const,
|
|
color: { r: 1, g: 0, b: 0, a: 1 },
|
|
opacity: 1,
|
|
visible: true
|
|
}
|
|
const a = createRect(graph, page)
|
|
const b = createRect(graph, page)
|
|
|
|
graph.updateNode(a.id, { fills: [{ ...fill }] })
|
|
graph.updateNode(b.id, { fills: [{ ...fill }] })
|
|
|
|
const nodeA = getNodeOrThrow(graph, a.id)
|
|
const nodeB = getNodeOrThrow(graph, b.id)
|
|
expect(JSON.stringify(nodeA.fills)).toBe(JSON.stringify(nodeB.fills))
|
|
})
|
|
})
|