openpencil/tests/engine/editor/selection/properties.test.ts
Danila Poyarkov 9e4d7bee5d chore(lint): fix unused test code
- 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
2026-05-06 02:53:19 +03:00

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))
})
})