import { describe, expect, test } from 'bun:test'
import { renderSVGNode, svg } from '@open-pencil/core'
// --- SVGNode builder tests ---
describe('svg() and renderSVGNode()', () => {
test('self-closing element', () => {
const node = svg('rect', { width: 100, height: 50 })
expect(renderSVGNode(node)).toBe('')
})
test('element with text child', () => {
const node = svg('text', { x: 10 }, 'Hello')
expect(renderSVGNode(node)).toBe('Hello')
})
test('nested elements', () => {
const node = svg('g', { id: 'group' }, svg('rect', { width: 10, height: 10 }))
const result = renderSVGNode(node)
expect(result).toContain('')
expect(result).toContain(' ')
expect(result).toContain('')
})
test('filters null/undefined attrs', () => {
const node = svg('rect', { width: 100, fill: undefined, stroke: null })
expect(renderSVGNode(node)).toBe('')
})
test('filters null/undefined/false children', () => {
const node = svg('g', {}, null, false, svg('rect', {}), undefined)
const result = renderSVGNode(node)
expect(result).toContain('')
})
test('escapes attribute values', () => {
const node = svg('text', { 'data-info': 'a"b {
const node = svg('text', {}, '1 < 2 & 3 > 0')
expect(renderSVGNode(node)).toBe('1 < 2 & 3 > 0')
})
})