87 lines
3.1 KiB
JavaScript
87 lines
3.1 KiB
JavaScript
import { test, expect } from '../fixtures.js'
|
|
|
|
test.describe('SVG core smoke', () => {
|
|
test.beforeEach(async ({ page }) => {
|
|
await page.goto('/tests/unit-harness.html')
|
|
await page.waitForFunction(() => Boolean(window.svgHarness))
|
|
})
|
|
|
|
test('math basics work with real SVG matrices', async ({ page }) => {
|
|
const result = await page.evaluate(() => {
|
|
const { math } = window.svgHarness
|
|
const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')
|
|
const m = svg.createSVGMatrix().translate(50, 75)
|
|
const pt = math.transformPoint(10, 20, m)
|
|
const isId = math.isIdentity(svg.createSVGMatrix())
|
|
const box = math.transformBox(0, 0, 10, 20, m)
|
|
return {
|
|
pt,
|
|
isId,
|
|
box: {
|
|
x: box.aabox.x,
|
|
y: box.aabox.y,
|
|
width: box.aabox.width,
|
|
height: box.aabox.height
|
|
}
|
|
}
|
|
})
|
|
expect(result.isId).toBe(true)
|
|
expect(result.pt.x).toBe(60)
|
|
expect(result.pt.y).toBe(95)
|
|
expect(result.box).toEqual({ x: 50, y: 75, width: 10, height: 20 })
|
|
})
|
|
|
|
test('coords module exposes remapElement', async ({ page }) => {
|
|
const hasRemap = await page.evaluate(() => {
|
|
return typeof window.svgHarness.coords.remapElement === 'function'
|
|
})
|
|
expect(hasRemap).toBe(true)
|
|
})
|
|
|
|
test('path.convertPath converts to relative without throwing', async ({ page }) => {
|
|
const d = await page.evaluate(() => {
|
|
const { pathModule, units } = window.svgHarness
|
|
units.init({
|
|
getRoundDigits: () => 2,
|
|
getBaseUnit: () => 'px'
|
|
})
|
|
const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')
|
|
const path = document.createElementNS('http://www.w3.org/2000/svg', 'path')
|
|
path.setAttribute('d', 'M0 0 L10 0 L10 10 Z')
|
|
svg.append(path)
|
|
pathModule.convertPath(path, true)
|
|
return path.getAttribute('d')
|
|
})
|
|
expect(d?.toLowerCase()).toContain('m')
|
|
expect(d?.toLowerCase()).toContain('z')
|
|
})
|
|
|
|
test('utilities getBBoxFromPath returns finite numbers', async ({ page }) => {
|
|
const bbox = await page.evaluate(() => {
|
|
const { utilities } = window.svgHarness
|
|
const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')
|
|
const rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect')
|
|
rect.setAttribute('x', '0')
|
|
rect.setAttribute('y', '1')
|
|
rect.setAttribute('width', '5')
|
|
rect.setAttribute('height', '10')
|
|
svg.append(rect)
|
|
const res = utilities.getBBoxOfElementAsPath(
|
|
rect,
|
|
(json) => {
|
|
const el = document.createElementNS('http://www.w3.org/2000/svg', json.element)
|
|
Object.entries(json.attr).forEach(([k, v]) => el.setAttribute(k, v))
|
|
svg.append(el)
|
|
return el
|
|
},
|
|
{ resetOrientation: () => {} }
|
|
)
|
|
return { x: res.x, y: res.y, width: res.width, height: res.height }
|
|
})
|
|
expect(Number.isFinite(bbox.x)).toBe(true)
|
|
expect(Number.isFinite(bbox.y)).toBe(true)
|
|
expect(Number.isFinite(bbox.width)).toBe(true)
|
|
expect(Number.isFinite(bbox.height)).toBe(true)
|
|
})
|
|
})
|