openpencil/tests/engine/scene-graph/vector-network.test.ts
Danila Poyarkov 1f2f2468cc feat(svg): flatten compatible imported fills
- Merge adjacent filled SVG paths into editable multi-color vector networks
- Preserve stroke ordering and remap gradients into flattened bounds
- Export path-level solid and gradient fills without losing paint fidelity
- Cover real provider artwork, SVG round trips, and CanvasKit output

Co-authored-by: Rob Coenen <753704+rcoenen@users.noreply.github.com>
2026-08-01 15:30:13 +03:00

46 lines
1.3 KiB
TypeScript

import { describe, expect, test } from 'bun:test'
import { mergeVectorNetworks, type VectorNetwork } from '@open-pencil/scene-graph'
import { expectDefined } from '#tests/helpers/assert'
function lineNetwork(x: number): VectorNetwork {
return {
vertices: [
{ x, y: 0 },
{ x: x + 1, y: 1 }
],
segments: [
{
start: 0,
end: 1,
tangentStart: { x: 0, y: 0 },
tangentEnd: { x: 0, y: 0 }
}
],
regions: [{ windingRule: 'NONZERO', loops: [[0]] }]
}
}
describe('mergeVectorNetworks', () => {
test('offsets indices and returns independent geometry', () => {
const first = lineNetwork(0)
const second = lineNetwork(10)
const merged = mergeVectorNetworks([first, second])
expect(merged.vertices).toHaveLength(4)
expect(merged.segments.map(({ start, end }) => [start, end])).toEqual([
[0, 1],
[2, 3]
])
expect(merged.regions.map(({ loops }) => loops)).toEqual([[[0]], [[1]]])
expectDefined(merged.vertices[0]).x = 50
expectDefined(merged.segments[0]).tangentStart.x = 50
expectDefined(expectDefined(merged.regions[0]).loops[0])[0] = 50
expect(expectDefined(first.vertices[0]).x).toBe(0)
expect(expectDefined(first.segments[0]).tangentStart.x).toBe(0)
expect(expectDefined(expectDefined(first.regions[0]).loops[0])[0]).toBe(0)
})
})