increase test coverage
extend test coverage
This commit is contained in:
140
tests/e2e/unit/svgcore-remap-extra.spec.js
Normal file
140
tests/e2e/unit/svgcore-remap-extra.spec.js
Normal file
@@ -0,0 +1,140 @@
|
||||
import { test, expect } from '../fixtures.js'
|
||||
|
||||
test.describe('SVG core remap extras', () => {
|
||||
test.beforeEach(async ({ page }) => {
|
||||
await page.goto('/tests/unit-harness.html')
|
||||
await page.waitForFunction(() => Boolean(window.svgHarness))
|
||||
})
|
||||
|
||||
test('remapElement handles gradients, text/tspan and paths with snapping', async ({ page }) => {
|
||||
const result = await page.evaluate(() => {
|
||||
const NS = 'http://www.w3.org/2000/svg'
|
||||
const { coords, utilities, units } = window.svgHarness
|
||||
const svg = document.createElementNS(NS, 'svg')
|
||||
const defs = document.createElementNS(NS, 'defs')
|
||||
const grad = document.createElementNS(NS, 'linearGradient')
|
||||
grad.id = 'grad1'
|
||||
grad.setAttribute('x1', '0')
|
||||
grad.setAttribute('x2', '1')
|
||||
grad.setAttribute('y1', '0')
|
||||
grad.setAttribute('y2', '0')
|
||||
defs.append(grad)
|
||||
svg.append(defs)
|
||||
document.body.append(svg)
|
||||
|
||||
const dataStorage = {
|
||||
store: new WeakMap(),
|
||||
put (el, key, value) {
|
||||
if (!this.store.has(el)) this.store.set(el, new Map())
|
||||
this.store.get(el).set(key, value)
|
||||
},
|
||||
get (el, key) {
|
||||
return this.store.get(el)?.get(key)
|
||||
},
|
||||
has (el, key) {
|
||||
return this.store.has(el) && this.store.get(el).has(key)
|
||||
}
|
||||
}
|
||||
let idCounter = 0
|
||||
const canvas = {
|
||||
getSvgRoot: () => svg,
|
||||
getSvgContent: () => svg,
|
||||
getDOMDocument: () => document,
|
||||
getDOMContainer: () => svg,
|
||||
getBaseUnit: () => 'px',
|
||||
getSnappingStep: () => 5,
|
||||
getGridSnapping: () => true,
|
||||
getWidth: () => 200,
|
||||
getHeight: () => 200,
|
||||
getCurrentDrawing: () => ({
|
||||
getNextId: () => 'g' + (++idCounter)
|
||||
}),
|
||||
getDataStorage: () => dataStorage
|
||||
}
|
||||
|
||||
utilities.init(canvas)
|
||||
units.init(canvas)
|
||||
coords.init(canvas)
|
||||
|
||||
const group = document.createElementNS(NS, 'g')
|
||||
svg.append(group)
|
||||
|
||||
const text = document.createElementNS(NS, 'text')
|
||||
text.textContent = 'hello'
|
||||
text.setAttribute('x', '2')
|
||||
text.setAttribute('y', '3')
|
||||
text.setAttribute('font-size', '10')
|
||||
const tspan = document.createElementNS(NS, 'tspan')
|
||||
tspan.setAttribute('x', '4')
|
||||
tspan.setAttribute('y', '5')
|
||||
tspan.setAttribute('font-size', '8')
|
||||
tspan.textContent = 't'
|
||||
text.append(tspan)
|
||||
group.append(text)
|
||||
|
||||
const textMatrix = svg.createSVGMatrix()
|
||||
textMatrix.a = -2
|
||||
textMatrix.d = 1.5
|
||||
textMatrix.e = 10
|
||||
coords.remapElement(text, { x: 2, y: 3 }, textMatrix)
|
||||
|
||||
const rect = document.createElementNS(NS, 'rect')
|
||||
rect.setAttribute('x', '0')
|
||||
rect.setAttribute('y', '0')
|
||||
rect.setAttribute('width', '10')
|
||||
rect.setAttribute('height', '6')
|
||||
rect.setAttribute('fill', 'url(#grad1)')
|
||||
group.append(rect)
|
||||
|
||||
const flipMatrix = svg.createSVGMatrix()
|
||||
flipMatrix.a = -1
|
||||
flipMatrix.d = -1
|
||||
coords.remapElement(rect, { x: 0, y: 0, width: 10, height: 6 }, flipMatrix)
|
||||
|
||||
const path = document.createElementNS(NS, 'path')
|
||||
path.setAttribute('d', 'M0 0 L5 0 l5 5 a2 3 0 0 1 2 2 z')
|
||||
group.append(path)
|
||||
const pathMatrix = svg.createSVGMatrix()
|
||||
pathMatrix.a = 1
|
||||
pathMatrix.d = 2
|
||||
pathMatrix.e = 3
|
||||
pathMatrix.f = -1
|
||||
coords.remapElement(path, {}, pathMatrix)
|
||||
|
||||
return {
|
||||
text: {
|
||||
x: text.getAttribute('x'),
|
||||
y: text.getAttribute('y'),
|
||||
fontSize: text.getAttribute('font-size'),
|
||||
tspanX: tspan.getAttribute('x'),
|
||||
tspanY: tspan.getAttribute('y'),
|
||||
tspanSize: tspan.getAttribute('font-size')
|
||||
},
|
||||
rect: {
|
||||
fill: rect.getAttribute('fill'),
|
||||
width: rect.getAttribute('width'),
|
||||
height: rect.getAttribute('height'),
|
||||
x: rect.getAttribute('x'),
|
||||
y: rect.getAttribute('y')
|
||||
},
|
||||
path: path.getAttribute('d')
|
||||
}
|
||||
})
|
||||
|
||||
expect(result.text).toEqual({
|
||||
x: '5',
|
||||
y: '5',
|
||||
fontSize: '20',
|
||||
tspanX: '2',
|
||||
tspanY: '7.5',
|
||||
tspanSize: '16'
|
||||
})
|
||||
expect(result.rect.fill).toContain('url(#g')
|
||||
expect(result.rect.width).toBe('10')
|
||||
expect(result.rect.height).toBe('5')
|
||||
expect(result.rect.x).toBe('-10')
|
||||
expect(result.rect.y).toBe('-5')
|
||||
expect(result.path.startsWith('M3,')).toBe(true)
|
||||
expect(result.path).toContain('a2,6')
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user